1

我在附近更新合同时看到了奇怪的行为(使用 rust)

我通常按​​照常用命令启动 1 个第一个合约作为模板:

$ cargo new rust-myproject
cargo test -- --nocapture
cargo build --target wasm32-unknown-unknown --release
near deploy --wasmFile target/wasm32-unknown-unknown/release/myproject.wasm --accountId myaccount.testnet

near call myaccount.testnet mymethod --accountId myaccount.testnet

到目前为止一切顺利,当我想添加方法并且我必须更新合同时,问题就来了。当我更新它时,新方法不存在,但我在 Near Explorer 中看到如果更新了合同,似乎没有考虑新合同。

在此处输入图像描述

有时它会更新,有时它根本不更新。

你怎么能确定合同是新的?我依靠资源管理器,但还有其他方法吗?

显然,当我尝试打电话时,我收到“找不到方法”

type: 'MethodNotFound',
  context: undefined,
  index: 0,
  transaction_outcome: {
    proof: [ [Object], [Object] ],
    block_hash: '57ULC9DaU63hbQGPCvGVvvLh7TPVhrXSZfAqcwyvoWWz',
    id: '5EGfWdg2qWXvddT4v2JiyvzZ7Esdp5Qy4MJoo3qJvTHu',
    outcome: {
      logs: [],
      receipt_ids: [Array],
      gas_burnt: 2427950067142,
      tokens_burnt: '242795006714200000000',
      executor_id: 'josedlujan.testnet',
      status: [Object],
      metadata: [Object]
4

1 回答 1

-1

我认为每份合同都是独一无二的。您实际上无法更新现有合同。

你可以做的是使用:

  1. 每次使用 dev-deploy 生成一个新的合约 id
  2. 使用您当前的帐户(主帐户)创建一个子帐户(子帐户)可以视为用户帐户/合同。
  3. 然后你使用这个子账户(合同)来部署它。

near create-account CONTRACT_NAME.ACCOUNT_ID --masterAcount ACCOUNT_ID --initialBalance 10

near deploy --wasmFile target/wasm32-unknown-unknown/release/key_value_storage.wasm --accountId CONTRACT_ID

你可以参考这篇文章。

https://learn.figment.io/tutorials/write-and-deploy-a-smart-contract-on-near

(我也是刚开始学习Near Protocol智能合约,如有错误请指正。)

于 2022-02-16T16:05:36.260 回答