0

I have a smart contract addOwner function that accepts some param :

// add owner to the contract
    function addOwner(string[] memory _name, address[] memory _owner_address,uint _confirmationOfOwner)
     public
     onlyOwner 
     {
        require(_owner_address.length > 0,"Owner is required");
        require(_name.length > 0,"Owner's name is required");
        require(_owner_address.length == _name.length,"Each owner mush have name");
        require(_confirmationOfOwner > 0 && _confirmationOfOwner <= _owner_address.length + owners.length,"Confirmation of the owner is invalid");
        for(uint i = 0; i <_owner_address.length; i++ ){
            
            require(_owner_address[i] != address(0), "invalid owner");
            require(!isOwner[_owner_address[i]], "owner not unique");

            isOwner[_owner_address[i]] = true;
            owners.push(Owner({name:_name[i],owner_address:_owner_address[i]}));
        }
        confirmationOfOwner = _confirmationOfOwner;
    }

but when I use send() or call() function it always error with send() and get Result {} with call:

with function send():

await contract.methods.addOwner(["owner_02"],["0x5B38Da6a701c568545dCfcB03FcB875f56beddC4"],2).send({from:accounts[0]});

error:

Error: Transaction has been reverted by the EVM:
{
  "transactionHash": "0x1462de5cbae11d1de0138866ea7c2a08059bca310808cbc95277bca73235dbff",
  "transactionIndex": 0,
  "blockNumber": 19,
  "blockHash": "0xde2f833416671491c78bac4d3ae102f31e3bb89ff09a3387eee095382e6da4b6",
  "from": "0xd520cc14ef05eadc4eebe1312cdb22e2cdd03018",
  "to": "0x1d1ddaa523196d8a2b4690449626fba81e2bbcd3",
  "cumulativeGasUsed": 90000,
  "gasUsed": 90000,
  "contractAddress": null,
  "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
  "status": false,
  "effectiveGasPrice": 2612896633,
  "type": "0x2",
  "events": {}
}
    at Object.TransactionError (/Users/pon.dara/Desktop/sabay-workspace/PD/multi_sign_wallet_solidity/node_modules/web3-core-helpers/lib/errors.js:87:21)
    at Object.TransactionRevertedWithoutReasonError (/Users/pon.dara/Desktop/sabay-workspace/PD/multi_sign_wallet_solidity/node_modules/web3-core-helpers/lib/errors.js:98:21)
    at /Users/pon.dara/Desktop/sabay-workspace/PD/multi_sign_wallet_solidity/node_modules/web3-core-method/lib/index.js:396:57
    at processTicksAndRejections (node:internal/process/task_queues:96:5) {
  receipt: {
    transactionHash: '0x1462de5cbae11d1de0138866ea7c2a08059bca310808cbc95277bca73235dbff',
    transactionIndex: 0,
    blockNumber: 19,
    blockHash: '0xde2f833416671491c78bac4d3ae102f31e3bb89ff09a3387eee095382e6da4b6',
    from: '0xd520cc14ef05eadc4eebe1312cdb22e2cdd03018',
    to: '0x1d1ddaa523196d8a2b4690449626fba81e2bbcd3',
    cumulativeGasUsed: 90000,
    gasUsed: 90000,
    contractAddress: null,
    logsBloom: '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
    status: false,
    effectiveGasPrice: 2612896633,
    type: '0x2',
    events: {}
  }
}

with function call():

await contract.methods.addOwner(["owner_02"],["0x5B38Da6a701c568545dCfcB03FcB875f56beddC4"],2).call({from:accounts[0]});

response:

Result {}

How to solve this or call the contract properly?

Dara
  • 37
  • 1
  • 7
  • you have to use send() to send a transaction and call() to read status, when you call send() the transaction is sent, but it reverted, so there is an error inside the contract or the gas is insufficient. in which blockchain did you tried that? i can't find the transaction hash – Jacopo Mosconi Jun 03 '22 at 09:30

2 Answers2

0

It means the smart contract did revert() for your transaction, usually by failing to require() line. Other reasons include trying to make a payable transaction to a smart contract that does not accept payments.

Without the smart contract source code, it is impossible to tell what causes the revert.

  • It has a problem with the gas fee when I manually set the gas fee to 1000000 and now it is working – Dara Jun 08 '22 at 09:21
0

for this problem, I have manually set the gas fee and it is working.

Example:

await contract.methods.addOwner(['owner_03'],[accounts[2]],2).send({from:accounts[0],gas:700000});
Dara
  • 37
  • 1
  • 7