Erc-20

如何創建 ERC20 水龍頭?

  • July 13, 2019

我在思考 ERC20 水龍頭的創建時遇到了一些麻煩。這究竟是如何完成的?我已經創建了一個令牌(https://ropsten.etherscan.io/token/0x90de67a867b18535ad558fec0c418921340ffc91?a=0x18c59adbf99be137b3eeaffd84b083fd623a4c36),但我不確定如何使用水龍頭分發令牌。這純粹是出於測試目的,但我希望能夠根據之前給出的數量給出這個測試令牌的遞減值。

我假設我需要使用我在 getFromFaucet() 函式中使用的 Transfer(),但我對如何將這些令牌發送到不同的地址感到非常困惑。

function getFromFaucet(address _to) returns (bool success) {
       uint256 giveaway_value;

       if (previous_giveaway == 0){
           giveaway_value = starting_giveaway;
           previous_giveaway = starting_giveaway;
       }
       previous_giveaway = previous_giveaway / 2;

       if (balances[msg.sender] >= giveaway_value){
           balances[msg.sender] -= giveaway_value;
           balances[_to] += giveaway_value;
           Transfer(msg.sender, _to, giveaway_value);
           return true;
       }
       else return false;
   }

比如,我如何呼叫這個 getFromFaucet 並將地址傳遞給它?我打算從一個網站分發。

提前致謝!

您正在編寫一個複雜的傳遞函式,唯一的區別是發送者無法控制贈送的金額。

如果你想創建一個令牌水龍頭,我會讓收件人發送交易。還有兩分鐘的冷卻時間來限制可能的濫用。

uint previous_giveaway;
uint last_giveaway;

function drip() returns (bool success) {
   // Only allow to drip every two minutes to limit abuse
   if (now - last_giveaway < 2 minutes) {
       return false;
   }
   last_giveaway = now;
   // deliver half than last time
   uint giveaway_value = previous_giveaway / 2;
   if (giveaway_value == 0){
       giveaway_value = starting_giveaway;
       previous_giveaway = starting_giveaway;
   }
   // It is a faucet mint new tokens
   balances[msg.sender] += giveaway_value;
   totalSupply += giveaway_value;
   Transfer(0x0, msg.sender, giveaway_value);
   return true;
}

要使用 web3 v1.0 從 webapp 呼叫該契約,類似這樣的東西應該​​可以工作

const token = new eth.Contract(abiToken, addressToken);
await token.methods.drip().send({ from: "address" });

合約會將一些代幣存入“地址”。

引用自:https://ethereum.stackexchange.com/questions/42665