Tengo algunos problemas para pensar en la creación de grifos ERC20. ¿Cómo se hace esto exactamente? Creé un token ( https://ropsten.etherscan.io/token/0x90de67a867b18535ad558fec0c418921340ffc91?a=0x18c59adbf99be137b3eeaffd84b083fd623a4c36 ) pero no estoy seguro de cómo distribuiría tokens utilizando un grifo. Esto es puramente con fines de prueba, pero me gustaría poder regalar valores decrecientes de este token de prueba en función de la cantidad entregada anteriormente.
Supongo que necesitaré usar Transfer(), que usé en mi función getFromFaucet(), pero estoy extremadamente confundido sobre cómo enviar estos tokens a una dirección diferente.
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;
}
Por ejemplo, ¿cómo llamo a este getFromFaucet y le paso la dirección? Estoy planeando distribuir desde un sitio web.
¡Gracias de antemano!
Estás escribiendo una función de transferencia compleja, la única diferencia es que el remitente no puede controlar la cantidad entregada.
Si desea crear un grifo de token, haría que el destinatario envíe la transacción. Tener también un periodo de enfriamiento de dos minutos para limitar posibles abusos.
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;
}
Para llamar a ese contrato desde una aplicación web usando web3 v1.0, algo como esto debería funcionar
const token = new eth.Contract(abiToken, addressToken);
await token.methods.drip().send({ from: "address" });
El contrato depositará unos tokens en "dirección".
colin fausnaught
colin fausnaught
Maulik Vora
colin fausnaught