트랜잭션 Optional 값 문의

안녕하세요.

SDK의 함수를 이용하지 않고 RLP 인코딩 코드를 따로 작성해서 sendRawTransaction을 실행하려고 합니다.

https://ko.docs.klaytn.com/bapp/json-rpc/api-references/klay/transaction/transaction-type-support

상기 페이지를 보면 트랜잭션 전송 시에 nonce, gas, gasPrice 값이 선택이라고 되어 있는데요.

nonce, gas, gasPrice 값이 자동으로 처리되도록 하려면 rawTransaction값 인코딩 시에 어떤 값을 넣어야 하나요?

val chainIdHex = Numeric.toHexStringWithPrefix(BigInteger.valueOf(chainId))
val valueHex = Numeric.toHexStringWithPrefix(convertUnit(value))
val gasHex = Numeric.toHexStringWithPrefix(BigInteger.valueOf(0))
val nonceHex = Numeric.toHexStringWithPrefix(BigInteger.valueOf(0))
val gasPriceHex = Numeric.toHexStringWithPrefix(BigInteger.valueOf(0))

위와 같이 0을 넣었더니 {“jsonrpc”:“2.0”,“id”:1,“error”:{“code”:-32000,“message”:“invalid unit price”}} 같은 오류가 리턴되었습니다.

도움 부탁 드립니다!

안녕하세요, 클레이튼 포럼에 질문을 올려주셔서 감사드립니다.

rawTransaction을 직접 encoding하기 위해서는 트랜잭션 데이터를 정확하게 입력해 주셔야 합니다.

nonce의 경우 klay_getTransactionCount 함수를 통해 정확한 논스값을 찾으셔야 합니다.

gas의 경우 해당 트랜잭션 실행에 필요한 gas 이상의 값을 설정하셔야 합니다. 대략적인 필요한 가스 값은 klay_estimateGas 를 통해 확인하실 수 있습니다. 다만 트랜잭션 예측 값과 실제 실행 값에는 차이가 있을 수 있으니 조금 더 크게 입력하시는 것을 권장드립니다. (블록 높이가 다를 수 있기 때문에 차이가 발생할 수 있음)

gasPrice의 경우 Klaytn의 mainnet인 Cypress의 경우에는 25 peb으로 고정되어 있으나, 실제 값을 얻어오기 위해서는 klay_gasPrice를 참고하시면 됩니다.

위와 같은 값을 자동으로 채워넣는 것은 JSON-RPC에서는 불가능하고, Klaytn의 SDK인 caver를 이용하시면 해당 값들을 내부적으로 채워주도록 구현되어 있으니, caver-jscaver-java를 참고 부탁드립니다.

도움이 되셨기를 바랍니다. 감사합니다.

1 Like