智能合約實現(xiàn)了一個自動化且透明的投票應(yīng)用。
投票發(fā)起人可以發(fā)起投票允扇,將投票權(quán)賦予投票人心软;投票人可以自己投票,或?qū)⒆约旱钠蔽薪o其他投票人所踊;任何人都可以公開查詢投票的結(jié)果。
1. 智能合約代碼
智能合約結(jié)構(gòu)體
創(chuàng)建投票
賦予投票權(quán)
委托投票權(quán)
進行投票
查詢獲勝方案
結(jié)構(gòu)體類型Solidity中的合約(contract)類似面向?qū)ο缶幊陶Z言中的類概荷。
address類型
狀態(tài)變量
合約中的狀態(tài)變量會長期保存在區(qū)塊鏈中秕岛。通過調(diào)用合約中的函數(shù),這些狀態(tài)變量可以被讀取和改寫误证。
本例中聲明了3個狀態(tài)變量:chairperson继薛、voters、proposals:
·address public chairperson:投票發(fā)起人愈捅,類型為address遏考;
·mapping(address=>Voter)public voters:所有投票人,類型為address到Voter的映射蓝谨;
·Proposal[]public proposals:所有提案灌具,類型為動態(tài)大小的Proposal數(shù)組。
3個狀態(tài)變量都使用了public關(guān)鍵字譬巫,使得變量可以被外部訪問(即通過消息調(diào)用)咖楣。
事實上,編譯器會自動為public的變量創(chuàng)建同名的getter函數(shù)芦昔,供外部直接讀取诱贿。
狀態(tài)變量還可設(shè)置為internal或private。internal的狀態(tài)變量只能被該合約和繼承該合約的子合約訪問烟零,private的狀態(tài)變量只能被該合約訪問瘪松。狀態(tài)變量默認為internal。
將上述關(guān)鍵狀態(tài)信息設(shè)置為public能夠增加投票的公平性和透明性锨阿。