标签: nearprotocol

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

这篇文章将概述著名错误的最常见来源"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
查看次数

您从哪里获得 NEAR 协议测试网代币(水龙头)?

如果 NEAR 协议上的 TestNet 账户上的代币用完,可以在哪里增加代币数量?

nearprotocol

11
推荐指数
1
解决办法
7227
查看次数

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

在这篇文章中,我将详细介绍导致神秘错误消息的原因"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
查看次数

错误[E0463]:找不到`core` 的箱子| = 注意:可能未安装 `wasm32-unknown-unknown` 目标 [NEAR 协议]

如果您在构建 Rust 应用程序时遇到此问题

error[E0463]: can't find crate for core| = note: the "wasm32-unknown-unknown" target may not be installed

要解决此错误,请运行

rustup target add wasm32-unknown-unknown

在文件中,这应该可以解决问题

rust smartcontracts nearprotocol

9
推荐指数
3
解决办法
654
查看次数

如何仅使用私钥(无助记词)将帐户导入 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
查看次数

我们可以认为基于网络的非插件加密钱包是安全的吗?

我知道一堆加密钱包可以在网络浏览器中使用 IFRAME 和类似技术,而无需安装任何插件:

但是他们是否受到网络钓鱼 Dapp 攻击的保护?如果 Dapp 想要欺骗你并隐藏实际发送的 ETH 数量或以任何其他方式,在网络浏览器中修改钱包 UI?

security plugins blockchain wallet nearprotocol

8
推荐指数
2
解决办法
531
查看次数

调用 Rust init 函数时出现“无法反序列化合约状态”

我已经能够near dev-deploy使用近壳运行Rust 合约,然后调用一个函数“new”near call my-account new '{"param1": "foo"}'

但是,当我将相同的合同部署到我使用NEAR Wallet创建的首选帐户时,这不起作用。

错误是:

Smart contract panicked: panicked at 'Cannot deserialize the contract state.: Custom { kind: InvalidInput, error: "Unexpected length of input" }',
Run Code Online (Sandbox Code Playgroud)

rust nearprotocol

7
推荐指数
1
解决办法
201
查看次数

如何获取附近子账户的助记词?

我正在使用命令创建子帐户:near create-account 123.xyz.testnet --masterAccount xyz.testnet

但它只生成公钥和私钥,如何获取帐户的种子短语,以便我可以使用近网络钱包登录。

近网络钱包似乎不支持子账户,如“。” 不允许。

nearprotocol

7
推荐指数
1
解决办法
1020
查看次数

如何验证智能合约中SECP256K1签名的消息?

我已使用 ed25519 签署了该消息

const msg = Buffer.from("hi");
const signerKeyPair = await keyStore.getKey(config.networkId, signerAccount);
const { signature } = signerKeyPair.sign(msg); 
Run Code Online (Sandbox Code Playgroud)

如果我有签名和签名者公钥,如何验证智能合约中的签名?

我发现近核心使用近加密箱来做到这一点,但我不确定我是否可以将它用于智能合约。

使用近核心的示例

use near_crypto::{PublicKey, Signature, KeyType};
...
   pub fn verify(&self, data: &[u8], public_key: String) -> bool {
        let public_key = PublicKey::from_str(&public_key).unwrap();
        let signature = Signature::empty(KeyType::SECP256K1);
        signature.verify(data, &public_key)
    }
...
Run Code Online (Sandbox Code Playgroud)

nearprotocol

6
推荐指数
1
解决办法
700
查看次数