Является ли Ownable.sol transferOwnership() дорогостоящей функцией для запуска, или я запускаю ее неправильно?

У меня есть простой токен ERC20, и я хотел бы передать право собственности на этот контракт на новый адрес, используя функцию TransferOwnership() Ownable.sol.

Когда я запускаю этот контракт, кажется, что этот вызов функции будет стоить мне примерно 1,5 ETH (!!!), если я использую конкурентоспособную цену на газ (215 GWEI). Это кажется очень дорогим, учитывая, как я понимаю, все, что происходит, — это обновление одной переменной в блокчейне.

Я запускаю что-то не так? Вот информация об etherscan, я пытался запустить его с очень низкой платой за газ, но он по-прежнему стоит 0,15 ETH (вероятно, он никогда не будет добавлен в блок по этой цене).

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

Вот мой код:

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

Ответы (1)

Вы правы, transferOwnershipфункция изменяет состояние только одной переменной в контракте, поэтому она не требует слишком много газа. Дорогостоящая часть заключается в том, что он создает событие, которое фактически сохраняет данные в блоке, а это на самом деле дорого.

Одним из возможных решений является то, что вы можете подождать, пока EIP-1559 не будет объединен с основной сетью, что должно снизить плату за газ в 100 раз, или, если вы делаете свою собственную реализацию ERC20Token, вы можете просто удалить эмиссию событий.