Reputation: 7852
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
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