小编Ben*_*rek的帖子

超预付费燃气通用解决方案

这篇文章将概述著名错误的最常见来源"Exceeded the prepaid gas."以及如何尝试和调试该问题。话虽如此,我很快就会概述一些关于 GAS 的常见误解以及一些您可能不知道的事情。

  • GAS != 附加押金。通过增加附加押金,您不会附加更多 GAS。关于GAS更详细的解释可以看这个文档
  • --gas=如果您未在 NEAR-CLI 上指定标志 ( ),则将附加的默认 GAS为 30 TGas。
  • 您可以在 NEAR-CLI 上附加的最大 GAS 为 300 TGas。这可以通过附加以下标志来完成:--gas=300000000000000

解决这个问题后,让我们深入探讨问题最常见的根源:跨合约调用。在这种情况下,您通常会看到您附加的 GAS 数量多于您使用的数量,如下所示:

在此输入图像描述

这可能会令人困惑,因为如果您使用的 GAS 少于您附加的 GAS,您怎么会超过您的预付费 GAS?这是一个非常好的指标,表明您正在处理跨合约调用。场景如下:

我们有一个A带有函数的智能合约foo。该函数将对智能合约执行跨合约调用,并在附加 40 个 TGas 的同时B调用该函数。bar

  • Benji 要求foo签订合同A并附上 10 份 TGas。我们现在有 10 个 TGas 可用。
  • 该函数在到达跨合约调用之前执行逻辑(例如断言等)。到目前为止,所有这些逻辑都使用了 9 个 TGas。我们现在有 1 个 TGas 可用,因为我们附加了 10 …

nearprotocol

24
推荐指数
0
解决办法
1354
查看次数

并非所有字节都读取常见解决方案

在这篇文章中,我将详细介绍导致神秘错误消息的原因"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 从零到英雄教程的升级合约部分。

要了解最佳实践以及如何避免此类情况,请参阅这篇详细文章。

nearprotocol

10
推荐指数
1
解决办法
402
查看次数

为什么 NEAR 上的块丢失或被跳过

我想知道为什么有些块存在而有些不存在?似乎他们被跳过了,我不确定为什么。例如:

87868936存在, 87868938也存在,但 87868938不存在。谢谢!

indexer nearprotocol nearprotocol-validator

10
推荐指数
1
解决办法
331
查看次数

如何仅使用私钥(无助记词)将帐户导入 NEAR 钱包

在这篇文章中,我将介绍如何仅使用您的私钥将帐户导入 NEAR 钱包。当您使用 CLI 或近 api-js 创建帐户(或子帐户)并且只能访问私钥时,这非常有用。

要导入帐户,只需单击此 URL 并替换YOUR_ACCOUNT_IDYOUR_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

nearprotocol

9
推荐指数
1
解决办法
2045
查看次数