首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用web3从智能契约中获取空结果

使用web3从智能契约中获取空结果
EN

Stack Overflow用户
提问于 2021-04-13 17:31:59
回答 1查看 275关注 0票数 1

我对web3和一般的稳健性都很陌生,但我一直在关注关于从web3调用合同方法的web文档

我坚定的智慧-契约:

代码语言:javascript
复制
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代码:

代码语言:javascript
复制
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的艺术家已经存在,上面的射击()函数现在是按一下触发的,第一个console.log,即createArtist方法,返回的结果与智能契约一样好,如下所示:

代码语言:javascript
复制
Result {0: "2", 1: "DMX", 2: "0x518251583591f3DE330Eb539AB64b6E95C1EE5c5", id: "2", Name: "DMX", Address: "0x518251583591f3DE330Eb539AB64b6E95C1EE5c5"}

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

代码语言:javascript
复制
Result {0: "0", 1: "", 2: "0x0000000000000000000000000000000000000000"}

谢谢你抽出时间阅读我的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-13 18:21:57

您需要使用createArtist() (而不是send() )与契约函数call()交互。

发送()发送事务,这有效地允许写入契约存储。

如果您没有配置您的web3 defaultSender,还需要向它传递至少包含{from: <address>}的options对象,以便web3知道您希望从哪个地址发送(并且签名--因此您也需要将其私钥传递给web3 )事务。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67079725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档