# ERC20水龙头合约

By [DAO4Resilience](https://paragraph.com/@dao4resilience) · 2022-04-24

---

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

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

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

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

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

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

*   合约仅发放一种ERC20代币，在初始化的时候确认，存于tokenContact变量。
    
    `constructor(address _tokenContract) { tokenContract = _tokenContract; // set token contract }`
    
*   用户调用`requestToken()`函数，就能得到空投代币，并且每个用户只能领一次。
    
    \`//allow users to call the requestTokens function to get tokensfunction 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 [DAO4Resilience](https://paragraph.com/@dao4resilience/erc20)*
