À propos de ne peut pas estimer le gaz ; la transaction peut échouer ou nécessiter un dépannage manuel de l'erreur de limite de gaz

Aujourd'hui, j'ai utilisé etherjs pour appeler le contrat intelligent dans l'environnement du casque. Des erreurs telles que l'impossibilité d'estimer le gaz ; la transaction peut échouer ou nécessiter une limite de gaz manuelle ont été vérifiées pendant une journée. Voici les étapes de la vérification.

L'environnement réseau est le testnet georli

L'appel de méthode et l'erreur sont les suivants :

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]
    }
  }
}

De nombreuses personnes qui recherchent des mots-clés sur Internet disent que c'est un problème avec la fixation des frais de gestion. Ainsi, la configuration de gasLimit et gasPrices a été ajoutée.

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)]
}

Aucune erreur n'est signalée, il semble que le problème soit résolu ! Mais grâce au hachage de transaction renvoyé, cette transaction est introuvable sur etherscan ! C'est comme si l'affaire était perdue ! Examinez de plus près le rapport d'erreur ci-dessus ne peut pas estimer le gaz ; la transaction peut échouer ou peut nécessiter une limite de gaz manuelle, "La transaction peut échouer ou peut nécessiter une limite de gaz manuelle", est-il possible que nous ayons fait une erreur lors de l'appel du contrat intelligent !

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

Ce qui précède est la méthode de contrat intelligent que nous avons appelée.En analysant le code, nous avons constaté que chaque contrat intelligent ne peut être appelé qu'une seule fois, j'ai donc appelé une autre méthode de contrat. Cette méthode n'a pas le problème de l'échec de la transaction ! Cependant, la valeur de hachage renvoyée n'est toujours pas interrogée !

Maintenant, je soupçonne qu'il s'agit d'un problème de compte, alors essayez d'appeler le contrat intelligent avec un autre compte !

Transférez d'abord une certaine quantité de georli eth sur le deuxième compte via matmask pour éviter les frais de gestion! Mais il y a encore un problème étrange!

[ethjs-query] lors du formatage des sorties de RPC '{"value":{"code":-32000,"message":"replacement transaction underpriced"}}'

Si vous ne pouvez même pas transférer d'argent, c'est probablement un problème avec ce compte !

De nombreuses personnes sur Internet ont rencontré ce problème, et la plupart d'entre elles ont dit que les frais de traitement seraient augmentés, mais après avoir essayé ici, le problème persiste toujours !

vu cet article pour la dernière fois

Résoudre l'exception de la transaction de remplacement transaction Ethereum sous-évaluée

En plus de la question des frais de traitement, la valeur nonce est également mentionnée ici.

La raison générale est qu'il y a une certaine transaction dans ce compte qui était en attente au début. Si cette transaction n'est pas écrasée, toutes les transactions suivantes échoueront. La façon d'écraser est de modifier la valeur nonce de la transaction !

Résoudre le problème de transaction de remplacement sous-évaluée en modifiant la valeur nonce de mateMask

Une fois la transaction réussie en modifiant la valeur nonce, modifiez le deuxième compte pour appeler la méthode createGravatar du contrat, et l'appel est réussi !

Utilisez ensuite le premier compte pour appeler d'autres méthodes du contrat, et l'appel est également réussi !

Résumez le problème de l'impossibilité d'estimer le gaz ou la perte de transaction !

  1. Le problème de réglage des frais de transaction (il n'a pas été confirmé dans ce problème) !

  1. Vérifiez s'il y a un problème avec l'appel de contrat lui-même.

  1. Étant donné que le compte courant a toujours une transaction dans l'état en attente, il est nécessaire d'effectuer une transaction avec une valeur nonce plus élevée dans le masque de matage pour couvrir la transaction précédente.

Je suppose que tu aimes

Origine blog.csdn.net/gambool/article/details/128642004
conseillé
Classement