# ERC20水龙头合约 **Published by:** [0xAA](https://paragraph.com/@wtfacademy/) **Published on:** 2022-03-26 **URL:** https://paragraph.com/@wtfacademy/erc20 ## Content 这是一个简单的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什么是代币水龙头?当人渴的时候,就要去水龙头接水;当人想要免费代币的时候,就要去代币水龙头领。代币水龙头就是让用户免费领代币的网站/应用。 最早的代币水龙头是比特币(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水龙头合约逻辑合约仅发放一种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 }前端未完待续。。。 ## Publication Information - [0xAA](https://paragraph.com/@wtfacademy/): Publication homepage - [All Posts](https://paragraph.com/@wtfacademy/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@wtfacademy): Subscribe to updates - [Twitter](https://twitter.com/0xAA_Science): Follow on Twitter