Probleme bei der gleichzeitigen Verteilung von Token und Ether

Ich schreibe einen intelligenten Vertrag, der die Funktion hat, Ether (für Gasgeld) und Token zu verteilen. Die Funktion sieht so aus

function distribute(address to, uint256 token, uint256 gasMoney) payable onlyAuthorized returns (bool sucess) { 
    createToken(to, token); 
    to.transfer(gasMoney); 
    currentContractBalance -= gasMoney; 
    return true; 
}

Wenn ich jedoch die Funktion über web3 py as aufrufe

mycontract.transact().distribute(myAddress, numberOfTokens, gasMoney)

es gibt eine Fehlermeldung zurück

ValueError: Contract does not appear to be deployable within the current network gas limits.  Estimated: 4704624. Current gas limit: 4700036

Ich konnte den Fehler von meiner Seite aus nicht herausfinden. Ich habe das Standardkonto zu der Adresse gemacht, die zum Bereitstellen des Vertrags verwendet wurde.

Ihr Gaslimit für diese Transaktion ist zu niedrig. Sie müssen das Gaslimit erhöhen oder die Transaktion wird nicht verarbeitet
Das Gaslimit einer Transaktion stellt die maximale Gasmenge dar, die Ihre Transaktion verbrauchen kann. Wenn es niedriger ist als das tatsächlich verbrauchte Gas, kann Ihre Transaktion nicht verarbeitet werden. Bitte lesen Sie die Dokumentation über die Funktionsweise von Gas, BEVOR Sie eine Transaktion durchführen, um bereits gestellte Fragen zu vermeiden. Gas: ethereum.gitbooks.io/frontier-guide/content/costs.html transac in web3py : web3py.readthedocs.io/en/latest/…

Antworten (1)

ValueError: Der Vertrag scheint innerhalb der aktuellen Netzwerkgasgrenzen nicht einsetzbar zu sein. Geschätzt: 4704624. Aktuelles Gaslimit: 4700036

Dieser Fehler bedeutet, dass createTokenes sich um eine sehr schwere Funktion handelt. Einige frühere Kommentare schlugen vor, das Gaslimit zu erhöhen, aber das wird Ihnen hier nicht helfen. Das Blockgaslimit ist zu niedrig, um Ihre Transaktion auszuführen. Das bedeutet, dass selbst wenn Sie Ihr Gaslimit auf 10 Millionen setzen und keine anderen Transaktionen in einem Block enthalten sind, Ihre Transaktion immer noch nicht passen würde. (Wenn ich hier "passen" sage, meine ich rechnerisch, nicht die Anzahl der Bytes)

Die einzigen Optionen, die Sie wirklich haben, sind 1) createToken in separate Teile aufzuteilen oder 2) es effizienter zu machen. Sie möchten es wahrscheinlich effizienter machen, weil 4,7 Millionen Benzin teuer sind ! Vor nicht allzu langer Zeit lag ein günstiger Gaspreis bei 4 Gwei. Zu diesem Preis würde die Ausgabe der Transaktion (wenn es überhaupt möglich wäre) 0,0188 Ether kosten, was 6,20 $ zum heutigen ETH/USD-Preis entspricht.

Im Moment ist Benzin sehr billig, also würde es Sie nur etwa 0,155 $ für jede Transaktion kosten, aber das wird vielleicht nicht lange dauern.