위와 같이 제가 배포한 contract의 tranferFrom이라는 매소드를 호출하려고 합니다.
주석으로 막은 방벅으로 하다가 Callobject라는 걸 넘겨야 하는것 같아 CallObject를 선언하고 Set하는 방식으로 해보았는데 “java.lang.IllegalArgumentException: Cannot find method with passed parameters.” 오류가 발생했습니다.
Description
우선 사용하신 contract.call에 대해서 설명드리겠습니다. contract.call 을 호출 시퀀스를 따라가보면 아래와 같이 호출된다는 걸 확인해보실 수 있습니다.
(Break point를 사용하셔서 step by step으로 따라가보시는 걸 추천드립니다.)
결국 마지막에 호출하는 것은 klay_call 로 링크에 있는 설명을 보시면 “블록체인에 트랜잭션을 생성하지 않고 즉시 새 메시지 호출을 합니다.” 라고 되어있습니다.
트랜잭션(= 상태의 변화)을 발생시키지 않는다는 건 상태 변화가 없는 액션이라는 뜻이고 현재 질문자분께서 호출하고자 하시는 transferFrom 이라는 메서드는 상태 변화(컨트랙트 스토리지에 저장되어 있는 값들의 변경)를 요구하기 때문에 지금과 같은 경우 맞지 않는 사용법입니다.
transferFrom 은 일반적으로 토큰 컨트랙트에서 특정 계정 주소에 매핑된 토큰 잔액 값에 대한 변경이 일어나는 액션이고 이는 곧 토큰 컨트랙트 상태의 변화를 의미합니다. 따라서 지금과 같은 경우 Contract 클래스의 call 메서드 대신 send라는 메서드를 사용하셔야 하는 상황입니다.
호출하신 totalSupply의 경우 컨트랙트의 상태 변경 없이 단순히 값만 읽어오는 메서드고 이런 경우에 call을 사용하시면 됩니다.