Erc-20
如何創建 ERC20 水龍頭?
我在思考 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" });
合約會將一些代幣存入“地址”。