Web3j, how to correctly byte encode multiple data?

Web3j, how to correctly byte encode multiple data?

Manage alerts

Loading saved threads...

Hackuz · External communityPost link
External question — Ethereum Stack Exchange Author: Hackuz Original post: https://ethereum.stackexchange.com/questions/113014 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. I am interacting with a smart contract and i do not understand correctly how to encode the data using Web3j to interact with the smart contract since I had never interacted with a contract that required multiple byte-encoded data. //this is a small example of what i have //Solidity example contract pragma solidity 0.8.7; contract example { function exampleFunction(bytes memory params){ //Decode Data. (address[] memory array0, uint numberExample, address[] memory array1) = abi.decode(params, (address[], uint, address[])); //do more... } } //Web3j //prepare example data List<String> array0 = new ArrayList<String>(); array0.add("0x......"); array0.add("0x......"); BigInteger numberExample = new BigInteger("4234242342424"); List<String> array1 = new ArrayList<String>(); array1.add("0x......"); array1.add("0x......"); //this is my problem as it is my first time sending encoded data. byte[] params = ????; //how to correctly encode the data? //load contract MixExecutor Contract = example.load(exampleContractAddress, web3j, transactionManager, gasPrice, gasLimit); //Execute function TransactionReceipt Tx = Contract.exampleFunction(params).sendAsync().get(); String hash = Tx.getTransactionHash(); //Contract Wrap public RemoteCall<TransactionReceipt> exampleFunction(byte[] params) { final Function function = new Function( FUNC_EXAMPLEFUNCTION, Arrays.<Type>asList(new org.web3j.abi.datatypes.DynamicBytes(params), Collections.<TypeReference<?>>emptyList()); return executeRemoteCallTransaction(function); } //I tried this but when executing the smart contract it gave an error. String data = Arrays.<Type>asList( //array0 new org.web3j.abi.datatypes.DynamicArray<org.web3j.abi.datatypes.Address>( org.web3j.abi.datatypes.Address.class, org.web3j.abi.Utils.typeMap( array0, org.web3j.abi.datatypes.Address.class ) ), ///numberExample new org.web3j.abi.datatypes.generated.Uint256(numberExample), //array1 new org.web3j.abi.datatypes.DynamicArray<org.web3j.abi.datatypes.Address>( org.web3j.abi.datatypes.Address.class, org.web3j.abi.Utils.typeMap( array1, org.web3j.abi.datatypes.Address.class ) ) ).toString(); byte[] params = data.getBytes(); I think this might help me, I'll keep looking. I wonder if I will have to change the smart contract so that instead of receiving a data bytes it receives a Struct.
Quote
Report
phaze · External communityPost link
External answer — Ethereum Stack Exchange Author: phaze Original post: https://ethereum.stackexchange.com/a/113033 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. web3.eth.abi.encodeParameters( ['address[]', 'uint256', 'address[]'], [ ['0x000000000000000000000000000000000000dEaD', '0x000000000000000000000000000000000000dEaD'], '14', ['0x000000000000000000000000000000000000dEaD'], ] ); You can read more about it in the docs: https://web3js.readthedocs.io/en/v1.2.11/web3-eth-abi.html There's also encodeFunctionCall to encode a full function with parameters.
Quote
Report

Post Reply

Quoted from Forex.com.bd-Editorial External answer — Ethereum Stack Exchange Author: phaze Source score (net votes, not local likes): 0 Original post: https://ethereum.stackexchange.com/a/113033 License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/ Adaptation: HTML converted to plain text; contact email addresses removed. web3.eth.abi.encodeParameters( ['address[]', 'uint256', 'address[]'], [ ['0x000000000000000000000000000000000000dEaD', '0x000000000000000000000000000000000000dEaD'], '14', ['0x000000000000000000000000000000000000dEaD'], ] ); You can read more about it in the docs: https://web3js.readthedocs.io/en/v1.2.11/web3-eth-abi.html There's also encodeFunctionCall to encode a full function with parameters.

Cancel quote

Checking account access…