我最近在重新學solidity,鞏固一下細節,也寫一個「Solidity 極簡入門」,供小白們使用(編程大佬可以另找教程),每週更新1-3 講。
所有代碼和教程開源在github: github.com/AmazingAng/WTFSolidity
我們在第31 講學習了ERC20 Token標準。這一講,我們將學習ERC20 水龍頭的智能合約。在這個合約中,用戶可以領到免費的ERC20 Token。
Token水龍頭
當人渴的時候,就要去水龍頭接水;當人想要免費Token的時候,就要去Token水龍頭領。 Token水龍頭就是讓用戶免費領Token的網站/應用。
最早的Token水龍頭是比特幣(BTC)水龍頭:現在BTC 一枚要$30,000,但是在2010 年,BTC 的價格只有不到$0.1,並且持有人很少。為了擴大影響力,比特幣社區的Gavin Andresen 開發了BTC 水龍頭,讓別人可以免費領BTC。擼羊毛大家都喜歡,當時就有很多人去擼,一部分變為了BTC 的信徒。 BTC 水龍頭一共送出了超過19,700 枚BTC,現在價值約6 億美元!
ERC20 水龍頭合約
這裡,我們實現一個簡版的ERC20 水龍頭,邏輯非常簡單:我們將一些ERC20 Token轉到水龍頭合約裡,用戶可以通過合約的requestToken() 函數來領取100 單位的Token,每個地址只能領一次。
狀態變量
我們在水龍頭合約中定義3 個狀態變量
amountAllowed 設定每次能領取Token數量(默認為100。不是一百枚,因為Token有小數位數)。
tokenContract 記錄發放的ERC20 Token合約地址。
requestedAddress 記錄領取過Token的地址。
事件
水龍頭合約中定義了1 個SendToken 事件,記錄了每次領取Token的地址和數量,在requestTokens() 函數被調用時釋放。
函數
合約中只有兩個函數:
構造函數:初始化tokenContract 狀態變量,確定發放的ERC20 Token地址。
requestTokens() 函數,用戶調用它可以領取ERC20 Token。
Remix 演示
1 首先,部署ERC20 Token合約,並給自己mint 10000 單位Token。
部署`ERC20`
2 部署Faucet 水龍頭合約,初始化的參數填上面ERC20 Token的合約地址。
部署水龍頭合約
3 利用ERC20 Token合約的trasnfer() 函數,將10000 單位Token轉賬到Faucet 合約地址。
給水龍頭轉賬
4 換一個新賬戶,調用Faucet 合約requestTokens() 函數,領取Token。可以在終端看到SendToken 事件被釋放。
領取Token
5 在ERC20 Token合約上利用balanceOf 查詢賬戶餘額,可以看到餘額變為100,領取成功!
領取成功
總結
這一講,我們介紹了Token水龍頭的歷史和ERC20 水龍頭合約。大家覺得下一個BTC 水龍頭會在哪裡?
原文標題:《Solidity 極簡入門: 32. Token水龍頭》
原文作者: 0xAA
來源:區塊律動