智能合約眾籌專案實戰
首先要給大家說聲抱歉,最近太太太忙了,之前老早說的要進行一個智能合約總結,一直都沒有時間,今天終于能抽出來點時間,做一個收尾作業,
無論做任何事,我都喜歡善始善終,要做就要做徹底,在這里,我們就跟著建勛老師的步伐,一起來實作我們這個乞丐版的災情眾籌專案吧,
當下正值臺風“煙花”的侵襲,鄭州的父老鄉親們身處水深泥流之中,我們大家也都是憂心忡忡,想給我們的同胞盡一份心,盡一份力,生活在我們當下這個時空,各種天災頻發,各種人禍也是經常讓大家吃瓜吃的津津有味,例如,某某H十字又中飽私囊了多少我們的愛心捐贈,某筆款項又又又又不知去向,
那么,我們有沒有好的辦法,好的手段來實作我們的捐款可追溯,透明,公正,沒有貓膩呢?
答案是肯定的,我們學了這么久的智能合約,作為一種圖靈完備的,運行在區塊鏈上的編程語言,便是上述問題的量身打造,在動手之前,我們先的合計合計,雖然是要寫一個乞丐版的專案 ,但也不能缺胳膊少腿的,
我的基本想法就是,首先我們這個系統必須要有兩類人:請求捐贈的人,捐贈的人,另外,我們需要具備 三個功能:發起籌款,捐款,結束捐款,大致的圖就是下面這個樣子了,

想想都是問題,做做都有答案,廢話不多說,我們直接上代碼,
pragma solidity ^0.4.16;
// 乞丐版災情眾籌專案
contract zhouchouTest{
// 發起人或者可以理解為需要被幫助的人
struct needer{
// 發起人錢包地址
address neederAddress;
// 發起人目標籌款金額
uint goal;
// 賬戶金額(已籌得金額)
uint amount;
// 捐款人個數
uint funderAmount;
// 捐款人id與捐款人映射
mapping(uint =>funder) map;
}
// 捐款人
struct funder{
// 捐款人賬戶地址
address funderAddress;
// 捐款金額
uint money;
}
// 作為一個乞丐版的眾籌平臺 我們也不能只支持一個人在該平臺上 發起眾籌
// 當多個人發起時,我們可以記錄一下發起人的總數 也可以作為發起人的id
uint neederId;
// 另外我們還需要將id與發起人做一個映射,方便管理
mapping(uint => needer) needMap;
// 發起眾籌 誰要發起眾籌,需要眾籌多少馬尼呢?
function newNeeder(address _neederAddress, uint _goal){
// 發起人我們需要存盤在區塊鏈上以方便與后續查看 所以不能在記憶體中構造
// needer memory newNeeder = needer(_neederAddress,_goal,0,0);
// 不同的發起人
neederId++;
// 將發起人與我們的計數做一個系結
needMap[neederId] = needer(_neederAddress,_goal,0,0);
}
// 捐贈(看他們那么可憐,我拉上朋友一起給他們捐贈吧)
// 那么到底是誰捐贈的?那我要捐贈給誰?
function contribute(address _funderAddress,uint _neederAmount){
// 根據id確定我要捐給誰
needer storage _needer = needMap[_neederAmount];
// 我要把捐500塊錢,直接打給我想要捐的那個人的賬戶余額里
// 通過msg.value全域變數確認我要捐多少錢
_needer.amount += msg.value;
// 有人給我捐款+1 (此處直接 個數等同于捐贈人id)
_needer.funderAmount++;
// 構造捐贈人(是誰 給我捐贈的,捐了多少馬尼),最終要捐贈給誰
_needer.map[_needer.funderAmount] = funder(_funderAddress,msg.value);
}
// 請求捐贈不同于乞討,我們獲取到了我們需要的馬尼之后,就該結束了,
// 而乞討確實可以作為終身職業,emm 此處應該有一個五味雜陳的表情
// 接收捐贈是否結束?(我發起眾籌已經有一些時日了 災情也結束了 我該看看是不是可以結束籌集馬尼了)
function isComplete(uint _neederId){
// 根據發起人id獲取發起人的籌mn資訊
needer storage _needer = needMap[_neederId];
// 如果籌集的馬尼已經大于我設定的目標籌款馬尼時,那我就提現重新開始好好生活了~
if(_needer.amount > _needer.goal){
// 提現
_needer.neederAddress.transfer(_needer.amount);
}
}
}
撰寫完成我們的眾籌專案后,我們可以部署一下,然后執行以下步驟,

發起眾籌前,1472民眾存款:

發起眾籌后,1472民眾存款:

果然是多了2個達不溜,謝謝土豪大善人,
最后,1472民眾感謝了平臺,感謝了5830`大善人;
5830大善人感謝了平臺,平臺感謝了5830善人,并為其建立了個人檔案,將這一善舉利用hash函式打包,永久地記錄在 了區塊鏈上,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/289765.html
標籤:區塊鏈
上一篇:巨鯨聯合Bitkepp空投來襲
