Ist die Ausführung von Ownable.sol transferOwnership() eine teure Funktion oder führe ich sie falsch aus?

Ich habe ein einfaches ERC20-Token und möchte das Eigentum an diesem Vertrag mithilfe der Funktion „ownable.sol transferOwnership()“ auf eine neue Adresse übertragen

Wenn ich diesen Vertrag betreibe, scheint mich dieser Funktionsaufruf ungefähr 1,5 ETH (!!!) zu kosten, wenn ich einen wettbewerbsfähigen Gaspreis (215 GWEI) verwende. Das scheint sehr teuer zu sein, wenn man bedenkt, dass alles, was passiert, darin besteht, dass eine Variable in der Blockchain aktualisiert wird.

Mache ich etwas falsch? Hier sind die Etherscan-Informationen, ich habe versucht, es mit einer sehr niedrigen Gasgebühr zu betreiben, aber es scheint immer noch 0,15 ETH zu kosten (es wird wahrscheinlich nie zu einem Block zu diesem Preis hinzugefügt)

https://etherscan.io/tx/0xb9c184899d8d19e53464509aabd3383508a2320ea67613d3f327a393d8961999

Hier ist mein Code:

const Web3 = require('web3');
const TestToken= artifacts.require('TestToken.sol');
const web3 = new Web3('https://ropsten.infura.io/v3/<MYKEY>');

module.exports = async function (deployer, network, accounts) {
  const ADMIN_ADDRESS = "...";
  const NEW_ADMIN = "...";


  const TEST_TOKEN= await TestToken.at("...");
  console.log('TEST governance token address: ' + TEST_TOKEN.address);

  const TEST_OWNER = await TEST_TOKEN.owner();
  
  console.log('The owner of the TEST governance token is: ' + TEST_OWNER);
  console.log('Transferring Ownership Now');
  
  let result = await TEST_TOKEN.transferOwnership(NEW_ADMIN);
  const NEW_TEST_OWNER = await TEST_TOKEN.owner();


  console.log('The new owner of the TEST governance token is: ' + NEW_TEST_OWNER);

Antworten (1)

Sie haben Recht, die transferOwnershipFunktion ändert nur den Status einer einzelnen Variable im Vertrag, sodass sie nicht zu viel Gas erfordern sollte. Der teure Teil ist, dass es ein Ereignis ausgibt, das tatsächlich Daten in einem Block speichert, und das ist tatsächlich teuer.

Eine mögliche Lösung besteht darin, dass Sie warten könnten, bis EIP-1559 in das Mainnet integriert wird, wodurch die Gasgebühren um das 100-fache sinken sollten, oder wenn Sie Ihre eigene Implementierung des ERC20Token vornehmen, könnten Sie einfach die Ereignisemission entfernen.