튜토리얼에 앞서
API 호출에 사용되는 x-chain-id
값은 8217(Cypress) 또는 1001(Baobab)입니다.
API 호출에 필요한 필수 파라미터는 각 예시에 설명됩니다.
API 호출 시 사용자가 입력해야 하는 값은 중괄호 1개({}
)로 표시합니다. 사용자가 입력해야 하는 값은 아래 테이블과 같습니다.
Cypress(Klaytn 메인넷) 또는 Baobab(Klaytn 테스트넷)
KAS 콘솔 - Security - Credential에서 발급받은 accessKeyId
KAS 콘솔 - Security - Credential에서 발급받은 secretAccessKey
API 인증 키가 있으면 모든 KAS 서비스를 사용할 수 있으며 Wallet API를 호출해 만든 Klaytn 계정에 대한 모든 권한을 소유합니다. 모든 권한에는 Klaytn 계정의 자산(KLAY 등) 이동이나 전송 및 실행 권한이 포함됩니다. 만약 API 인증 키에 타인이 접근한다면 Klaytn 계정 권한을 탈취당해 원치 않는 트랜잭션이 발생할 수 있습니다.
KAS/Klaytn 계정 보안을 위해 KAS API 인증 키(Secret Access Key)를 타인과 함부로 공유하지 말고 주의해 관리하십시오.
RLP 문자열로 트랜잭션 보내기: 보내는 계정이 트랜잭션 전송 수수료를 부담하기
RLP 트랜잭션 전송 API는 RLP 인코딩된 트랜잭션 문자열을 사용해 트랜잭션을 클레이튼에 전송합니다. 클레이튼의 모든 트랜잭션은 RLP(Recursive Length Prefix) 방식으로 인코딩된 문자열로 표현할 수 있습니다. 클레이튼에서는 트랜잭션 서명 RLP(SigRLP)와 트랜잭션 해시 RLP(TxHashRLP)를 사용합니다. 클레이튼 트랜잭션에 관한 자세한 내용은 을 확인하십시오.
RLP 트랜잭션을 보내려면 Klaytn Node에 트랜잭션을 보내야 하며, 트랜잭션을 보내려면 트랜잭션 수수료를 지불해야 합니다. API를 호출하려면 계정 저장소와 계정을 생성하고 사용할 계정을 선택해야 합니다. 이 예시를 따라 RLP 트랜잭션을 보내면, 보내는 계정(Account)이 트랜잭션 수수료를 직접 부담합니다.
API 호출
트랜잭션 서명 RLP 또는 트랜잭션 해시 RLP를 입력하고 RLP 트랜잭션 전송 API를 호출합니다. API 호출 시 REST API 또는 SDKs(caver-js, caver-java extensions)를 사용할 수 있습니다.
Copy curl --location --request POST "https://wallet-api.klaytnapi.com/v2/tx/rlp" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}" \
--header "Content-Type: application/json" \
--data-raw "{
"rlp": "0x10f886018505d21dba00830f4240942f...",
"submit": true
}"
Copy const rlp = '0x08f87e808505d21dba008261a89476c6b1f34562ed7a843786e1d7f57d0d7948a6f10194dbe9312beb546a5b518f8bb7ac315cc6eb96b34cf847f8458207f6a0276299929f4b805b1e1376543001652eff9f47cf34332e042c8aded29fd022fca077f1ff2f4bb668b49aa228c170e72d84ffdc456bd3ac9e5e6291d8e6cd61508b'
const result = await caver.kas.wallet.requestRawTransaction({ rlp, submit: true })
Copy String rlp = "0x08f8818203ba8505d21dba00830186a09495e3fd82ecd2b32cae8618599971f5f47f4bc110019481ba6c299350719b18dfaec38ba566fbd5cd7202f847f8458207f5a007c5e1a9b23665b84b1bf83ffcbcce92eaa40e66d1cdf7cf89609dd9e397acf8a0095b14504ee5e486bc4ca9b6d8c1669ca855587bc6d433bb423bc2707b715d8a";
ProcessRLPRequest request = new ProcessRLPRequest();
request.setRlp(rlp);
request.setSubmit(true);
TransactionResult result = caver.kas.wallet.requestRawTransaction(request);
System.out.println(result);
submit
: false이면 트랜잭션이 전송되지 않고, 서명된 트랜잭션 RLP와 트랜잭션 정보를 반환합니다.
API 응답
RLP 트랜잭션 전송 API의 응답은 아래와 같습니다.
Copy {
"from": "0x325dbaf78b393dc2115138c86a58f897ed413aff",
"gasLimit": 1000000,
"gasPrice": "0x5d21dba00",
"input": "0x6d656d6f",
"nonce": 1,
"rlp": "0x10f886018505d21dba00830f4240942f87ba64de5526f7880f21481effbf950f70005c82010094325dbaf78b393dc2115138c86a58f897ed413aff846d656d6ff847f8458207f6a0f3d42d9f0d82f15a2acd18a5fbde0b1aff26936b89fec5151da59bdad4c4ddefa069a8b9319769c5dacffad42232d4d053d11722832169d71bca3f28b211f5f23d",
"signatures": [
{
"R": "0xf3d42d9f0d82f15a2acd18a5fbde0b1aff26936b89fec5151da59bdad4c4ddef",
"S": "0x69a8b9319769c5dacffad42232d4d053d11722832169d71bca3f28b211f5f23d",
"V": "0x7f6"
}
],
"status": "Submitted",
"to": "0x2f87ba64de5526f7880f21481effbf950f70005c",
"transactionHash": "0x62cbe2b959dd80b2dae88ccac3caba51c056989d2cb00bf7b4136c4945cc4644",
"typeInt": 16,
"value": "0x100"
}
Copy TransactionResult {
from: '0xdbe9312beb546a5b518f8bb7ac315cc6eb96b34c',
gas: 25000,
gasPrice: '0x5d21dba00',
nonce: 0,
rlp: '0x08f87e808505d21dba008261a89476c6b1f34562ed7a843786e1d7f57d0d7948a6f10194dbe9312beb546a5b518f8bb7ac315cc6eb96b34cf847f8458207f6a0276299929f4b805b1e1376543001652eff9f47cf34332e042c8aded29fd022fca077f1ff2f4bb668b49aa228c170e72d84ffdc456bd3ac9e5e6291d8e6cd61508b',
typeInt: 8,
signatures: [
Signature {
R: '0x276299929f4b805b1e1376543001652eff9f47cf34332e042c8aded29fd022fc',
S: '0x77f1ff2f4bb668b49aa228c170e72d84ffdc456bd3ac9e5e6291d8e6cd61508b',
V: '0x7f6'
}
],
status: 'Submitted',
to: '0x76c6b1f34562ed7a843786e1d7f57d0d7948a6f1',
transactionHash: '0xb8bfd2ef01bbf52cb6c50f54ff949a00387e77b0e87b0690a1d23a150af513ff',
value: '0x1'
}
Copy class TransactionResult {
from: 0x81ba6c299350719b18dfaec38ba566fbd5cd7202
gas: 100000
gasPrice: 0x5d21dba00
input: null
nonce: 954
rlp: 0x08f8818203ba8505d21dba00830186a09495e3fd82ecd2b32cae8618599971f5f47f4bc110019481ba6c299350719b18dfaec38ba566fbd5cd7202f847f8458207f5a007c5e1a9b23665b84b1bf83ffcbcce92eaa40e66d1cdf7cf89609dd9e397acf8a0095b14504ee5e486bc4ca9b6d8c1669ca855587bc6d433bb423bc2707b715d8a
signatures: [class Signature {
R: 0x7c5e1a9b23665b84b1bf83ffcbcce92eaa40e66d1cdf7cf89609dd9e397acf8
S: 0x95b14504ee5e486bc4ca9b6d8c1669ca855587bc6d433bb423bc2707b715d8a
V: 0x7f5
}]
status: Submitted
to: 0x95e3fd82ecd2b32cae8618599971f5f47f4bc110
transactionHash: 0xd0084e5311d0d75d9bf6f4f1ea31218ceb105e03418599cfeabbb16987fc598e
typeInt: 8
value: 0x1
code: null
message: null
transactionId: null
accountKey: null
}
RLP 문자열로 트랜잭션 보내기: 다른 계정이 트랜잭션 전송 수수료를 대신 부담하기
API 호출
수수료 대납 방식 RLP 트랜잭션 전송 API를 호출합니다. API 호출 시 REST API 또는 SDKs(caver-js, caver-java extensions)를 사용할 수 있습니다.
Copy curl --location --request POST "https://wallet-api.klaytnapi.com/v2/tx/fd-user/rlp" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}" \
--header "Content-Type: application/json" \
--data-raw "{
"rlp": "0x49f8c8048505d21dba00830f4240...",
"feePayer": "0x85B98485444c89880cD9C48807CEF727C296F2da",
"feeRatio": 10,
"submit": true
}"
Copy const rlp = '0x09f8dc808505d21dba0082c3509476c6b1f34562ed7a843786e1d7f57d0d7948a6f1019418aa5d1726d42a16e53eea8e1eda13f5f3d18bf4f847f8458207f6a0620fa593f92d9697ff4a4ce10e7d7edb443903c80b972c18fa1b71b58666dfd0a0208e2ea6f0a357000c5b2926ea86f7cef7237dca9a6c2a102fac9b36f282b1669444ee3906a7a2007762e9d706df6e4ef63fa1eda8f847f8458207f6a013a4969b6edad58dd526db2495aa68d25a3f0d105ec6d6e6feba34d1f6c20573a00275cbcb9aa3a7dbb38619e5e54b8398cc9893ea73b5d1b2184d3de9dc929f1c'
const result = await caver.kas.wallet.requestFDRawTransactionPaidByUser({ rlp, feePayer: '0x44Ee3906a7a2007762E9d706dF6E4eF63FA1edA8', submit: true })
Copy String rlp = "0x09f8df8203bb8505d21dba00830186a09495e3fd82ecd2b32cae8618599971f5f47f4bc110019481ba6c299350719b18dfaec38ba566fbd5cd7202f847f8458207f5a0bd2d872691092acb24b9d60f2e4c1297ffdacc02ab1a88b0f6638920befd32afa03ec029244f94204901d5d4c86c44f57afb5cdbea0c8939350a702d8ed4e350d69431d845ac80a0b2a38f6267cabcf34f8fa9dcd2b7f847f8458207f6a0b600f4a349d139febecdb79eaf563e0f0b4c106f8f3354789ee3c9ccc9086d58a0531564ad071241a3f0dbce487b55a19e7da595789404e0b1b33d906b9121e9bf";
FDUserProcessRLPRequest processRLPRequest = new FDUserProcessRLPRequest();
processRLPRequest.setRlp(rlp);
processRLPRequest.setFeePayer(userFeePayer);
processRLPRequest.setSubmit(true);
FDTransactionResult resultRLP = caver.kas.wallet.requestFDRawTransactionPaidByUser(processRLPRequest);
System.out.println(resultRLP);
submit
: false이면 트랜잭션이 전송되지 않고, 서명된 트랜잭션 RLP와 트랜잭션 정보를 반환합니다.
feePayer
: 사용자가 트랜잭션 수수료를 대납하는 계정을 별도로 사용할 때, 이 계정 주소를 여기에 입력합니다. KAS에서 먼저 수수료를 대납해주는 방식을 사용하려면 feePayer 파라미터 자체를 사용하지 않습니다.
feeRatio
: 트랜잭션 수수료 전체에서 feePayer
가 납부할 비율(1%~99%)입니다. 나머지 비율은 트랜잭션을 Klaytn에 보내는 from
이 직접 납부합니다.
사용자 대납 계정으로 납부하거나 KAS에서 수수료를 대납하는 2가지 방식 모두, feeRatio를 사용할 수 있습니다.
API 응답
수수료 대납 RLP 트랜잭션 전송 API의 응답은 아래와 같습니다.
Copy {
"feePayer": "0xe8ab1729ab614551021cf5cc22c0e037f5a82930",
"from": "0x9c56b45b7443bc73f47234199982481c64807f78",
"gasLimit": 1000000,
"gasPrice": "0x5d21dba00",
"input": "0x",
"nonce": 4,
"rlp": "0x49f8c8048505d21dba00830f4240949c56b45b7443bc73f47234199982481c64807f7880f847f8458207f5a0dd824552d22d8bbb55fa36c0717d1f69305fe26c483d161f30cec3d9fd9aad1da0708b3c3a3b0030ad281ae414ec73f1c05d5095043f13e8a53b396db48c98cd6594e8ab1729ab614551021cf5cc22c0e037f5a82930f847f8458207f6a0e23bcc4cf32afbc3c3b362bd8c774cd33d5d3cba7eb4dc45b25dde28543bfd59a061a52ef000023d9ba61ef9d17546e4d2d3f9bbdf893c5192add8be24a07182a2",
"signatures": [
{
"R": "0xdd824552d22d8bbb55fa36c0717d1f69305fe26c483d161f30cec3d9fd9aad1d",
"S": "0x708b3c3a3b0030ad281ae414ec73f1c05d5095043f13e8a53b396db48c98cd65",
"V": "0x7f5"
}
],
"status": "Submitted",
"transactionHash": "0x366f4f11918ef23314e3d35b1d5bee1067a2d599359fd920f867aa0a3b31d2a2",
"typeInt": 73
}
Copy FDTransactionResult {
feePayer: '0x44ee3906a7a2007762e9d706df6e4ef63fa1eda8',
from: '0x18aa5d1726d42a16e53eea8e1eda13f5f3d18bf4',
gas: 50000,
gasPrice: '0x5d21dba00',
nonce: 0,
rlp: '0x09f8dc808505d21dba0082c3509476c6b1f34562ed7a843786e1d7f57d0d7948a6f1019418aa5d1726d42a16e53eea8e1eda13f5f3d18bf4f847f8458207f6a0620fa593f92d9697ff4a4ce10e7d7edb443903c80b972c18fa1b71b58666dfd0a0208e2ea6f0a357000c5b2926ea86f7cef7237dca9a6c2a102fac9b36f282b1669444ee3906a7a2007762e9d706df6e4ef63fa1eda8f847f8458207f6a082fc2dc3e022f5f31c0e9a33e8601fa7861dda8421456fe346cd450a85809967a058bada64856d4739b5512da275c55facb9e592ababde0525af87f15f18d75cf7',
typeInt: 9,
signatures: [
Signature {
R: '0x620fa593f92d9697ff4a4ce10e7d7edb443903c80b972c18fa1b71b58666dfd0',
S: '0x208e2ea6f0a357000c5b2926ea86f7cef7237dca9a6c2a102fac9b36f282b166',
V: '0x7f6'
}
],
status: 'Submitted',
to: '0x76c6b1f34562ed7a843786e1d7f57d0d7948a6f1',
transactionHash: '0x4fadb2c881168e7a101e4abec3fe2ebb9cac9711071179b6ef8ca551a5744545',
value: '0x1'
}
Copy class FDTransactionResult {
feePayer: 0x31d845ac80a0b2a38f6267cabcf34f8fa9dcd2b7
from: 0x81ba6c299350719b18dfaec38ba566fbd5cd7202
gas: 100000
gasPrice: 0x5d21dba00
input: null
nonce: 955
rlp: 0x09f8df8203bb8505d21dba00830186a09495e3fd82ecd2b32cae8618599971f5f47f4bc110019481ba6c299350719b18dfaec38ba566fbd5cd7202f847f8458207f5a0bd2d872691092acb24b9d60f2e4c1297ffdacc02ab1a88b0f6638920befd32afa03ec029244f94204901d5d4c86c44f57afb5cdbea0c8939350a702d8ed4e350d69431d845ac80a0b2a38f6267cabcf34f8fa9dcd2b7f847f8458207f6a00efcd393bd8194185a654b1772a729ddb360c0daf20b08dfa56cb988d00ad8b9a02f400dba3de72e82a994dd5b91d16633bd2437f85662ab39cce42b540f4de6bd
signatures: [class Signature {
R: 0xbd2d872691092acb24b9d60f2e4c1297ffdacc02ab1a88b0f6638920befd32af
S: 0x3ec029244f94204901d5d4c86c44f57afb5cdbea0c8939350a702d8ed4e350d6
V: 0x7f5
}]
status: Submitted
to: 0x95e3fd82ecd2b32cae8618599971f5f47f4bc110
transactionHash: 0x3e3dd7a553a31a002e93731660172390035541393db605ffac01302c34f2e652
typeInt: 9
value: 0x1
feeRatio: null
transactionId: null
accountKey: null
}
RLP 문자열로 트랜잭션 보내기: KAS에서 트랜잭션 전송 수수료를 부담하기
API 호출
KAS GlobalFeePayer 수수료 대납 방식 RLP 트랜잭션 전송 API를 호출합니다. API 호출 시 REST API를 사용할 수 있습니다.
Copy curl --location --request POST "https://wallet-api.klaytnapi.com/v2/tx/fd/rlp" \
-u {access-key-id}:{secret-access-key} \
--header "x-chain-id: {chain-id}" \
--header "Content-Type: application/json" \
--data-raw "{
"rlp": "0x49f8c8048505d21dba00830f4240...",
"feeRatio": 10,
"submit": true
}"
Copy const rlp = '0x0af8de018505d21dba00830111709476c6b1f34562ed7a843786e1d7f57d0d7948a6f101944c11080ccdbc63ae369b4baf44bee383779123d863f847f8458207f5a099855401a5cb69181c252d183af8281eea35767040f9526a0f6305b9c593f0a8a0276d996d4b7e4c68e7fa1571b4d4b753958cca1192701b67c9aaef7cd50a4754941b71a63903e35371e2fc41c6012effb99b9a2c0ff847f8458207f5a076d33208facdb2f45dba5ba82bebb84a4df0311b66ebea2e27796df97f863868a01a2ddad4029ce983f885a69c433e701bc32f4d51f598ada490565e77ebb936d6'
const result = await caver.kas.wallet.requestFDRawTransactionPaidByGlobalFeePayer({ rlp:, submit: true, feeRatio: 99 })
Copy String rlp = "0x09f8df8203bc8505d21dba00830186a09495e3fd82ecd2b32cae8618599971f5f47f4bc110019481ba6c299350719b18dfaec38ba566fbd5cd7202f847f8458207f6a0b7f7e60352eb112a7ca2da53a447c34d2efa2560b3ca2cf3c5b3a75de7371a82a02632b2e9f8f5862cdf37b3526dff7d7883bbb60294509b0fa9d54f6c1fe25195941b71a63903e35371e2fc41c6012effb99b9a2c0ff847f8458207f6a0bbeb7b0e4d12236145d1130530f1b3638cf4e0cbf58dabaa976b2973fd1d0f07a042456bbb1e642f88e2ca027ea8725eeb54cc9c4d35b8ee3f44f0de08c5e6ebe5";
FDProcessRLPRequest requestRLP = new FDProcessRLPRequest();
requestRLP.setRlp(rlp);
requestRLP.setSubmit(true);
FDTransactionResult result = caver.kas.wallet.requestFDRawTransactionPaidByGlobalFeePayer(requestRLP);
System.out.println(result);
submit
: false이면 트랜잭션이 전송되지 않고, 서명된 트랜잭션 RLP와 트랜잭션 정보를 반환합니다.
feeRatio
: 트랜잭션 수수료 전체에서 feePayer
가 납부할 비율(1%~99%)입니다. 나머지 비율은 트랜잭션을 Klaytn에 보내는 from
이 직접 납부합니다.
사용자 대납 계정으로 납부하거나 KAS에서 수수료를 대납하는 2가지 방식 모두, feeRatio를 사용할 수 있습니다.
API 응답
KAS GlobalFeePayer 수수료 대납 RLP 트랜잭션 전송 API의 응답은 아래와 같습니다.
Copy {
"feePayer": "0x85b98485444c89880cd9c48807cef727c296f2da",
"feeRatio": 10,
"from": "0x9c56b45b7443bc73f47234199982481c64807f78",
"gasLimit": 1000000,
"gasPrice": "0x5d21dba00",
"input": "0x",
"nonce": 4,
"rlp": "0x49f8c8048505d21dba00830f4240949c56b45b7443bc73f47234199982481c64807f7880f847f8458207f5a0dd824552d22d8bbb55fa36c0717d1f69305fe26c483d161f30cec3d9fd9aad1da0708b3c3a3b0030ad281ae414ec73f1c05d5095043f13e8a53b396db48c98cd6594e8ab1729ab614551021cf5cc22c0e037f5a82930f847f8458207f6a0e23bcc4cf32afbc3c3b362bd8c774cd33d5d3cba7eb4dc45b25dde28543bfd59a061a52ef000023d9ba61ef9d17546e4d2d3f9bbdf893c5192add8be24a07182a2",
"signatures": [
{
"R": "0xdd824552d22d8bbb55fa36c0717d1f69305fe26c483d161f30cec3d9fd9aad1d",
"S": "0x708b3c3a3b0030ad281ae414ec73f1c05d5095043f13e8a53b396db48c98cd65",
"V": "0x7f5"
}
],
"status": "Submitted",
"transactionHash": "0x366f4f11918ef23314e3d35b1d5bee1067a2d599359fd920f867aa0a3b31d2a2",
"typeInt": 73
}
Copy FDTransactionResult {
feePayer: '0x1b71a63903e35371e2fc41c6012effb99b9a2c0f',
from: '0x4c11080ccdbc63ae369b4baf44bee383779123d8',
gas: 70000,
gasPrice: '0x5d21dba00',
nonce: 1,
rlp: '0x0af8de018505d21dba00830111709476c6b1f34562ed7a843786e1d7f57d0d7948a6f101944c11080ccdbc63ae369b4baf44bee383779123d863f847f8458207f5a099855401a5cb69181c252d183af8281eea35767040f9526a0f6305b9c593f0a8a0276d996d4b7e4c68e7fa1571b4d4b753958cca1192701b67c9aaef7cd50a4754941b71a63903e35371e2fc41c6012effb99b9a2c0ff847f8458207f5a081e3f03427b0bd41668b2f43fbd87e946bad1b29308c9c5568a282d1c5b9c1b5a07c58152f927a2229784fbdf5566ee1bfd79f7bdb91b26052204e025eef2b0f01',
typeInt: 10,
signatures: [
Signature {
R: '0x99855401a5cb69181c252d183af8281eea35767040f9526a0f6305b9c593f0a8',
S: '0x276d996d4b7e4c68e7fa1571b4d4b753958cca1192701b67c9aaef7cd50a4754',
V: '0x7f5'
}
],
status: 'Submitted',
to: '0x76c6b1f34562ed7a843786e1d7f57d0d7948a6f1',
transactionHash: '0x6c2224b458b242602cce3d51cc27b373d7167509f38e3f46c84cd2bc1f746c7f',
value: '0x1',
feeRatio: 99
}
Copy class FDTransactionResult {
feePayer: 0x1b71a63903e35371e2fc41c6012effb99b9a2c0f
from: 0x81ba6c299350719b18dfaec38ba566fbd5cd7202
gas: 100000
gasPrice: 0x5d21dba00
input: null
nonce: 956
rlp: 0x09f8df8203bc8505d21dba00830186a09495e3fd82ecd2b32cae8618599971f5f47f4bc110019481ba6c299350719b18dfaec38ba566fbd5cd7202f847f8458207f6a0b7f7e60352eb112a7ca2da53a447c34d2efa2560b3ca2cf3c5b3a75de7371a82a02632b2e9f8f5862cdf37b3526dff7d7883bbb60294509b0fa9d54f6c1fe25195941b71a63903e35371e2fc41c6012effb99b9a2c0ff847f8458207f6a0c3f1a7cc897e802c5d8a08aed83d314b274e1750b60054fa0e0b8f7f00935f33a0332cd62697579b1524c117d77fb9d0e7f5d62582f77fb6849672ee64a7eb501b
signatures: [class Signature {
R: 0xb7f7e60352eb112a7ca2da53a447c34d2efa2560b3ca2cf3c5b3a75de7371a82
S: 0x2632b2e9f8f5862cdf37b3526dff7d7883bbb60294509b0fa9d54f6c1fe25195
V: 0x7f6
}]
status: Submitted
to: 0x95e3fd82ecd2b32cae8618599971f5f47f4bc110
transactionHash: 0xfc1056decf9ab222325a1ffa096d53db160f506a2e40ecdf8dacff4e4439a5cd
typeInt: 9
value: 0x1
feeRatio: null
transactionId: null
accountKey: null
}