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