Wie erstelle ich einen ERC20 Wasserhahn?

Ich habe einige Probleme, mich mit der Entwicklung von ERC20-Wasserhähnen zu befassen. Wie genau wird das gemacht? Ich habe ein Token erstellt ( https://ropsten.etherscan.io/token/0x90de67a867b18535ad558fec0c418921340ffc91?a=0x18c59adbf99be137b3eeaffd84b083fd623a4c36 ), aber ich bin mir nicht sicher, wie ich Token mit einem Wasserhahn verteilen würde. Dies dient nur zu Testzwecken, aber ich möchte in der Lage sein, abnehmende Werte dieses Test-Tokens basierend auf dem zuvor ausgegebenen Betrag zu verschenken.

Ich gehe davon aus, dass ich Transfer() verwenden muss, das ich in meiner Funktion getFromFaucet() verwendet habe, aber ich bin äußerst verwirrt darüber, wie ich diese Token überhaupt dazu bringen kann, an eine andere Adresse gesendet zu werden.

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;
    }

Wie nenne ich das getFromFaucet und übergebe ihm die Adresse? Ich plane, von einer Website aus zu verteilen.

Vielen Dank im Voraus!

Antworten (1)

Sie schreiben eine komplexe Überweisungsfunktion, der einzige Unterschied besteht darin, dass der Absender den verschenkten Betrag nicht kontrollieren kann.

Wenn Sie einen Token-Faucet erstellen möchten, würde ich den Empfänger dazu bringen, die Transaktion zu senden. Außerdem gibt es eine Cooldown-Periode von zwei Minuten, um möglichen Missbrauch einzuschränken.

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;
}

Um diesen Vertrag von einer Webapp mit web3 v1.0 aufzurufen, sollte so etwas funktionieren

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

Der Vertrag wird einige Tokens an "Adresse" hinterlegen.

Die Komplexität der Funktion ist nicht das, was mich verwirrt, sondern wie man die Funktion von einer Web-App aus aufruft
Die web3.js-API war genau das, wonach ich gesucht habe, vielen Dank, Mann! :)
@ColinFausnaught konnte einen ERC20-Token-Faucet erstellen. Wenn ja, können Sie mir einige Test-ERC20-Token im Rinkeby-Netzwerk senden? meine Adresse ist 0x7EAA02f15Aaba8cb163F058ea506d702eB488E49 Jedes ERC20-Token ist in Ordnung, ich möchte es dann testen, indem ich Token von einer Adresse zur anderen sende, ich brauche auch ABI des erc20-Tokens. vielen Dank im Voraus
Update, ich habe seitdem erfahren, dass die meisten ERC20-Geräte die Wasserhahnfunktionalität in den Vertrag des Tokens selbst einbauen müssen, und habe dabei viel bessere Ergebnisse gesehen. Anstatt also einen neuen Vertrag abzuschließen, ist es normalerweise besser, ihn einfach in den Token selbst einzubauen (spart auch Benzin).