以下合同相當複雜,但展示了很多Solidity的功能。 實行投票合同。 當然,電子投票的主要問題是如何将投票權配置設定給正确的人,以及如何防止操縱。 我們不會在這裡解決所有問題,但至少我們将會展示如何進行委托投票,以便計票同時自動完全透明。
這個想法是每次投票建立一個合同,為每個選項提供一個簡短的名稱。 然後擔任主席的合同的建立者将有權單獨投票給每個位址。
位址後面的人可以選擇投票自己或将他們的投票委托給他們信任的人。
在投票結束時,獲勝<code>winningProposal()</code>将以最多的投票數傳回提案。
上面例子中的<code>require</code>方法的意思是,如果裡面的條件為false,後面的代碼就不執行了,相當于<code>return false</code>.
目前,需要許多交易才能向所有參與者配置設定投票權。 你能想到一個更好的方法嗎?
在本節中,我們将展示在Ethereum建立完全盲目的拍賣合同是多麼容易。 我們将從一個公開的拍賣開始,每個人都可以看到所有的出價,然後把這個合同延伸到一個盲目的拍賣,在投标期結束之前不可能看到實際的出價。
以下簡單拍賣合同的總體思路是,每個人都可以在投标期間發送出價。 出價已經包括彙款/以太網,以将投标人綁定到出價。 如果最高出價提高,先前出價最高者得到她的錢回來。 招标期結束後,合同手續必須手工扣除,受益人才能領取款項 - 合同無法自行投入使用。
先前公開拍賣延伸到下面的盲拍賣。 盲拍賣的好處是,有對投标期結束時沒有時間壓力。 在透明的計算平台上進行盲目拍賣可能聽起來像是一個沖突,但是密碼學就是派上用場了。
在招标期間,投标人實際上并不發送出價,而隻是一個散列版本。 由于現在被認為幾乎不可能找到散列值相等的兩個(足夠長的)值,是以投标人就進行出價。 招标期結束後,投标人必須透露投标:他們發送價值未加密,合同檢查哈希值與招标期間提供的價值相同。
另一個挑戰是如何同時進行拍賣捆綁和盲目:防止投标人在拍賣結束後不發貨的唯一方法是将其與投标一起發送。當在Ethereum價值轉移不能被蒙蔽,任何人都能看到這個價值。
以下合同通過接受任何大于最高出價的值來解決此問題。 由于這當然隻能在揭示階段進行檢查,是以有些投标可能無效,這是有意義的(甚至提供了一個明确的标志,可以将無效出價設定為高價值轉賬):投标人可以通過放置幾個高或 低無效出價。