У меня возникли некоторые проблемы с обдумыванием создания сборщиков ERC20. Как именно это делается? Я создал токен ( https://ropsten.etherscan.io/token/0x90de67a867b18535ad558fec0c418921340ffc91?a=0x18c59adbf99be137b3eeaffd84b083fd623a4c36 ), но я не уверен, как я буду распределять токены с помощью крана. Это чисто для целей тестирования, но я хотел бы иметь возможность отдавать уменьшающиеся значения этого тестового токена на основе предыдущей выданной суммы.
Я предполагаю, что мне нужно будет использовать Transfer(), который я использовал в моей функции getFromFaucet(), но я очень смущен тем, как даже отправить эти токены на другой адрес.
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, должно работать что-то вроде этого.
const token = new eth.Contract(abiToken, addressToken);
await token.methods.drip().send({ from: "address" });
Контракт внесет несколько токенов на «адрес».
Колин Фаусноут
Колин Фаусноут
Маулик Вора
Колин Фаусноут