Edgaras Karka
Edgaras Karka

Reputation: 7852

How to pas params as bytes on solidity

I have two functions on contract:

function 1 receives bytes params variable

function foo1(bytes memory params)

function 2 receives two params: address param1, uint256 param2

function foo2(address param1, uint256 param2)

my goals somehow pass params as bytes to foo1, decode it on function, and pass decoded params to foo2

like:

function foo2(address param1, uint256 param2) {
   // do something
}

function decode(bytes params) private returns(???){
  // decode
}

function foo1(bytes params) public {
  var decodedParams = fromBytes(params)
  foo2(decodedParams.param1, decodedParams.param2)
}

from frontend I expect something like:

  const params = toBytes({param1: '0xAddRess', param2: 1})

  myContract.foo1(params)

Upvotes: 1

Views: 524

Answers (1)

Petr Hejda
Petr Hejda

Reputation: 43521

You can use abi.encodeParameters() on frontend

const bytesHex = web3.eth.abi.encodeParameters(
    ['address', 'uint256'],
    ['0xde0B295669a9FD93d5F28D9Ec85E40f4cb697BAe', '1']
);

and abi.decode() in the contract

pragma solidity ^0.8;

contract MyContract {
    function foo2(address param1, uint256 param2) external {
        // do something
    }
    
    function foo1(bytes memory params) external {
        (address decodedAddress, uint256 decodedUint) = abi.decode(params, (address, uint256));
        this.foo2(decodedAddress, decodedUint);
    }
}

Upvotes: 2

Related Questions