Caver-java의 signmessage를 활용해서 FeeDelegatedSmartContractExecution을 테스트 하고 싶습니다

해당 링크를 참고하여 테스트를 하려고 하는데 샘플 소스를 못찾아 질문드립니다
샘플소스가 없다면
매개변수의 "message"를 만드는 방법을 알려주셔도 될것 같습니다.

안녕하세요.
signMessage는 전달받은 메세지를 위 문서의 설명처럼 아래의 로직으로 sign을 하는 것입니다.

sign(keccak256("\x19Klaytn Signed Message:\n" + len(message) + message)))

message는 작성자분이 원하는 String을 넣으시면됩니다.

signMessage()와 FeeDelegatedSmartContractExecution는 그렇게 연관이 있어보이지 않아보입니다.
FeeDelegatedSmartContractExecution을 테스트하고싶다는 말이 잘 이해가 가지않는데, 조금 더 자세하게 설명을 해주시면 도움을 드릴 수 있을 것 같습니다.

@Kale
답변 감사합니다

baobab에서 지갑을 생성 하고 해당 주소를 RoleBasedKey로 업데이트하였습니다.

WeightedMultiSigOptions[] options = {
                new WeightedMultiSigOptions(BigInteger.valueOf(2), Arrays.asList(optionWeight[0])),
                new WeightedMultiSigOptions(),
                new WeightedMultiSigOptions(BigInteger.valueOf(3), Arrays.asList(optionWeight[2])),
        };

샘플소스처럼 여러개의 키를 생성하여 업데이트를 하였습니다.
이때 알려주셨던 대로 KeyStore파일로 저장하여 그 정보를 가지고 keyring을 만들어서 호출하는 것은 성공하였습니다.

RoleBasedKey로 업데이트 된 Private Key 혹은 역할 별로 서명하여 트랜잭션을 전송하는 부분을 테스트해보려고 합니다.

그렇다면 “caver.wallet.sign” 이 함수를 사용해야하는건가요??

    1. 29 13:33 추가
      해결된것 같습니다

DOC문서의 “발신자와 수수료 납부자가 서명을 따로하는 트랜잭션을 전송하고 싶은 경우 아래 코드를 참고하세요” 이부분을 참고해서 했습니다.

AbstractTransaction executionTx = contract.sign(sendOptionsForExecution, "set", "test", "testValue");
            caver.wallet.signAsFeePayer(feePayer.getAddress(), (AbstractFeeDelegatedTransaction)executionTx);

이 부분을 참고하면 제가 배포한 컨트랙트의 토큰전송 함수를 호출할 때 수수료 납부자와 발신자 모두 서명하는 건가요?? 만약 맞다면 제가 찾던 방식이 이 방식이라서요… (문서상에서는 배포라고 되어 있어 컨트랙트 배포할때만 해당하는 사항인줄 알고 사용하지 않았었습니다.)

서명은 이 트랜잭션을 통해 특정 행위를 하고자하는 Account에 대한 검증을 하기위한 용도로 사용됩니다.
예를 들면 수수료 대납 트랜잭션에서는 이 트랜잭션을 전송하고자 하는 Account(sender)와 트랜잭션의 수수료를 대납하고나 하는 수수료 대납자(fee payer) Account의 서명이 요구됩니다.

클레이튼에서 트랜잭션은 여러 타입으로 나뉘어져있습니다.(그 중에 컨트랙트 배포, 컨트랙트 실행을 위한 타입이 있습니다.) 트랜잭션의 타입과 무관하게 이 트랜잭션으로 어떤 행위를 하고자하는 Account들의 서명들을 모두 받아 클레이튼 네트워크에 전송해야합니다.

다시 이야기하면 수수료 대납을 위한 트랜잭션을 하기위해서는 2가지의 서명이 필요합니다.

  • 트랜잭션을 보내고자 하는 sender account의 서명
  • 트랜잭션의 수수료를 대납하고자하는 feepayer account의 서명

트랜잭션을 타입에 맞게 작성하시고 그 트랜잭션에서 요구되는 서명의 종류를 잘 파악하셔서 서명 후에 트랜잭션을 보내주시면 됩니다.

감사합니다.