๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

ํŠธ๋žœ์žญ์…˜

์ด ์ฑ•ํ„ฐ์—์„œ๋Š” XRP Ledger์˜ ํŠธ๋žœ์žญ์…˜์— ๊ด€ํ•œ ์„ค๋ช…๊ณผ ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ์ œ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜์ด๋ž€?โ€‹

"ํŠธ๋žœ์žญ์…˜"์ด๋ž€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฑฐ๋ž˜๋‚˜ ์ด๋™์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์œผ๋กœ, ์–ด๋–ค ๊ฒƒ์„ ํ•œ ๊ณณ์—์„œ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ์ž‘์—…์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์€ ๋ฌผ๋ฆฌ์  ๋˜๋Š” ๋””์ง€ํ„ธ ์ƒํ’ˆ์˜ ๊ตํ™˜, ์ •๋ณด์˜ ์ „์†ก, ๋˜๋Š” ๊ธˆ์œต ๊ฑฐ๋ž˜์— ๋ชจ๋‘ ์ ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

XRP Ledger์—์„œ ํŠธ๋žœ์žญ์…˜์€ ์›์žฅ์˜ ์ƒํƒœ๋ฅผ ๋ฐ”๊พธ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. XRP Ledger์—์„œ ํŠธ๋žœ์žญ์…˜์„ ์ œ์ถœํ•˜๋ฉด, ์ด๋Š” ๋Œ€๊ธฐ์—ด์— ๋“ค์–ด๊ฐ€๋ฉฐ, ๋‹ค์Œ ๋ ˆ์ €์—์„œ ์ฒ˜๋ฆฌ๋  ์ฐจ๋ก€๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉด, ์ด๋Š” ๋” ์ด์ƒ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†๋Š” ์ตœ์ข… ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ, ๊ด€๋ จ๋œ ๊ณ„์ • ์ƒํƒœ(์˜ˆ: ์ž”๊ณ )๋Š” ์ด ํŠธ๋žœ์žญ์…˜์— ๋”ฐ๋ผ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์›์žฅ ๊ทœ์น™์€ ๋˜ํ•œ pseudo-ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•˜๋Š”๋ฐ, ์ด๋Š” ์„œ๋ช…๋˜๊ฑฐ๋‚˜ ์ œ์ถœ๋˜์ง€ ์•Š์ง€๋งŒ ์—ฌ์ „ํžˆ ํ•ฉ์˜๋ฅผ ํ†ตํ•ด ์ˆ˜๋ฝ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜์€ ๋ˆ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ ์ด์ƒ์˜ ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ฒฐ์ œ ์œ ํ˜•์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ XRP Ledger์˜ ํŠธ๋žœ์žญ์…˜์€ ์•”ํ˜ธํ™”ํ‚ค๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ, ๊ธฐํƒ€ ์„ค์ •์„ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ, ๊ทธ๋ฆฌ๊ณ  XRP ์›์žฅ์˜ ๋ถ„์‚ฐํ˜• ๊ฑฐ๋ž˜์†Œ์—์„œ ๊ฑฐ๋ž˜ํ•˜๋Š” ๊ฒƒ ๋“ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ๋น„์šฉ (์ˆ˜์ˆ˜๋ฃŒ)โ€‹

XRP Ledger์—์„œ ํŠธ๋žœ์žญ์…˜์„ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ๋Š” ์–ด๋Š ์ •๋„์˜ ๋น„์šฉ์ด ๋“ค๋ฉฐ, ์ด๋ฅผ "ํŠธ๋žœ์žญ์…˜ ๋น„์šฉ" ๋˜๋Š” "์ˆ˜์ˆ˜๋ฃŒ" ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜์„ ์ œ์ถœํ•  ๋•Œ, ์ œ์ถœ์ž๋Š” XRP๋ฅผ ์ง€๋ถˆํ•ฉ๋‹ˆ๋‹ค. ์ด ์ˆ˜์ˆ˜๋ฃŒ๋Š” ๋„คํŠธ์›Œํฌ ์ŠคํŒธ์„ ๋ฐฉ์ง€ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ, ์‚ฌ์šฉ๋œ XRP๋Š” ์‹œ์Šคํ…œ์—์„œ ์†Œ๋ฉธ ("burn")๋˜์–ด์„œ ๋Œ์•„์˜ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์†Œ๋ฉธ๋œ XRP๋Š” ์‹œ์žฅ์—์„œ ์ œ๊ฑฐ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ ์–‘์€ XRP์˜ ์ „์ฒด ๊ณต๊ธ‰๋Ÿ‰์„ ๊ฐ์†Œ์‹œํ‚ค๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.

