代码之家  ›  专栏  ›  技术社区  ›  Eddy

mycontract.methods.adddata不适用于nodejs web3

  •  0
  • Eddy  · 技术社区  · 8 年前

    我正在连接我的 Solidity 通过合同 nodejs 和 web3 . 我可以读取信息,但是当试图向数组添加元素时,它不会被添加。

    这是我的密码。

    这个 solidity 方法:

    bytes32[20] bytesArray;
    
    function add(uint8 id, bytes32 s) public {
      bytesArray[id] = s;
    } 
    

    我的电话 诺迪斯 文件:

    var myContractABI = <the_abi>;
    var contractAddress = '0x...';
    var myContract = new web3.eth.Contract(myContractABI, contractAddress);
    myContract.setProvider(web3.currentProvider);
    

    添加值:

    myContract.methods.add(0, web3.utils.asciiToHex("some string")).call()
      .then(receipt => {
          console.log(" added? " + receipt); // returns [object Object]
    });
    

    然后,要获得该值:

    myContract.methods.getArray().call()
      .then(receipt => {
          console.log("full array " + receipt);
    });
    

    数组返回,但其所有值仍为空, 0x0000000000000000000000000000000000000000000000000000000000000000 。

    我用 Remix 它工作得很好,增加了值,我可以看到它们。但我需要从 诺迪斯 到目前为止它还不起作用。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Adam Kipnis    8 年前

    使用 call 以下代码不正确。

    myContract.methods.add(0, web3.utils.asciiToHex("some string")).call()
      .then(receipt => {
          console.log(" added? " + receipt); // returns [object Object]
    });
    

    这是一个常见的错误。 呼叫 用于在本地虚拟机上运行函数,不广播到区块链进行挖掘。对状态的任何更改都需要使用 send : https://web3js.readthedocs.io/en/1.0/web3-eth-contract.html#methods-mymethod-send

    推荐文章