当结构有两个以上的参数时,array.push()的Solidity函数不起作用

时间:2018-01-15 05:35:27

标签: javascript solidity go-ethereum metamask remix

我已通过remix将具有以下推送功能的合同部署到我当地的私人链。

struct TestComplex{
    address testValue;
    address delegate;
    uint testInt;
}
TestComplex[] testArray;
function setTestArrayByPush( address _delegate, address _testAddr, uint _testInt) public {
    testArray.push(TestComplex( {
       testValue:_testAddr,
       delegate: _delegate,
       testInt: _testInt
    } ));
}

如果我通过web3Provider @ remix调用它,它工作正常,但是当我通过geth控制台或通过JS脚本contractInstance.setTestArrayByPush(<Add1>, <Add2>,<Int>)调用它时,它不会将任何东西推入数组。 当我从TestComplex结构中删除一个属性并且函数更改如下。它适用于geth和remix。

function setTestArrayByPush(address _testAddr, uint _testInt) public {
    testArray.push(TestComplex( {
       testValue:_testAddr,
       testInt: _testInt
       }));
    {
}

所以我想知道remix函数调用和geth控制台有什么区别?我怎样才能在我的Dapp中将两个以上的参数传递给stuct数组?

1 个答案:

答案 0 :(得分:0)

这很好用:

pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;


contract Test  {

struct TestComplex{
address testValue;
address delegate;
uint testInt;
}

TestComplex[] public  testArray;


 function setTestArrayByPush( address _testValue, address _delegate, uint _testInt) public {
testArray.push(TestComplex(
   _testValue,
   _delegate,
   _testInt
) );
}

function getTestComplex () public view returns ( TestComplex[] memory)  {
return testArray ;
}