์ด ์ˆ˜์ˆ˜๋ฃŒ๋Š” ๋„คํŠธ์›Œํฌ์˜ ๋ถ€ํ•˜ ์ƒํƒœ์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋„คํŠธ์›Œํฌ๊ฐ€ ๋ฐ”์  ๋•Œ๋Š” ๋” ๋งŽ์€ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ง€๋ถˆํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฐ’์€ ์ผ๋ฐ˜์ ์œผ๋กœ 0.00001 XRP์—์„œ 0.0005 XRP ์‚ฌ์ด์ž…๋‹ˆ๋‹ค.

XRPL์˜ ํŠธ๋žœ์žญ์…˜ ๊ตฌ์กฐโ€‹

XRP Ledger์˜ ํŠธ๋žœ์žญ์…˜์€ JSON ํ˜•์‹์œผ๋กœ ํ‘œํ˜„๋ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ•„๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค:

  • ๊ณ„์ • ์ฃผ์†Œ: ํŠธ๋žœ์žญ์…˜์„ ๋ณด๋‚ด๋Š” ๊ณ„์ •์˜ ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ์œ ํ˜•: ํŠธ๋žœ์žญ์…˜์˜ ์œ ํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Payment๋Š” XRP ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ†ตํ™”๋ฅผ ํ•œ ๊ณ„์ •์—์„œ ๋‹ค๋ฅธ ๊ณ„์ •์œผ๋กœ ์ „์†กํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ํ•„๋“œ: ํŠธ๋žœ์žญ์…˜ ์œ ํ˜•์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ํ•„๋“œ๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Payment ํŠธ๋žœ์žญ์…˜์—๋Š” Amount ํ•„๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ํ•„๋“œ๋Š” ์†ก๊ธˆํ•  ๊ธˆ์•ก์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

  • ์„œ๋ช…: ํŠธ๋žœ์žญ์…˜์€ ์†ก์‹ ์ž์˜ ๋น„๋ฐ€ํ‚ค๋กœ ์„œ๋ช…๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŠธ๋žœ์žญ์…˜์˜ ๋ฐœ์†ก์ธ์ด ์ž์‹ ์˜ ๊ณ„์ •์„ ์ œ์–ดํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ–ˆ์Œ์„ ์ฆ๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ณต๊ฐœ ํ‚ค: ํŠธ๋žœ์žญ์…˜์˜ ์„œ๋ช…์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ณต๊ฐœ ํ‚ค์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํŠธ๋žœ์žญ์…˜์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜ ํŠธ๋žœ์žญ์…˜์„ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • ์ˆ˜์ˆ˜๋ฃŒ: ํŠธ๋žœ์žญ์…˜์„ ์ œ์ถœํ•  ๋•Œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํŠธ๋žœ์žญ์…˜ ๋น„์šฉ์ด ๋ถ€๊ณผ๋ฉ๋‹ˆ๋‹ค. ์ด ๋น„์šฉ์€ ์ŠคํŒธ ํŠธ๋žœ์žญ์…˜์„ ๋ฐฉ์ง€ํ•˜๊ณ , ์‹œ์Šคํ…œ์˜ ์ž์›์„ ๊ณต์ •ํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜ ๋น„์šฉ์€ ์†ก์‹ ์ž์˜ XRP ์ž”๊ณ ์—์„œ ์ฐจ๊ฐ๋˜๋ฉฐ, ๋ณต๊ตฌํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • ํŠธ๋žœ์žญ์…˜ ํ•ด์‹œ: ํŠธ๋žœ์žญ์…˜์€ ํ•ด์‹œ ๊ฐ’์œผ๋กœ ์‹๋ณ„๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŠธ๋žœ์žญ์…˜์˜ ๋‚ด์šฉ์„ ์š”์•ฝํ•œ ๊ฐ’์œผ๋กœ, ํŠธ๋žœ์žญ์…˜์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜ ํŠธ๋žœ์žญ์…˜์„ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ XRPL ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํŠธ๋žœ์žญ์…˜์˜ ์ข…๋ฅ˜โ€‹

