동도리 개발 로그
Web3j - SmartContract (ethCall Decoder) ERC1155 본문
반응형
ERC1155 를 변경하여 스마트 컨트렉트를 배포하고나서 springboot 서버에서 배포한 컨트렉트를 사용하려고 하는데 막히는 부분을 정리하려한다.
Function func = new Function("balanceOfBatch", Arrays.asList(
new DynamicArray(...),
new DynamicArray(...)
, Arrays.<TypeReference<?>>asList(new TypeReference<DynamicArray<Uint256>>(){}));
ERC1155에서 balanceOfBatch 함수를 사용하기위해서 balanceOfBatch 와 inPutParameter로 array를 넘기고, outPutParameter로 array를 받아와야하는건데 function생성까지는 문제 없이 생성됨,
하지만
List<Type> decode = FunctionReturnDecoder.decode(ethCall.getResult(), func.getOutputParameters());
ethCall을 호출 한 후 결과를 가져와서 찍으면 값이 보이는게 아니라 class 이름만찍힘...
반나절 구글링 후 찾아낸 답은
List<Type> decode = FunctionReturnDecoder.decode(ethCall.getResult(), func.getOutputParameters());
List<BigInteger> resultArr = new ArrayList<>();
if (decode.size() > 0) {
for (Type tt : decode) {
DynamicArray<Uint256> da = (DynamicArray<Uint256>) tt;
List<Uint256> lu = da.getValue();
if (lu.size() > 0) {
for (Uint256 n : lu) {
resultArr.add((BigInteger) n.getValue());
}
}
}
}
ArrayList를 새로만들어서 넣어주면 잘 나온다!
반응형
'블록체인 > 이더리움' 카테고리의 다른 글
ERC1155 SmartContract 정리 (0) | 2022.03.21 |
---|---|
스마트컨트렉트 - ERC1155 - byte type 생성 (0) | 2022.03.18 |