这篇文章将概述著名错误的最常见来源"Exceeded the prepaid gas."以及如何尝试和调试该问题。话虽如此,我很快就会概述一些关于 GAS 的常见误解以及一些您可能不知道的事情。
--gas=如果您未在 NEAR-CLI 上指定标志 ( ),则将附加的默认 GAS为 30 TGas。--gas=300000000000000解决这个问题后,让我们深入探讨问题最常见的根源:跨合约调用。在这种情况下,您通常会看到您附加的 GAS 数量多于您使用的数量,如下所示:
这可能会令人困惑,因为如果您使用的 GAS 少于您附加的 GAS,您怎么会超过您的预付费 GAS?这是一个非常好的指标,表明您正在处理跨合约调用。场景如下:
我们有一个A带有函数的智能合约foo。该函数将对智能合约执行跨合约调用,并在附加 40 个 TGas 的同时B调用该函数。bar
foo签订合同A并附上 10 份 TGas。我们现在有 10 个 TGas 可用。在这篇文章中,我将详细介绍导致神秘错误消息的原因"Smart contract panicked: panicked at 'Cannot deserialize the contract state.: Custom { kind: InvalidData, error: "Not all bytes read" }"。
当您部署智能合约并存储信息时,状态将被序列化并存储在磁盘上。当您将另一个智能合约部署到您的帐户并且您更改了重要信息时,就会出现问题。NEAR 运行时将尝试从磁盘读取序列化状态,并使用部署到您帐户的任何智能合约代码加载它。如果它无法弄清楚如何执行此操作,则会输出错误消息Not all bytes read。
有关何时可能发生这种情况的示例,请参阅我们的 DevDocs 中的 NFT 从零到英雄教程的升级合约部分。
要了解最佳实践以及如何避免此类情况,请参阅这篇详细文章。
我想知道为什么有些块存在而有些不存在?似乎他们被跳过了,我不确定为什么。例如:
87868936存在, 87868938也存在,但 87868938不存在。谢谢!
在这篇文章中,我将介绍如何仅使用您的私钥将帐户导入 NEAR 钱包。当您使用 CLI 或近 api-js 创建帐户(或子帐户)并且只能访问私钥时,这非常有用。
要导入帐户,只需单击此 URL 并替换YOUR_ACCOUNT_ID和YOUR_PRIVATE_KEY。
https://wallet.testnet.near.org/auto-import-secret-key#YOUR_ACCOUNT_ID/YOUR_PRIVATE_KEY
https://wallet.near.org/auto-import-secret-key#YOUR_ACCOUNT_ID/YOUR_PRIVATE_KEY