XRP Ledger์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ํŠธ๋žœ์žญ์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ํŠธ๋žœ์žญ์…˜ ์œ ํ˜•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Payment: XRP ๋˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ํ†ตํ™”๋ฅผ ํ•œ ๊ณ„์ •์—์„œ ๋‹ค๋ฅธ ๊ณ„์ •์œผ๋กœ ์ „์†กํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์ž…๋‹ˆ๋‹ค. ์ด๋Š” XRP Ledger์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํŠธ๋žœ์žญ์…˜ ์œ ํ˜• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

  • AccountSet: ๊ณ„์ •์˜ ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์ž…๋‹ˆ๋‹ค. ์ด ์„ค์ •์—๋Š” ์ „์†ก๋ฅ , ์ž์ฒด ์ฃผ์†Œ์—์„œ ํ† ํฐ์„ ์ˆ˜์‹ ํ•˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉํ• ์ง€ ์—ฌ๋ถ€, ๊ณ„์ • ๊ด€๋ จ ์ •๋ณด ๋“ฑ์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • OfferCreate: ๊ฑฐ๋ž˜์†Œ์—์„œ ์ƒˆ๋กœ์šด ์ฃผ๋ฌธ์„ ๋งŒ๋“œ๋Š” ํŠธ๋žœ์žญ์…˜์ž…๋‹ˆ๋‹ค. ์ด ์ฃผ๋ฌธ์€ XRP์™€ ์‚ฌ์šฉ์ž ์ •์˜ ํ†ตํ™” ๊ฐ„์˜ ๊ฑฐ๋ž˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • OfferCancel: ๊ฑฐ๋ž˜์†Œ์—์„œ ๊ธฐ์กด์˜ ์ฃผ๋ฌธ์„ ์ทจ์†Œํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์ž…๋‹ˆ๋‹ค. ์ด ํŠธ๋žœ์žญ์…˜์„ ํ†ตํ•ด ๋” ์ด์ƒ ์›ํ•˜์ง€ ์•Š๋Š” ๊ฑฐ๋ž˜๋ฅผ ์ค‘์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • EscrowCreate: XRP๋ฅผ ์กฐ๊ฑด๋ถ€๋กœ ์ž ๊ทธ๋Š” ํŠธ๋žœ์žญ์…˜์ž…๋‹ˆ๋‹ค. ์ด ์กฐ๊ฑด์€ ์‹œ๊ฐ„์ด๋‚˜ ์•”ํ˜ธ ํ•ด์ œ์™€ ๊ฐ™์€ ํŠน์ • ์š”๊ตฌ์‚ฌํ•ญ์„ ์ถฉ์กฑํ•˜๋Š” ๊ฒƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • EscrowFinish: ์ž ๊ฒจ์ง„ XRP์˜ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋˜๋ฉด, ์ด ํŠธ๋žœ์žญ์…˜์„ ํ†ตํ•ด ํ•ด๋‹น XRP๋ฅผ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • EscrowCancel: ์‹œ๊ฐ„์ด ๋งŒ๋ฃŒ๋˜๋ฉด, ์ด ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•ด ์ž ๊ฒจ์ง„ XRP๋ฅผ ์ทจ์†Œํ•˜๊ณ  ์›๋ž˜์˜ ์†ก์‹ ์ž์—๊ฒŒ ๋Œ๋ ค์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • CheckCreate: ํŠน์ • ์ˆ˜์‹ ์ž๊ฐ€ ๋‚˜์ค‘์— ํ˜„๊ธˆํ™”ํ•  ์ˆ˜ ์žˆ๋Š” '์ฒดํฌ'๋ฅผ ๋งŒ๋“œ๋Š” ํŠธ๋žœ์žญ์…˜์ž…๋‹ˆ๋‹ค.

  • CheckCash: ์ฒดํฌ๋ฅผ ํ˜„๊ธˆํ™”ํ•˜์—ฌ ํ•ด๋‹น ์ฒดํฌ์˜ XRP ๋˜๋Š” ์‚ฌ์šฉ์ž ์ •์˜ ํ†ตํ™”๋ฅผ ๋ฐ›๋Š” ํŠธ๋žœ์žญ์…˜์ž…๋‹ˆ๋‹ค.

  • CheckCancel: ์•„์ง ํ˜„๊ธˆํ™”๋˜์ง€ ์•Š์€ ์ฒดํฌ๋ฅผ ์ทจ์†Œํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์ž…๋‹ˆ๋‹ค.

