Contract 객체로 sign하여 Transaction Hash를 확인하려고 하는데 어디가 문제인지 잘 모르겠습니다

Contract contract = KIP7.create(caver, token.getAbi(),  contractAddress);
String method = "transfer";

contract.getDefaultSendOptions().setFrom(senderKeyring.getAddress());
contract.getDefaultSendOptions().setFeeDelegation(true);
contract.getDefaultSendOptions().setFeePayer(feePayerKeyring.getAddress());

SendOptions sendOptions = determineSendOptions(contract, contract.getDefaultSendOptions(), method, Arrays.asList(toAddress, amount));

String input = contract.encodeABI(method, toAddress, amount);
FeeDelegatedSmartContractExecution fdsce =  new FeeDelegatedSmartContractExecution.Builder()
        .setKlaytnCall(caver.rpc.klay)
        .setFrom(senderKeyring.getAddress())
        .setTo(toAddress)
        .setGas(sendOptions.getGas())
        .setInput(input)
        .setFeePayer(feePayerKeyring.getAddress())
        .build();

contract.sign(method, fdsce);
contract.signAsFeePayer(method, fdsce);
String decoded = fdsce.getRLPEncoding();

Bytes32 txHash_executed = caver.rpc.klay.sendRawTransaction(decoded).send();
log.debug("### {}", txHash_executed.getResult());

위 소스처럼 테스트 코드를 작성하여 확인하고 있는데

java.lang.IllegalArgumentException: Cannot find method with passed parameters.

	at com.klaytn.caver.contract.ContractMethod.findMatchedInstance(ContractMethod.java:1019)
	at com.klaytn.caver.contract.ContractMethod.encodeABI(ContractMethod.java:490)
	at com.klaytn.caver.contract.ContractMethod.sign(ContractMethod.java:362)
	at com.klaytn.caver.contract.ContractMethod.sign(ContractMethod.java:327)
	at com.klaytn.caver.contract.Contract.sign(Contract.java:500)
	at io.kyc.service.CaverTransactionTest.sendTransferSignContract(CaverTransactionTest.java:471)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:567)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

이런 오류가 발생했습니다.
제가 어느 부분을 수정해야할까요?

안녕하세요 contract에서 호출하시는 함수를 못찾아서 발생하는 문제로 보여지는데요, ABI와 호출하고계신 함수 파라미터 등 한번 천천히 살펴보시길 추천드려요

@jack_jin
contract.getMethod(method).sign() 이렇게 호출하라는 말씀이시죠?

정상적으로 method는 인식이 되었지만, 실제 컨트렉트에 해당 메소드가 없거나, 파라미터가 잘못되었을 수 있으니 한번 확인해보시라고 말씀드린거에요.

아~ 말씀해주신 부분을 반영해서 오류는 넘어갔습니다 ㅎㅎㅎ
감사합니다

1개의 좋아요