Функция солидности с array.push() не работает, когда структура имеет более двух параметров

Я развернул контракт со следующей функцией push в моей локальной приватной цепочке через 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? И как я могу передать более двух параметров в массив Stuct в моем Dapp?

1 ответ

Это отлично работает:

      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 ;
}
Другие вопросы по тегам