国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

solidity經(jīng)典案例-----智能投票

這篇具有很好參考價(jià)值的文章主要介紹了solidity經(jīng)典案例-----智能投票。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

案例分析

角色分析:包括主持人、選民
功能分析:

  1. 僅主持人能授權(quán)給每個(gè)選民1票,即每個(gè)參與投票的選民擁有1票投票權(quán)。
  2. 選民可以選擇將票數(shù)委托給其它選民,當(dāng)然,收委托的選民仍然可以將票數(shù)繼續(xù)委托給其它選民,即存在a—>b–>c–>d,但是,一旦將票數(shù)委托給其它選民后,自己將不再有投票的權(quán)利
  3. 選民和主持人可以選擇任意的提案項(xiàng)目進(jìn)行投票

代碼實(shí)例

pragma solidity^0.6.1;

contract ballot{
  //選民結(jié)構(gòu)
   struct Voter{
       uint weight; //可以投票的數(shù)量
       bool isVoted;//是否已投
       address delegate;//授權(quán)給他人
       uint index;//選擇的提案編號
   }

   //提案結(jié)構(gòu),這里的提案就是要進(jìn)行投票的項(xiàng)目
   struct Proposal{
       bytes32 name;//投票名稱
       uint voteCount;//投票數(shù)
   }
   Proposal []public proposals;//提案數(shù)組
   address public chairman;//主持人
   mapping(address=>Voter) public voters;//全部選民信息

   //構(gòu)造函數(shù)
   constructor(bytes32[]memory _proposalNames)public{
       chairman=msg.sender;
       voters[chairman].weight=1;//主持人可以投1票
       uint i=0;
        //提案初始化
        for(i=0;i<_proposalNames.length;i++){
            Proposal memory p = Proposal(_proposalNames[i],0);
            //存入提案數(shù)組中
            proposals.push(p);
        }
   }
   //授權(quán),僅主持人具有權(quán)利,主持人給每個(gè)選民一票的權(quán)利
   function giveRightToVoter(address _to)public{
       require(msg.sender==chairman,"must be chairman");
       require(!voters[_to].isVoted);
       require(voters[_to].weight==0);
       voters[_to].weight=1;
   }
   //委托,選民可以將投票給自己信任的代表
   function delegate(address _to)public{
       //獲取調(diào)用函數(shù)的賬戶
       address voter = msg.sender;
       //當(dāng)前賬戶必須還未投票
       require(!voters[voter].isVoted,"must not voted");
       //當(dāng)前賬戶的可投的票數(shù)必須>0
       require(voters[voter].weight>0,"must weight >0");
       //委托的賬戶不能是自己
       require(_to!=voter);
       //a--->b--->c-->d
       //循環(huán)判斷待委托人,由于待委托人可能還把票委托給其它人,所以循環(huán)判斷,直到委托賬戶地址不存在為止
       while(voters[_to].delegate!=address(0)){
           _to=voters[_to].delegate;
       }
       //執(zhí)行到這里,_to已經(jīng)是要委托的那個(gè)人,委托給他
       voters[voter].delegate=_to;
       //委托后,認(rèn)為該選民已經(jīng)投過票了
       voters[voter].isVoted=true;
       //如果_to已經(jīng)投過了,自然是無條件支持,直接將自己的票數(shù)累加
       if(voters[_to].isVoted){
           uint index = voters[_to].index;
           proposals[index].voteCount+=voters[voter].weight;
       }else{
           voters[_to].weight+=voters[voter].weight;
       }
       voters[voter].weight=0;
   }
   //投票操作
   function vote(uint _index)public{
       require(!voters[msg.sender].isVoted,"must not voted");
       voters[msg.sender].isVoted=true;
       voters[msg.sender].index=_index;
       //增加提案的投票數(shù)
       proposals[_index].voteCount+=voters[msg.sender].weight;
   }

   //獲取票數(shù)最高的提案編號
   function getWinIndex()public view returns(uint){
       uint i=0;
       uint index=0;
       uint maxCount=0;
       for(i=0;i<proposals.length;i++){
           if(proposals[i].voteCount>maxCount){
               maxCount=proposals[i].voteCount;
               index=i;
           }
       }
         return index;
   }
   //獲取獲勝的提案名稱
   function getWinName()public view returns(bytes32){
       uint index=getWinIndex();
       return proposals[index].name;
   }
}

函數(shù)功能測試

1. 設(shè)置賬戶

1號為主持人賬戶,2-8號為選民賬戶

solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈

2. 主持人部署合約

