【问题标题】:getting empty result form smart-contract using web3使用 web3 获取空结果表单智能合约
【发布时间】:2021-07-08 19:03:25
【问题描述】:

我是 web3 的新手,一般来说是solidity,但我一直在关注关于从 web3 调用合约方法的网络文档

我的 Solidity 智能合约:

pragma solidity ^ 0.5.0;
contract Royalties {
  string public name = "RoyaltiesContract";

  uint public nextArtistId = 1;
  uint public nextSongId = 0;
  uint public nextCollabId = 0;

  mapping(uint => Artist) public Artists;
  
  struct Artist {
    uint id;
    string ArtistName;
    address ArtistAddress;
  }

  function createArtist(string memory ArtistName,address Artistaddress) public returns(uint id, string memory Name, address Address) {
      Artists[nextArtistId] = Artist(nextArtistId,ArtistName, Artistaddress);
      nextArtistId++;
       return(nextArtistId,ArtistName, Artistaddress);
  }

function getArtist(uint id) view public returns(uint, string memory , address){
            return(Artists[id].id,Artists[id].ArtistName, Artists[id].ArtistAddress);
    }

}

完成所有配置后我的 web3 代码:

shoot(royalties) {
      const createArtist = royalties.methods.createArtist("DMX","0x518251583591f3DE330Eb539AB64b6E95C1EE5c5").call().then(
        function(result){
          console.log(result)
      },
        royalties.methods.getArtist(1).call({defaultBlock :'latest'}).then(console.log)
      )

}

请记住,id:1 的艺术家已经存在,上面的 shoot() 函数在点击时被触发,现在第一个 console.log 是 createArtist 方法返回的结果与智能合约一样,如下所示:

Result {0: "2", 1: "DMX", 2: "0x518251583591f3DE330Eb539AB64b6E95C1EE5c5", id: "2", Name: "DMX", Address: "0x518251583591f3DE330Eb539AB64b6E95C1EE5c5"}

但是 getArtist(1) 方法返回的第二个 console.log 请记住已经有 id:1 的艺术家:

Result {0: "0", 1: "", 2: "0x0000000000000000000000000000000000000000"}

感谢您花时间阅读我的问题。

【问题讨论】:

    标签: solidity smartcontracts web3


    【解决方案1】:

    你需要使用send()与合约函数createArtist()进行交互,而不是call()


    send() 发送一个交易,这有效地允许写入合约存储。

    如果您还没有配置您的 web3 defaultSender,您还需要向它传递一个至少包含 {from: <address>} 的选项对象,以便 web3 知道您要从哪个地址发送(并签名 - 所以您还需要将其私钥传递给 web3)交易。

    call() 不发送事务,只是读取数据。因此,您可以安全地将其用于getArtist() 视图函数调用。

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-01-24
    • 2018-12-28
    • 1970-01-01
    • 2021-12-20
    • 2021-06-29
    • 2020-08-26
    • 1970-01-01
    • 2022-09-28
    相关资源
    最近更新 更多