동도리 개발 로그

Web3j - SmartContract (ethCall Decoder) ERC1155 본문

블록체인/이더리움

Web3j - SmartContract (ethCall Decoder) ERC1155

동돌이 2022. 3. 10. 17:59
반응형

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