輸入提案參數(shù):[“0x7465737400000000000000000000000000000000000000000000000000000000”,“0x8535737400000000000000000000000000000000000000000000000000000000”]
solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈

3. 查詢初始化的提案

提案存入到Proposals數(shù)組里面,查看只需要輸入數(shù)組索引即可

solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈

4.主持人授權(quán)給每個(gè)選民1票投票權(quán)

solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈

5. 查看選民的票數(shù)信息

注意:主持人也有1票權(quán)

solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈

6. 選民將自己的票數(shù)委托給其它選民

2號–>3號,3號–>4號,6號–>8號,7號–>6號
注意:選民將票數(shù)委托給其它選民后,無論其它選民是否再次將票數(shù)委托給自己,自己都將沒有投票權(quán)
2號–>3號
solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈
3號票數(shù)變?yōu)?solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈
3號–>4號solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈
3號票數(shù)變?yōu)?solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈
4號票數(shù)變?yōu)?solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈
6號–>8號solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈
8號票數(shù)變?yōu)?solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈
7號–>6號solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈
6號票數(shù)仍未0,因?yàn)檫x民已經(jīng)參與過投票,便不可再次參與投票solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈

7.選民進(jìn)行投票

經(jīng)過上輪的投票委托,現(xiàn)在選民情況為:1號有1票,4號有3票,8號有2票,1號投—>提案1,4號投–>提案2,8號投–>提案2

solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈
solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈
solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈

8. 獲取票數(shù)最高的提案編號

提案1有4票,提案2有2票
solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈

9.獲取票數(shù)最高的提案名稱

solidity投票,solidity,Fisco-bcos智能合約開發(fā),區(qū)塊鏈文章來源地址http://www.zghlxwxcb.cn/news/detail-795016.html

