01 智能合约概述
智能合约产生价值的最基本前提是有一个强有力的底层介质用于储存,让其不可被物理破坏。
然而,智能合约的本体是一份代码,非常容易被慧改,如何为其提供强力的存储介质就成了问题。这正好是区块链
擅长解决的——通过比特币的实践,证明了区块链可以在分布式环境下让电子记录不可被慕改。
2013年,Vitalik Buterin提出了以太坊,其核心是通过世界状态对区块链数据进行更新和验证。以太坊与比特币最大的不同在于可通过智能合约执行复杂的逻辑操作。
在以太坊上,智能合约的语言是Solidity,它是图灵完备且较为上层的语言,极大地扩展了智能合约的能力范畴,降低了智能合约编写难度。
02 Solidity基础特性
合约构成
状态变量
构造函数
一个智能合约只能有一个构造函数
函数
第一个:uint-》输入
value
自定义:onlyAdmin
返回值:只需给定数据类型
事件
定义事件
构造事件
修饰符
代码在区块链上才能运行,限制在EVM中,
命名规范
合约命名:采用驼峰命名、首字母大写、且能表达对应的业务含义;
方法命名:采用驼峰命名、首字母小写、且能表达对应的业务含义;
事件命名:采用驼峰命名、首字母小写、且能表达对应的业务含义,以Event结尾;
合约变量:采用驼峰命名、以开头,首字母小写、且能表达对应的业务含义;
方法入参/事件参数/局部变量:采用驼峰命名、首字母小写、且能表达对应的业务含义;
方法出参:建议只写出参类型,无需命名,特殊情况例外;
注释
智能合约的注释同大部分编程语言,没有很严格的要求。
对于一些特殊字段、常量、数组中的每个变量及特定逻辑,需进行说明,方法及Event可以使用/comments/
特定字段及逻辑说明可采用//。
03 WeBASE IDE的使用
主要功能
- 首先是建立两个存储的结构体:
- 1)Voter(用于存储投票人的相关信息)
- 2)Proposal(用于存储候选人的相关信息)
- 建立主席的地址存储变量chairperson,和投票人的地址映射对:mapping(address=>Voter)public voters;
- 编写投票等相关功能的函数,如:
- 主席给投票人(地址)授权函数giveRightToVote();
- 投票人投票函数vote(); 投票人委托函数delegate();
- 最后是获胜者输出函数winningProposal()与winnerName()函数。
进入we-deploy
cd fisco/webase-deploy
停止所有服务
python3 deploy.py stopAll
开启所有服务
python3 deploy.py startAll