Acerca de no puede estimar el gas; la transacción puede fallar o puede requerir una solución de problemas de error de límite de gas manual

Hoy, utilicé etherjs para llamar al contrato inteligente en el entorno del casco. Los errores, como no se puede estimar el gas, la transacción puede fallar o puede requerir un límite de gas manual, se han verificado durante un día. Estos son los pasos de la verificación.

El entorno de red es la red de prueba georli.

La llamada al método y el error son los siguientes:

let tx2 = await gravatarWithSigner.createGravatar('Lucas2', 'https://thegraph.com/img/team/bw_Lucas.jpg');


Uncaught:
<ref *1> Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (error={"reason":"execution reverted","code":"UNPREDICTABLE_GAS_LIMIT","method":"estimateGas","transaction":{"from":"0xBA8B604410ca76AF86BDA9B00Eb53B65AC4c41AC","maxPriorityFeePerGas":{"type":"BigNumber","hex":"0x59682f00"},"maxFeePerGas":{"type":"BigNumber","hex":"0x5968464a"},"to":"0x964F658FC863BAceFC719b85e8730fbc11c86ce4","data":"0xcdb3344a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000064c75636173320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f74686567726170682e636f6d2f696d672f7465616d2f62775f4c756361732e6a706700000000000000000000000000000000000000000000","type":2,"accessList":null},"error":{"name":"ProviderError","_stack":"ProviderError: HttpProviderError\n    at HttpProvider.request (D:\\workspace\\gambo\\subgraph-example\\node_modules\\hardhat\\src\\internal\\core\\providers\\http.ts:78:19)\n    at LocalAccountsProvider.request (D:\\workspace\\gambo\\subgraph-example\\node_modules\\hardhat\\src\\internal\\core\\providers\\accounts.ts:187:34)\n    at processTicksAndRejections (internal/process/task_queues.js:95:5)\n    at async EthersProviderWrapper.send (D:\\workspace\\gambo\\subgraph-example\\node_modules\\@nomiclabs\\hardhat-ethers\\src\\internal\\ethers-provider-wrapper.ts:13:20)","code":-32000,"_isProviderError":true}}, tx={"data":"0xcdb3344a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000064c75636173320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f74686567726170682e636f6d2f696d672f7465616d2f62775f4c756361732e6a706700000000000000000000000000000000000000000000","to":{},"from":"0xBA8B604410ca76AF86BDA9B00Eb53B65AC4c41AC","type":2,"maxFeePerGas":{"type":"BigNumber","hex":"0x5968464a"},"maxPriorityFeePerGas":{"type":"BigNumber","hex":"0x59682f00"},"nonce":{},"gasLimit":{},"chainId":{}}, code=UNPREDICTABLE_GAS_LIMIT, version=abstract-signer/5.7.0)
    at Logger.throwError (D:\workspace\gambo\subgraph-example\node_modules\@ethersproject\logger\src.ts\index.ts:281:20)
    at Logger.makeError (D:\workspace\gambo\subgraph-example\node_modules\@ethersproject\logger\src.ts\index.ts:269:28) {
  reason: 'cannot estimate gas; transaction may fail or may require manual gas limit',
  code: 'UNPREDICTABLE_GAS_LIMIT',
  error: Error: cannot estimate gas; transaction may fail or may require manual gas limit [ See: https://links.ethers.org/v5-errors-UNPREDICTABLE_GAS_LIMIT ] (reason="execution reverted", method="estimateGas", transaction={"from":"0xBA8B604410ca76AF86BDA9B00Eb53B65AC4c41AC","maxPriorityFeePerGas":{"type":"BigNumber","hex":"0x59682f00"},"maxFeePerGas":{"type":"BigNumber","hex":"0x5968464a"},"to":"0x964F658FC863BAceFC719b85e8730fbc11c86ce4","data":"0xcdb3344a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000064c75636173320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f74686567726170682e636f6d2f696d672f7465616d2f62775f4c756361732e6a706700000000000000000000000000000000000000000000","type":2,"accessList":null}, error={"name":"ProviderError","_stack":"ProviderError: HttpProviderError\n    at HttpProvider.request (D:\\workspace\\gambo\\subgraph-example\\node_modules\\hardhat\\src\\internal\\core\\providers\\http.ts:78:19)\n    at LocalAccountsProvider.request (D:\\workspace\\gambo\\subgraph-example\\node_modules\\hardhat\\src\\internal\\core\\providers\\accounts.ts:187:34)\n    at processTicksAndRejections (internal/process/task_queues.js:95:5)\n    at async EthersProviderWrapper.send (D:\\workspace\\gambo\\subgraph-example\\node_modules\\@nomiclabs\\hardhat-ethers\\src\\internal\\ethers-provider-wrapper.ts:13:20)","code":-32000,"_isProviderError":true}, code=UNPREDICTABLE_GAS_LIMIT, version=providers/5.7.2)
      at Logger.makeError (D:\workspace\gambo\subgraph-example\node_modules\@ethersproject\logger\src.ts\index.ts:269:28)
      at Logger.throwError (D:\workspace\gambo\subgraph-example\node_modules\@ethersproject\logger\src.ts\index.ts:281:20)
      at checkError (D:\workspace\gambo\subgraph-example\node_modules\@ethersproject\providers\src.ts\json-rpc-provider.ts:78:20)
      at EthersProviderWrapper.<anonymous> (D:\workspace\gambo\subgraph-example\node_modules\@ethersproject\providers\src.ts\json-rpc-provider.ts:642:20)
      at step (D:\workspace\gambo\subgraph-example\node_modules\@ethersproject\providers\lib\json-rpc-provider.js:48:23)
      at Object.throw (D:\workspace\gambo\subgraph-example\node_modules\@ethersproject\providers\lib\json-rpc-provider.js:29:53)
      at rejected (D:\workspace\gambo\subgraph-example\node_modules\@ethersproject\providers\lib\json-rpc-provider.js:21:65)
      at processTicksAndRejections (internal/process/task_queues.js:95:5) {
    reason: 'execution reverted',
    code: 'UNPREDICTABLE_GAS_LIMIT',
    method: 'estimateGas',
    transaction: {
      from: '0xBA8B604410ca76AF86BDA9B00Eb53B65AC4c41AC',
      maxPriorityFeePerGas: BigNumber { value: "1500000000" },
      maxFeePerGas: BigNumber { value: "1500005962" },
      to: '0x964F658FC863BAceFC719b85e8730fbc11c86ce4',
      data: '0xcdb3344a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000064c75636173320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f74686567726170682e636f6d2f696d672f7465616d2f62775f4c756361732e6a706700000000000000000000000000000000000000000000',
      type: 2,
      accessList: null
    },
    error: ProviderError: HttpProviderError
        at HttpProvider.request (D:\workspace\gambo\subgraph-example\node_modules\hardhat\src\internal\core\providers\http.ts:78:19)
        at LocalAccountsProvider.request (D:\workspace\gambo\subgraph-example\node_modules\hardhat\src\internal\core\providers\accounts.ts:187:34)
        at processTicksAndRejections (internal/process/task_queues.js:95:5)
        at async EthersProviderWrapper.send (D:\workspace\gambo\subgraph-example\node_modules\@nomiclabs\hardhat-ethers\src\internal\ethers-provider-wrapper.ts:13:20)
  },
  tx: {
    data: '0xcdb3344a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000064c75636173320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f74686567726170682e636f6d2f696d672f7465616d2f62775f4c756361732e6a706700000000000000000000000000000000000000000000',
    to: Promise {
      '0x964F658FC863Bxxxxxxxxx85e8730fbc11c86ce4',
      [Symbol(async_id_symbol)]: 1302,
      [Symbol(trigger_async_id_symbol)]: 1301,
      [Symbol(destroyed)]: [Object]
    },
    from: '0xBA8B6044xxxxxxxxDA9B00Eb53B65AC4c41AC',
    type: 2,
    maxFeePerGas: BigNumber { value: "1500005962" },
    maxPriorityFeePerGas: BigNumber { value: "1500000000" },
    nonce: Promise {
      19,
      [Symbol(async_id_symbol)]: 1517,
      [Symbol(trigger_async_id_symbol)]: 1326,
      [Symbol(destroyed)]: [Object]
    },
    gasLimit: Promise {
      <rejected> [Circular *1],
      [Symbol(async_id_symbol)]: 1554,
      [Symbol(trigger_async_id_symbol)]: 1525,
      [Symbol(destroyed)]: [Object]
    },
    chainId: Promise {
      5,
      [Symbol(async_id_symbol)]: 1555,
      [Symbol(trigger_async_id_symbol)]: 1326,
      [Symbol(destroyed)]: [Object]
    }
  }
}

Muchas personas que buscan palabras clave en Internet dicen que es un problema con la configuración de las tarifas de manejo. Entonces se agregó la configuración de gasLimit y gasPrices.

await gravatarWithSigner.createGravatar('Lucas2', 'https://thegraph.com/img/team/bw_Lucas.jpg', {gasLimit: 2400000,gasPrice: ethers.utils.parseUnits('9.0', 'gwei')});
{
  type: 2,
  chainId: 5,
  nonce: 19,
  maxPriorityFeePerGas: BigNumber { value: "9000000000" },
  maxFeePerGas: BigNumber { value: "9000000000" },
  gasPrice: null,
  gasLimit: BigNumber { value: "2400000" },
  to: '0x9xxxxxxxxxxxxx9b85e8730fbc11c86ce4',
  value: BigNumber { value: "0" },
  data: '0xcdb3344a0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000064c75636173320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a68747470733a2f2f74686567726170682e636f6d2f696d672f7465616d2f62775f4c756361732e6a706700000000000000000000000000000000000000000000',
  accessList: [],
  hash: '0x212337d352d0b914e7940xxxxxxxxxxxxxx8e1f770c3a93de14fe076991eb3',
  v: 0,
  r: '0x0cacfxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxeb0687abbdb0f7c32322',
  s: '0x73c66e3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxb6b42020c16535d6e5977b94',
  from: '0xxxxxxxxxxxxxxxxxxx',
  confirmations: 0,
  wait: [Function (anonymous)]
}

No se informa ningún error, ¡parece que el problema está resuelto! ¡Pero a través del hash de transacción devuelto, esta transacción no se puede encontrar en etherscan! ¡Es como si el trato se hubiera perdido! Eche un vistazo más de cerca al informe de error anterior que no puede estimar el gas; la transacción puede fallar o puede requerir un límite de gas manual, "La transacción puede fallar o puede requerir un límite de gas manual", ¿es posible que hayamos cometido un error al llamar al contrato inteligente?

function createGravatar(string calldata _displayName, string calldata _imageUrl) public {
    require(ownerToGravatar[msg.sender] == 0);
    gravatars.push(Gravatar(msg.sender, _displayName, _imageUrl));
    uint id = gravatars.length - 1;

    gravatarToOwner[id] = msg.sender;
    ownerToGravatar[msg.sender] = id;

    emit NewGravatar(id, msg.sender, _displayName, _imageUrl);
  }

El anterior es el método de contrato inteligente que llamamos. Al analizar el código, descubrimos que cada contrato inteligente solo se puede llamar una vez, así que llamé a otro método del contrato. ¡Este método no tiene el problema de la falla de la transacción! Sin embargo, ¡el valor hash devuelto todavía no se consulta!

Ahora sospecho que es un problema de la cuenta, ¡así que intente llamar al contrato inteligente con otra cuenta!

¡Primero transfiera una cierta cantidad de georli eth a la segunda cuenta a través de matemask para evitar cargos por manejo! ¡Pero hay un problema extraño otra vez!

[ethjs-query] al formatear las salidas de RPC '{“valor”:{“código”:-32000,”mensaje”:”transacción de reemplazo subvaluada”}}'

Si ni siquiera puedes transferir dinero, ¡probablemente sea un problema con esta cuenta!

Muchas personas en Internet se han encontrado con este problema, y ​​la mayoría de ellos dijeron que la tarifa de manejo aumentará. Sin embargo, después de que lo intenté aquí, ¡el problema aún persiste!

visto por última vez este artículo

Resuelva la excepción de la transacción de reemplazo con un precio inferior al de la transacción de Ethereum

Además del tema de las tarifas de manejo, el valor de nonce también se menciona aquí.

La razón general es que hay una determinada transacción en esta cuenta que ha estado en estado pendiente en la etapa inicial. Si esta transacción no se sobrescribe, todas las transacciones posteriores no se realizarán correctamente. ¡La forma de sobrescribir es modificar el valor nonce de la transacción!

Solucione el problema de la transacción de reemplazo con un precio inferior al modificar el valor nonce de mateMask

Después de que la transacción sea exitosa modificando el valor de nonce, luego cambie la segunda cuenta para llamar al método createGravatar del contrato, ¡y la llamada es exitosa!

Luego use la primera cuenta para llamar a otros métodos del contrato, ¡y la llamada también es exitosa!

¡Resuma el problema de no poder estimar el gas o la pérdida de transacción!

  1. ¡El problema de la configuración de la tarifa de transacción (no se ha confirmado en este problema)!

  1. Compruebe si hay un problema con la llamada de contrato en sí.

  1. Dado que la cuenta corriente siempre tiene una transacción en estado pendiente, es necesario realizar una transacción con un valor de nonce más alto en el matemask para cubrir la transacción anterior.

Supongo que te gusta

Origin blog.csdn.net/gambool/article/details/128642004
Recomendado
Clasificación