到了這里,關(guān)于solidity經(jīng)典案例-----智能投票的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 多線程四大經(jīng)典案例

    多線程四大經(jīng)典案例

    本節(jié)內(nèi)容很重要, 希 望 大 家 可 以 好 好 看 看 , 一 起 加 油~ 1.單線模式 1.1餓漢模式 1.2懶漢模式 2.阻塞式隊(duì)列 2.1阻塞隊(duì)列是什么 2.2生產(chǎn)者消費(fèi)者模型 2.3標(biāo)準(zhǔn)庫中的阻塞隊(duì)列 2.4阻塞隊(duì)列的實(shí)現(xiàn) 3.定時(shí)器 3.1定時(shí)器是什么 3.2標(biāo)準(zhǔn)庫中的定時(shí)器 3.3實(shí)現(xiàn)定時(shí)器 4.線程池 4.1什么

    2023年04月27日
    瀏覽(21)
  • 國內(nèi)外大數(shù)據(jù)經(jīng)典案例研究

    國內(nèi)外大數(shù)據(jù)經(jīng)典案例研究

    大數(shù)據(jù)時(shí)代的來臨使得產(chǎn)生的數(shù)據(jù)量呈爆炸式增長,各行各業(yè)均面臨著海量數(shù)據(jù)的分析、處理問題。如何運(yùn)用大數(shù)據(jù)技術(shù)從海量數(shù)據(jù)中挖掘出有價(jià)值的信息,將是今后企業(yè)發(fā)展的一個(gè)巨大挑戰(zhàn)。點(diǎn)評收集研究了國內(nèi)外大數(shù)據(jù)應(yīng)用的經(jīng)典案例,希望可以對讀者有所啟示。 1 、塔

    2024年02月05日
    瀏覽(28)
  • 路由器故障排錯(cuò)三大經(jīng)典案例

    對于網(wǎng)絡(luò)管理員來說,熟悉與掌握路由排錯(cuò)的思路和技巧是非常必要的。小編將通過三例典型的路由故障排錯(cuò)案例進(jìn)行分析。 案例1 不堪重負(fù),路由器外網(wǎng)口關(guān)閉 1、網(wǎng)絡(luò)環(huán)境 某單位使用的是Cisco路由器,租用電信30MB做本地接入和l0MB教育網(wǎng)雙線路上網(wǎng),兩年來網(wǎng)絡(luò)運(yùn)行穩(wěn)定,

    2024年02月05日
    瀏覽(20)
  • MySQL學(xué)習(xí)指南&筆記&經(jīng)典案例句

    MySQL學(xué)習(xí)指南&筆記&經(jīng)典案例句

    該文章是一篇關(guān)于MySQL的一個(gè)學(xué)習(xí)的筆記或是指南,該文章中有很多的經(jīng)典的案例可進(jìn)行相應(yīng)的練習(xí)和參考,后期的話會持續(xù)更新關(guān)于數(shù)據(jù)庫系統(tǒng)方面的文章。 關(guān)于綜合案例的話可以對該篇文章進(jìn)行查閱和學(xué)習(xí)也附加了相應(yīng)的問題和sql句: MySQL綜合應(yīng)用練習(xí)(直接拷貝到自己空

    2024年02月05日
    瀏覽(44)
  • Python遞歸的幾個(gè)經(jīng)典案例

    當(dāng)我們碰到諸如需要求階乘或斐波那契數(shù)列的問題時(shí),使用普通的循環(huán)往往比較麻煩,但如果我們使用遞歸時(shí),會簡單許多,起到事半功倍的效果。這篇文章主要和大家分享一些和遞歸有關(guān)的經(jīng)典案例,結(jié)合一些資料談一下個(gè)人的理解,也借此加深自己對遞歸的理解和掌握一

    2024年02月05日
    瀏覽(20)
  • 阿里后端開發(fā):抽象建模經(jīng)典案例

    阿里后端開發(fā):抽象建模經(jīng)典案例

    在互聯(lián)網(wǎng)行業(yè),軟件工程師面對的產(chǎn)品需求大都是以具象的現(xiàn)實(shí)世界事物概念來描述的,遵循的是人類世界的自然語言,而軟件世界里通行的則是機(jī)器語言,兩者間跨度太大,需要一座橋梁來聯(lián)通,抽象建模便是打造這座橋梁的關(guān)鍵?;诔橄蠼#粩嗟厝ゴ秩【?,從現(xiàn)實(shí)

    2024年02月09日
    瀏覽(93)
  • C#中的反射(Reflection)使用經(jīng)典案例

    C#中的反射(Reflection)使用經(jīng)典案例

    C#中的反射(Reflection)是.NET框架提供的一種強(qiáng)大的運(yùn)行時(shí)元編程機(jī)制,它允許程序在運(yùn)行時(shí)獲取類型信息、創(chuàng)建對象實(shí)例、調(diào)用方法、訪問字段和屬性等,而這些操作在編譯時(shí)可能是未知的。以下是幾個(gè)使用反射的典型場景: 1. 動態(tài)加載和調(diào)用類的方法 假設(shè)有一個(gè)庫包含多

    2024年02月02日
    瀏覽(17)
  • C++動態(tài)規(guī)劃經(jīng)典案例解析之合并石子

    C++動態(tài)規(guī)劃經(jīng)典案例解析之合并石子

    區(qū)間類型問題,指求一個(gè)數(shù)列中某一段區(qū)間的值,包括求和、最值等簡單或復(fù)雜問題。此類問題也適用于動態(tài)規(guī)劃思想。 如 前綴和 就是極簡單的區(qū)間問題。如有如下數(shù)組: 現(xiàn)給定區(qū)間信息 [3,6] ,求區(qū)間內(nèi)所有數(shù)字相加結(jié)果。即求如下圖位置數(shù)字之和。 Tips: 區(qū)間至少包括

    2024年02月11日
    瀏覽(23)
  • 【入門Flink】- 02Flink經(jīng)典案例-WordCount

    【入門Flink】- 02Flink經(jīng)典案例-WordCount

    需求:統(tǒng)計(jì)一段文字中,每個(gè)單詞出現(xiàn)的頻次 基本思路:先逐行讀入文件數(shù)據(jù),然后將每一行文字拆分成單詞;接著按照單詞分組,統(tǒng)計(jì)每組數(shù)據(jù)的個(gè)數(shù)。 1.1.數(shù)據(jù)準(zhǔn)備 resources目錄下新建一個(gè) input 文件夾,并在下面創(chuàng)建文本文件words.txt words.txt 1.2.代碼編寫 打印結(jié)果如下:(

    2024年02月06日
    瀏覽(29)
  • 手搭手Ajax經(jīng)典基礎(chǔ)案例省市聯(lián)動

    手搭手Ajax經(jīng)典基礎(chǔ)案例省市聯(lián)動

    環(huán)境介紹 技術(shù)棧 springboot+mybatis-plus+mysql 軟件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 pom.xml application.yml配置文件 數(shù)據(jù)庫表 MybatisX逆向工程 逆向工程:通過數(shù)據(jù)庫表接口,逆向生成java工程結(jié)構(gòu) 實(shí)體類、mapper接口、mapper映射文件、Service接口、serv

    2024年02月08日
    瀏覽(15)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包