์ด์™ธ์—๋„ ๋‹ค์–‘ํ•œ ํŠธ๋žœ์žญ์…˜ ์œ ํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ XRPL ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

ํŠธ๋žœ์žญ์…˜ Lifecycleโ€‹

๋ชจ๋“  ํŠธ๋žœ์žญ์…˜๋“ค์€ ๋‹ค์Œ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋Š” ํŠธ๋žœ์žญ์…˜ ์ƒ์„ฑ๋ถ€ํ„ฐ ์ตœ์ข…์ ์œผ๋กœ ๋ ˆ์ €์— ํฌํ•จ๋  ๋•Œ๊นŒ์ง€์˜ ๊ณผ์ •์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  1. ํŠธ๋žœ์žญ์…˜ ์ƒ์„ฑ

    ํŠธ๋žœ์žญ์…˜ ๊ฐ์ฒด๋Š” ํ•„์š”ํ•œ ํ•„๋“œ(ํŠธ๋žœ์žญ์…˜ ์œ ํ˜•, ๊ณ„์ •, ์ˆ˜์‹ ์ž, ๊ธˆ์•ก ๋“ฑ)๋ฅผ ํฌํ•จํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. xrpl.models.transactions์—์„œ ์˜ฌ๋ฐ”๋ฅธ ํŠธ๋žœ์žญ์…˜ ์œ ํ˜•์„ ์„ ํƒํ•˜๊ณ , ํ•„์š”ํ•œ ํ•„๋“œ๋ฅผ ์ฑ„์›Œ๋„ฃ์–ด ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    ํ•„์š”ํ•œ ํ•„๋“œ๋Š” ์ง์ ‘ ์ฑ„์šฐ๊ฑฐ๋‚˜ xrpl.transaction.autofill ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ์ฑ„์›Œ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ํŠธ๋žœ์žญ์…˜ ์„œ๋ช…

    ํŠธ๋žœ์žญ์…˜์€ ์†ก์‹ ์ž์˜ ๋น„๋ฐ€ํ‚ค๋กœ ์„œ๋ช…๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํŠธ๋žœ์žญ์…˜์˜ ๋ฐœ์†ก์ธ์ด ์ž์‹ ์˜ ๊ณ„์ •์„ ์ œ์–ดํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ–ˆ์Œ์„ ์ฆ๋ช…ํ•ฉ๋‹ˆ๋‹ค.

    ํŠธ๋žœ์žญ์…˜ ๊ฐ์ฒด์˜ sign ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ์„œ๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  3. ํŠธ๋žœ์žญ์…˜ ์ œ์ถœ

    ์„œ๋ช…๋œ ํŠธ๋žœ์žญ์…˜์€ XRP Ledger์— ์ œ์ถœ๋˜์–ด ๋‹ค์Œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค. ์ œ์ถœ๋œ ํŠธ๋žœ์žญ์…˜์€ ๋Œ€๊ธฐ์—ด์— ๋“ค์–ด๊ฐ€๋ฉฐ, ๋‹ค์Œ ๋ ˆ์ €์—์„œ ์ฒ˜๋ฆฌ๋  ์ฐจ๋ก€๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.

    ํŠธ๋žœ์žญ์…˜ ๊ฐ์ฒด์˜ submit ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  4. ํŠธ๋žœ์žญ์…˜ ๊ฒ€์ฆ

    ๋Œ€๊ธฐ์—ด์— ๋“ค์–ด๊ฐ„ ํŠธ๋žœ์žญ์…˜์€ ๊ฒ€์ฆ์ž ๋…ธ๋“œ๋“ค (validator nodes)์— ์˜ํ•ด ๋ฆฌํ”Œ์˜ ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ (RPCA)๋ฅผ ๊ฑฐ์ณ ๋ ˆ์ €์˜ ์ƒˆ ๋ฒ„์ „์„ ๋งŒ๋“œ๋Š” ๊ฒ€์ฆ์ž๋“ค์€ ์ œ์ถœ๋œ ํŠธ๋žœ์žญ์…˜์„ ๊ฒ€์ฆํ•˜๊ณ  ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์ด ์œ ํšจํ•˜๋‹ค๋ฉด (์˜ˆ: ์ถฉ๋ถ„ํ•œ ์ž”๊ณ , ์˜ฌ๋ฐ”๋ฅธ ์„œ๋ช… ๋“ฑ), ์ด๋Š” ์ƒˆ ๋ ˆ์ €์— ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

    ํŠธ๋žœ์žญ์…˜์ด ๋ ˆ์ €์— ํฌํ•จ๋˜๋ฉด, ์ด๋Š” ๋” ์ด์ƒ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  5. ์ตœ์ข… ํŠธ๋žœ์žญ์…˜

    ํŠธ๋žœ์žญ์…˜์ด ๋ ˆ์ €์— ํฌํ•จ๋˜๋ฉด, ์ด๋Š” ์™„๋ฃŒ๋œ ์ƒํƒœ๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ, ๊ด€๋ จ๋œ ๊ณ„์ • ์ƒํƒœ(์˜ˆ: ์ž”๊ณ )๋Š” ์ด ํŠธ๋žœ์žญ์…˜์— ๋”ฐ๋ผ ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.

