天天看點

來了來了,智能合約開發實戰

注:以下代碼來源于b站上面的基于以太坊的智能合約開發教程【Solidity】連結:https://www.bilibili.com/video/BV1St411a7Pk?p=34

今天做的是一個經典的衆籌合約,小夥伴們跟随腳步

//指定編譯器版本,版本辨別符
pragma solidity >=0.4.0;
 
contract zhongchou
{
//受益者結構體
    struct needer{
        address needAddress;//受益人位址
        uint goal;//衆籌目标金額
        uint amount;//目前衆籌到多少錢
        uint funderAcount;//有多少人給我捐款
        mapping(uint=>funder) map;//是受益者-》捐款人的結構體
    }
    //捐贈者結構體
    struct funder{
        address funderAddress;//捐款人的位址
        uint Tomoney;//捐款金額
    }
    
    //受益人的數量
    uint neederAmount;
    //受益人的id-》受益人結構體的映射
    mapping(uint=>needer) needmap;
    
    //這個是初始化一個新的受益者,需要輸入受益者的位址,目标金額
    function NewNeeder(address _newNeedAddress,uint _goal)
    {
    //受益者人數加一
        neederAmount++;
        //由于要将這個過程上鍊是以要存儲在區塊中,就用到了映射的方法,把受益人存在區塊鍊上
        needmap[neederAmount]=needer(_newNeedAddress,_goal,0,0);
    }
    
    //捐款人捐款,需要受益人的id,捐款人的位址
    function contribute(uint _neederAmount,address _address) payable
    {
    //先擷取受益人這個對象,根據映射擷取,就是“mapping(uint=>needer) needmap;”映射
        needer storage _needer=needmap[_neederAmount];
        //這個時候受益人的總金額等于原始的+本捐贈人給的錢
        _needer.amount=_needer.amount+msg.value;
        //捐贈人數量加一
        _needer.funderAcount++;
        //在受益人結構體中有個映射關系“ mapping(uint=>funder) map;”
        _needer.map[_needer.funderAcount]=funder(_address,msg.value);
    }

	//判斷是否衆籌完成,完成了的話,就把錢給受益人的賬戶打過去,因為一開始錢是在合約中的
    function Iscomplete(uint _neederAmount) payable
    {
    //擷取受益人實體
        needer storage _needer=needmap[_neederAmount];
        //判斷是否完成
        if(_needer.amount>=_needer.goal)
        {
        //完成的話就向該位址轉賬
            _needer.needAddress.transfer(_needer.amount);
        }
    }
    //加上復原函數,對了轉賬的函數上要加上payable
    function () payable
    {
        
    }
    //測試,傳回受益人的目标金額,目前獲得捐款數,參與捐款的人
    function test() view returns(uint,uint,uint)
    {
        return (needmap[1].goal,needmap[1].amount,needmap[1].funderAcount);
    }
}
           

初始化受益人,輸入受益人的位址,和目标金額

來了來了,智能合約開發實戰

然後在contribute中輸入轉賬的受益人的id,和捐贈人的位址,在交易金額上寫上交易額

來了來了,智能合約開發實戰

然後點test就能看到有人轉賬了

來了來了,智能合約開發實戰

此時錢是不夠的,我再多轉兩筆,現在有三個人給他轉賬,目前總金額已經遠遠大于目标金額。

來了來了,智能合約開發實戰

然後開始将錢給他到賬戶中,轉賬前:15393

轉賬後:17593在這裡插入圖檔描述

來了來了,智能合約開發實戰

繼續閱讀