智能合约实现了一个自动化且透明的投票应用。
投票发起人可以发起投票,将投票权赋予投票人;投票人可以自己投票,或将自己的票委托给其他投票人;任何人都可以公开查询投票的结果。
1. 智能合约代码
智能合约结构体
创建投票
赋予投票权
委托投票权
进行投票
查询获胜方案
结构体类型Solidity中的合约(contract)类似面向对象编程语言中的类。
address类型
状态变量
合约中的状态变量会长期保存在区块链中。通过调用合约中的函数,这些状态变量可以被读取和改写。
本例中声明了3个状态变量:chairperson、voters、proposals:
·address public chairperson:投票发起人,类型为address;
·mapping(address=>Voter)public voters:所有投票人,类型为address到Voter的映射;
·Proposal[]public proposals:所有提案,类型为动态大小的Proposal数组。
3个状态变量都使用了public关键字,使得变量可以被外部访问(即通过消息调用)。
事实上,编译器会自动为public的变量创建同名的getter函数,供外部直接读取。
状态变量还可设置为internal或private。internal的状态变量只能被该合约和继承该合约的子合约访问,private的状态变量只能被该合约访问。状态变量默认为internal。
将上述关键状态信息设置为public能够增加投票的公平性和透明性。