Secure Transactionโ€‹

https://xrpl.org/reliable-transaction-submission.html#reliable-transaction-submission

XRP ๋ณด๋‚ด๊ธฐโ€‹

์ง์ ‘ ์‹ค์Šต์„ ํ†ตํ•ด ๊ฐ„๋‹จํ•œ ํŠธ๋žœ์žญ์…˜์„ ์ƒ์„ฑํ•˜๊ณ  ์ œ์ถœํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด ์˜ˆ์ œ๋Š” Payment ํŠธ๋žœ์žญ์…˜์„ ์ด์šฉํ•ด์„œ XRP๋ฅผ ๋ณด๋‚ด๋Š” ๊ณผ์ •์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋จผ์ € ์•ž์—์„œ ์„ค๋ช…ํ•œ ํŠธ๋žœ์žญ์…˜์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ xrpl-py ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•ด ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

def submit_transaction(
client: JsonRpcClient,
wallet: Wallet,
transaction: Transaction,
check_fee: bool = True,
) -> dict:
"""
ํŠธ๋žœ์žญ์…˜์„ ์ œ์ถœํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Args:
client (JsonRpcClient): XRPL๊ณผ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ ๊ฐ์ฒด ์ž…๋‹ˆ๋‹ค.
wallet (Wallet): ํŠธ๋žœ์žญ์…˜์„ ์ œ์ถœํ•˜๋Š” ๊ณ„์ •์˜ ์ง€๊ฐ‘ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.
transaction (Transaction): ์ œ์ถœํ•  ํŠธ๋žœ์žญ์…˜์ž…๋‹ˆ๋‹ค.
check_fee (bool, optional): ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ํ™•์ธํ• ์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ True๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Returns:
dict: ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

Raises:
XRPLReliableSubmissionException: ํŠธ๋žœ์žญ์…˜ ์ œ์ถœ์ด ์‹คํŒจํ•˜๋ฉด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
"""
# Autofill and sign transaction
signed_tx = autofill_and_sign(
transaction=transaction,
client=client,
wallet=wallet,
check_fee=check_fee,
)

# Validate transaction
signed_tx.validate()

# Send transaction and get response
response = submit_and_wait(
transaction=signed_tx, client=client, wallet=wallet
)

# Raise exception if transaction failed
if not response.is_successful():
raise XRPLReliableSubmissionException(response.result)

# Return result
return response.result

