智慧合約開發實戰(附原始碼),30個開發案例助你年薪60萬!
本文準備了30個程式設計挑戰案例,涉及簡單智慧合約、測試和去中心化應用等。
主要包含以下主題:
1)Solidity智慧合約: lottery(彩票),ICO(首次代幣發行),DAO(去中心化自制組織)
2)Tokens: ERC20, ERC721
3)測試 :Solidity 測試,JavaScript 測試
4)安全: Re-entry attack(重入攻擊)
5)DAPPs & deployment:Truffle(以太坊Solidity程式語言開發框架),Web3
6)外部服務:Oraclize(以太坊預言機),Infura(一個託管的以太坊節點叢集)
7)儲存:IPFS(星際檔案系統),Swarm(以太坊去中心化儲存網路)
切記,一定要自己動手做一遍!動手做一遍!做一遍!
(原始碼連結,建議碼完再對照)
連結:https://pan.baidu.com/s/1UVhLAsG167WC74jp5g9CRg
密碼:i6td
Now,挑戰開始!
01_say_hello
在建立時設定問候語並允許所有者(合約建立者)進行更改
向每個呼叫sayHello方法的人返回問候語
將Hello Daddy返回給建立者
02_balance_address_checker
返回合約地址
返回合約建立者的地址
返回傳送人的地址
返回合約的餘額
返回合約制定者的餘額(僅在你為該合約所有者的前提下)
返回傳送人的餘額
03_basic_random
返回0-99之間的隨機數
計算中的“財務重要性”小於礦工挖掘單一區塊得到的
如何將BLOCKHASH安全地用於隨機數?
04_lottery_10_users
限制為10個使用者
使用者必須支付0.1ETH才能加入以太坊彩票
同一使用者只能加入一次
合約建立者可以加入以太坊彩票
第10個使用者進入後,選擇獲勝者
贏家收走所有的錢
選出獲勝者之後,開始下一輪
05_lottery_no_limit
使用者支付0.1以太即可加入lottery
不限使用者數量
同一使用者可以多次加入
合約所有人亦可以加入
合約所有人決定何時選出贏家
贏家將得到所有獎金
選出贏家即可開始新一輪lottery
06_lottery_multiple_winners
對使用者無限制
使用者須支付0.1 ETH和並從1-100中挑選一個數字
合約所有者決定何時生成隨機數(1-100)
選擇生成數字的使用者獲勝
所有獎勵將分配給所有贏家
07_fundraising
有籌款目標的(創立時設定數額)
籌資有時間限制(創立時設定時間)
任何人都可以增加任何金額,直到時間結束或目標達到為止。
時間到了,但目標尚未完成,使用者可以撤回他們的資金。
當目標達到時,所有者可以取出所有錢
08_basic_token
創造時設定代幣的初始供應量
合約建立者獲得初始Token
Token可以轉移到任何帳戶
有保護措施以防止溢位
任何人可檢查餘額
09_ERC_20_token
基於EIP規範實現ERC 20 token
10_ERC20_usage
使用Zeppelin/">OpenZeppelin建立你自己的ERC 20令牌
繼承“標準token”
新增自定義名稱、符號、小數和初始供應
11_ERC_721_usage
使用OpenZeppelin建立自己的ERC 721令牌
繼承“ERC 721 Token”
新增自定義名稱和符號
12_string_converter
建立函式,將字串轉換為bytz 32
為該函式新增可靠性測試
13_route_manager
合約內必須儲存公交車站的列表。
每個公共汽車站都有id、名稱和座標(例如:czn 1、PKS Cieszyn、10.123222, 33.212345)
所有者能夠新增新的站點
合約必須有測試範圍
14_testing_route_manager
增加Solidity試驗
新增JavaScript測試
15_shared_wallet
合約有且只有一位所有者
所有者可以新增和刪除管理員
管理員可以提取所有資金
合約具有接收轉帳的應付款回退功能
16_multisig_wallet
建立一個多簽名錢包
進行轉移須有3名管理員簽署交易
17_crowdsale
製造可鑄造硬幣(使用Open Zeppelin)
建立簡單的眾包銷售(使用Open Zeppelin)
設定開啟和關閉時間
固定費率和錢包地址
18_roles_management
建立繼承自己的合約(Open Zeppelin)
合約須有管理員名單
所有者可以新增/更新/刪除管理員
合約所有者也是管理員
僅管理員可新增修飾符
19_the_dao_attack
增加非常簡化的DAO合約(押金,提款)
新增攻擊者合約
20_lpg_price
利用Oraclize API獲取LPG價格
21_random_oraclize
使用Oraclize API獲取隨機數
22_raffle_oraclize
使用者可以參與一次抽獎
所有者不能參與
使用Oraclize的RNG選出贏家
23_ipfs_oraclize
向IPF中新增一個簡單的json檔案
使用Oraclize讀取該檔案
將一個json屬性的結果儲存在字串變數中
24_election
每一次選舉建立一個合約,為每個候選人提供一個簡短的名字和地址
合約建立者有權對每個地址單獨投票
每個投票參與者可以投票一次
投票參與者不能為自己投票
25_faucet
添加回退函式以接受付款
增加退出功能,每人最多能得到1ETH
使用事件記錄兩個金額(已支付、轉移)
26_swarm_oraclize
將文字檔案新增到Swarm public gateway ( ofollow,noindex">https://swarm-gateways.net )
通過Oraclize API讀取合約中的檔案
27_dapp_pet_shop
建立DApp( https:// truffleframework.com/tu torials/pet-shop )
允許所有者取消收養
編寫取消收養的測試(TDD)
在SMART合約中新增取消功能
28_infura_deployment
使用Infura新增Ropsten部署設定
29_tic_tac_toe
為2名玩家新增基本的tic tac toe
3x3 board
無需人工智慧
30_web3_DAO_deploy
從 http:// ethereum.org/dao 複製DAO程式碼
將其更新為Solity0.4.24並編譯
使用 web3 和ethereumjs-tx傳送已簽名的交易
使用 Infura將編譯好的合同部署到Ropsten網路
http:// weixin.qq.com/r/X3UXDw7 Ek1PsrUps9yBN (二維碼自動識別)
獲取更多實用開發工具/教程敬請關注BinSTD公眾號