Smart Contract zum Senden mehrerer Ausgaben

Ich lerne gerade etwas über Smart Contracts und bin etwas verwirrt darüber, wie sie wirklich funktionieren.

Meine Website ermöglicht es Benutzern, ETH von ihrer Brieftasche vor Ort an eine andere Adresse außerhalb des Standorts zu senden. Dabei möchte ich auf meiner Website 1% Gebühr abziehen.

Ist dies über Smart Contracts möglich?

Was ich jetzt mit Solidity getan habe, ist, dass ich diesen sehr grundlegenden Vertrag entwickelt habe:

pragma solidity ^0.4.18;

contract MultiSend
{
    function multiSendETH(address[] memory addresses, uint[] memory values) public payable
    {
        // Validate addresses and values match
        if(addresses.length != values.length)
        {
            return;
        }

        else
        {
            for(uint i = 0; i < addresses.length; i++)
            {
                address(addresses[i]).transfer(values[i]);
            }

            msg.sender.transfer(this.balance);
        }
    }
}

Ich habe es mit einem Wert von 1 wei über remix.ethereum.org erfolgreich bereitgestellt.

Ist es möglich, denselben Smart Contract jedes Mal wiederzuverwenden, wenn jemand eine Auszahlung von meiner Website vornimmt?

Oder muss ich den Smart Contract mit einem Wert erstellen, der dem entspricht, was zurückgezogen wird?

Mein Problem ist, dass der Smart Contract ein bisschen braucht, um abgebaut und verfügbar zu werden, so dass diese Methode der Finanzierung mit dem richtigen Wert, der zurückgezogen wird, und der Zeitspanne bis zu dem Zeitpunkt, an dem der Vertrag verfügbar ist und ausgeführt werden kann, einige Verzögerungen hat und schlecht ist Benutzererfahrung.

Ich hatte gehofft, dass es möglich wäre, diesen Smart Contract wiederzuverwenden und vielleicht einen Parameter hinzuzufügen, von welcher Brieftasche gesendet werden soll? Ist das möglich?

Es ist auch möglich, die Transaktions-ID aus dieser Zeile zu erhalten:

address(addresses[i]).transfer(values[i]);

Oder ist mein Verständnis von Smart Contracts völlig daneben?

Ich möchte das so nennen:

addresses = ['0xTheirOutputAddress', '0xMySiteAddress']
fee = total * 0.01
values    = [total - fee, fee]
w3.contract.multiSendETH(addresses, values).call()

Antworten (2)

Ich würde Ihnen empfehlen, sich etwas Zeit zu nehmen, diese Probleme einzeln anzugehen und zu suchen, ob sie bereits beantwortet wurden.
Wenn nicht, stellen Sie für jeden von ihnen eine detaillierte, aber einfache Frage.

Leute, die viel mehr wissen als ich, werden Ihnen helfen können, aber im Moment haben Sie mehrere Fragen in einer und es ist sehr verwirrend. Ich versuche nur zu helfen.

Übrigens:

  • Ich bin mir sicher, dass Sie die "Gebühr" im Vertrag bezahlen können. Wenn ich mich erinnere, wo ich ein Beispiel gesehen habe, werde ich es noch einmal kommentieren.
  • Je nach Fall, aber normalerweise glaube ich, dass es besser ist, den Vertrag wiederzuverwenden.

Natürlich können Sie für alle Transaktionen denselben Vertrag verwenden. Tatsächlich soll es so verwendet werden. Sie stellen es nur einmal bereit und alle Transaktionen werden mit demselben Vertrag ausgeführt.

Sie müssen klären, was Sie mit "meine Website-Adresse" meinen, denn so, wie Sie es geschrieben haben, bleibt die "Gebühr" im Vertrag. Sie müssten die Gebühr noch auf Ihre "Website" überweisen.

Was ich in Ihrem Code sehe, ist jedoch, dass Sie nicht validieren, ob die "Werte" in irgendeiner Weise mit der Menge an ETH zusammenhängen, die von demjenigen übertragen wurde, der diese Funktion aufgerufen hat. Hier bricht Ihr Vertrag zusammen.