์ด ํ•จ์ˆ˜๋Š” ํด๋ผ์ด์–ธํŠธ ๊ฐ์ฒด, ์ง€๊ฐ‘ ๊ฐ์ฒด, ํŠธ๋žœ์žญ์…˜ ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜์˜ ํ•„๋“œ๋“ค์„ autofill ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ์ž๋™์œผ๋กœ ์ฑ„์šฐ๊ณ , ์ง€๊ฐ‘ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด ํŠธ๋žœ์žญ์…˜์„ ์„œ๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ ํ›„ ์ง์ ‘ ํŠธ๋žœ์žญ์…˜์ด ์œ ํšจํ•œ์ง€ ๊ฒ€์‚ฌํ•˜๊ณ , submit_and_wait ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ํŠธ๋žœ์žญ์…˜์„ ์ œ์ถœํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์•„๋‹ˆ๋ผ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ์ƒ์„ฑโ€‹

payment_tx = Payment(
account=wallet.classic_address,
amount="1000",
destination="rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe",
last_ledger_sequence=ledger_sequence + 10,
)

ํŠธ๋žœ์žญ์…˜ ๊ฐ์ฒด๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์†Œํ†ตํ•˜์ง€ ์•Š๊ณ  ๋กœ์ปฌ์—์„œ ํ•„์š”ํ•œ ํ•„๋“œ๋ฅผ ์ฑ„์šฐ๋Š” ๊ฒƒ์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

Payment ํด๋ž˜์Šค๋Š” Transaction ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค. Transaction ํด๋ž˜์Šค๋Š” ํŠธ๋žœ์žญ์…˜์˜ ๊ณตํ†ต ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋ฉฐ, Payment ํด๋ž˜์Šค๋Š” Transaction ํด๋ž˜์Šค์˜ ํ•„๋“œ์— ๋”ํ•ด ํŠน์ •ํ•œ ํŠธ๋žœ์žญ์…˜ ์œ ํ˜•์— ํ•„์š”ํ•œ ์ถ”๊ฐ€ ํ•„๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ํŠธ๋žœ์žญ์…˜ ๊ฐ์ฒด๋“ค์€ Transaction ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์œผ๋ฉฐ, ํŠธ๋žœ์žญ์…˜ ์œ ํ˜•์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ์ถ”๊ฐ€ ํ•„๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ์ž๋™ ์ฑ„์šฐ๊ธฐ์™€ ์„œ๋ช…โ€‹

signed_tx = autofill_and_sign(
transaction=transaction,
client=client,
wallet=wallet,
check_fee=check_fee,
)

ํŠธ๋žœ์žญ์…˜ ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด, ์ด๋ฅผ ์ž๋™์œผ๋กœ ์ฑ„์šฐ๊ณ  ์„œ๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด autofill_and_sign ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ํŠธ๋žœ์žญ์…˜ ๊ฐ์ฒด๋ฅผ ์ฑ„์šฐ๊ณ  ์„œ๋ช…ํ•œ ํ›„, ์ฑ„์›Œ์ง„ ํŠธ๋žœ์žญ์…˜ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ž๋™ ์ฑ„์šฐ๊ธฐ(autofill)์€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ์™€ ์†Œํ†ตํ•˜์—ฌ, Fee ๊ฐ’๊ณผ sequence๊ฐ’์ด ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์ฃผ์–ด์ง€์ง€ ์•Š์•˜๋‹ค๋ฉด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฑ„์›๋‹ˆ๋‹ค. autofill ํ•จ์ˆ˜์˜ check_fee ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” True๋กœ ์„ค์ •ํ•˜๋ฉด Fee ๊ฐ’์ด ๋„คํŠธ์›Œํฌ์˜ ์˜ˆ์ƒ Fee ๊ฐ’๋ณด๋‹ค ๋„ˆ๋ฌด ๋†’์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

์„œ๋ช…(sign)์€ ๋กœ์ปฌ์—์„œ ์‚ฌ์šฉ์ž์˜ ์ง€๊ฐ‘(private key)์„ ํ†ตํ•ด ํŠธ๋žœ์žญ์…˜์„ ์„œ๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ SigningPubKey ํ•„๋“œ์™€ TxnSignature ํ•„๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค. SigningPubKey๋Š” ์‚ฌ์šฉ์ž์˜ ๊ณต๊ฐœํ‚ค์ด๊ณ , TxnSignature๋Š” ์„œ๋ช… ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋ธ”๋ก์ฒด์ธ ๋„คํŠธ์›Œํฌ์—์„œ๋Š” ์ด ๋‘ ํ•„๋“œ๋ฅผ ์ด์šฉํ•ด ์„œ๋ช… ๊ฐ’์„ ๊ณต๊ฐœํ‚ค๋กœ ๊ฒ€์ฆํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌโ€‹

