# ERC20水龙头合约

By [0xAA](https://paragraph.com/@wtfacademy) · 2022-03-26

---

这是一个简单的ERC20水龙头合约，主要是为了开发$PEOPLE水龙头。但这个合约可以用于任何ERC20代币。代码开源，随意使用：

[

GitHub - AmazingAng/ERC20Faucet: ERC20 Faucet Contrct in solidity.
------------------------------------------------------------------

ERC20 Faucet Contrct in solidity. Contribute to AmazingAng/ERC20Faucet development by creating an account on GitHub.

https://github.com

![](https://storage.googleapis.com/papyrus_images/7c5d70e2f97916383e5a32c8c230e03595251853f5f0de9fb81b7d1c1e8aa194.png)

](https://github.com/AmazingAng/ERC20Faucet)

什么是代币水龙头？
---------

当人渴的时候，就要去水龙头接水；当人想要免费代币的时候，就要去代币水龙头领。代币水龙头就是让用户免费领代币的网站/应用。

最早的代币水龙头是比特币（BTC）水龙头：现在BTC一枚要$44,000，但是在2010年，BTC的价格只有不到$0.1，并且持有人很少。为了扩大影响力，比特币社区的Gavin Andresen开发了BTC水龙头，让别人可以免费领BTC。撸羊毛大家都喜欢，当时就有很多人去撸，然后变成了BTC的信徒。BTC水龙头一共送出了超过19,700枚BTC，现在价值超过8亿美元！

更多关于比特币的趣闻，可以看我写的《区块链启示录》读书笔记：

[https://mirror.xyz/ninjak.eth/Jezo3dZ\_9IJ6yclzT\_M21Y\_njZaohfy9obiPRlemy8s](https://mirror.xyz/ninjak.eth/Jezo3dZ_9IJ6yclzT_M21Y_njZaohfy9obiPRlemy8s)

水龙头合约逻辑
-------

*   合约仅发放一种ERC20代币，在初始化的时候确认，存于tokenContact变量。
    
    `constructor(address _tokenContract) { tokenContract = _tokenContract; // set token contract }`
    
*   用户调用`requestToken()`函数，就能得到空投代币，并且每个用户只能领一次。
    
    `//allow users to call the requestTokens function to get tokens function requestTokens () external { require(requestedAddress[_msgSender()] == false, "Can't Request Multiple Times!"); IERC20 token = IERC20(tokenContract); require(token.balanceOf(address(this)) >= amountAllowed, "Faucet Empty!"); token.transfer(_msgSender(), amountAllowed); // transfer token requestedAddress[_msgSender()] = true; // record requested emit SendToken(_msgSender(), amountAllowed); // emit event }`
    

前端
--

未完待续。。。

---

*Originally published on [0xAA](https://paragraph.com/@wtfacademy/erc20)*