signed_tx.validate()

ํŠธ๋žœ์žญ์…˜์˜ ํ•„์ˆ˜ ํ•„๋“œ๊ฐ€ ๋ชจ๋‘ ์ฑ„์›Œ์กŒ๋Š”์ง€, ํ•„๋“œ์˜ ๊ฐ’์ด ์œ ํšจํ•œ์ง€ ๋“ฑ์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ํ•„๋“œ์˜ ๊ฐ’์ด ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ์ œ์ถœโ€‹

response = submit_and_wait(transaction=signed_tx, client=client)

if not response.is_successful():
raise XRPLReliableSubmissionException(response.result)

submit_and_wait ํ•จ์ˆ˜๋Š” ํŠธ๋žœ์žญ์…˜์„ ์ œ์ถœํ•˜๊ณ , ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ํŠธ๋žœ์žญ์…˜์€ ๋Œ€๊ธฐ์—ด์— ๋“ค์–ด๊ฐ€๋ฉฐ, ๋‹ค์Œ ๋ ˆ์ €์—์„œ ์ฒ˜๋ฆฌ๋  ์ฐจ๋ก€๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์œผ๋ฉด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

ํŠธ๋žœ์žญ์…˜ ๊ฒฐ๊ณผโ€‹

return response.result
{'Account': 'rh215fU5Pk9N4p2zLdDfRFSKniYqP3qxp7',
'Amount': '1000',
'Destination': 'rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe',
'Fee': '10',
'Flags': 0,
'LastLedgerSequence': 39630981,
'Sequence': 39630970,
'SigningPubKey': 'EDFDBDBD538F1D8DD89A21C91BA824FC9AAA516DAC9BD8144E0E5C0CB3F6FF80AC',
'TransactionType': 'Payment',
'TxnSignature': 'B7E679A367C0F89E131CC6E6EB969936B2C69EED5D083E6B11EC7566CE6B7471B1C2BF322100D633C64F53D4F8419F939F3AD50741DF18CF4FC303AE77F3B206',
'date': 743129490,
'hash': '99B0DFDD6E2A0CD830919B29DECAD78DA76250ACC94805A6B8C89BA4E57F5D97',
'inLedger': 39630974,
'ledger_index': 39630974,
'meta': {'AffectedNodes': [{'ModifiedNode': {'FinalFields': {'Account': 'rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe',
'Balance': '87893903718205934',
'Flags': 0,
'OwnerCount': 0,
'Sequence': 6154587},
'LedgerEntryType': 'AccountRoot',
'LedgerIndex': '31CCE9D28412FF973E9AB6D0FA219BACF19687D9A2456A0C2ABC3280E9D47E37',
'PreviousFields': {'Balance': '87893903718204934'},
'PreviousTxnID': '219D7A899BEF52A6C657B1FE3ED6DCAD7EDAF8BC6D1D279E358CDF6BAB5E5BA4',
'PreviousTxnLgrSeq': 39630970}},
{'ModifiedNode': {'FinalFields': {'Account': 'rh215fU5Pk9N4p2zLdDfRFSKniYqP3qxp7',
'Balance': '9999998990',
'Flags': 0,
'OwnerCount': 0,
'Sequence': 39630971},
'LedgerEntryType': 'AccountRoot',
'LedgerIndex': 'EC06857C98943B84709530C08941FA74DAFC92B30B194D8386209B6D48BB7D3D',
'PreviousFields': {'Balance': '10000000000',
'Sequence': 39630970},
'PreviousTxnID': '219D7A899BEF52A6C657B1FE3ED6DCAD7EDAF8BC6D1D279E358CDF6BAB5E5BA4',
'PreviousTxnLgrSeq': 39630970}}],
'TransactionIndex': 1,
'TransactionResult': 'tesSUCCESS',
'delivered_amount': '1000'},
'validated': True}

ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์ด์—ˆ๋‹ค๋ฉด, ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฐ๊ณผ๋Š” ์œ„์™€ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.