μν (Checks)
XRP Ledgerμ Checks κΈ°λ₯μ μ¬μ©μκ° λ°λ μ¬λμκ² μ·¨μνκ±°λ νκΈνν μ μλ μ§μ°λ κ²°μ λ₯Ό λ§λλ κ²μ κ°λ₯νκ² ν©λλ€. κ°μΈμ© μ’ μ΄ μνμ κ°μ΄, XRP Ledgerμ Checksλ μκΈμ 보λ΄λ μ¬λμ΄ κΈμ‘κ³Ό μλ ΉμΈμ μ§μ νλ Checkλ₯Ό λ§λλ κ²μΌλ‘ μμν©λλ€. μλ ΉμΈμ μμ μ κ³μ μΌλ‘ λ³΄λΈ μκΈμ λμ΄λ€μ΄κΈ° μν΄ μνλ₯Ό νκΈνν©λλ€. λ°λ μ¬λμ΄ μνλ₯Ό νκΈννκΈ° μ κΉμ§ λμ μ΄λνμ§ μμ΅λλ€. μνλ₯Ό λ§λ€ λ μκΈμ 보λ₯νμ§ μκΈ° λλ¬Έμ, λ³΄λΈ μ¬λμ΄ λ°λ μ¬λμ΄ κ·Έκ²μ νκΈννλ €κ³ ν λ μΆ©λΆν μκΈμ΄ μλ€λ©΄ μνλ₯Ό νκΈννλ κ²μ΄ μ€ν¨ν μ μμ΅λλ€. μν νκΈνκ° μ€ν¨νλ©΄, μνμ μμ μλ μνκ° λ§λ£λ λκΉμ§ μ¬μλν μ μμ΅λλ€.
XRP Ledger Checksμλ λ μ΄μ νκΈνν μ μλ λ§λ£ μκ°μ΄ μμ μ μμ΅λλ€. μμ μκ° λ§λ£ μ μ μ±κ³΅μ μΌλ‘ μνλ₯Ό νκΈννμ§ λͺ»νλ©΄, μνλ λ μ΄μ νκΈνν μ μμ§λ§, XRP Ledgerμ κ°μ²΄κ° λ¨μ μμ΅λλ€. λꡬλ μ§ λ§λ£ νμ μνλ₯Ό μ·¨μν μ μμ΅λλ€. λ§λ£ μ μλ λ³΄λΈ μ¬λκ³Ό λ°λ μ¬λλ§ μνλ₯Ό μ·¨μν μ μμ΅λλ€. λ³΄λΈ μ¬λμ΄ μ±κ³΅μ μΌλ‘ μνλ₯Ό νκΈννκ±°λ λκ΅°κ°κ° κ·Έκ²μ μ·¨μνλ©΄ μν κ°μ²΄λ Ledgerμμ μ κ±°λ©λλ€.
Checksλ Escrowμ Payment Channelsμ μΌλΆ μ μ¬μ±μ΄ μμ§λ§, μ΄λ¬ν κΈ°λ₯κ³Ό Checks μ¬μ΄μλ λͺ κ°μ§ μ€μν μ°¨μ΄μ μ΄ μμ΅λλ€:
- Checksλ‘ ν ν°μ λ³΄λΌ μ μμ΅λλ€. Payment Channelsμ Escrowλ‘λ XRPλ§ λ³΄λΌ μ μμ΅λλ€.
- Checksλ μ΄λ€ μκΈλ μ κ·Έκ±°λ μμ½νμ§ μμ΅λλ€. Payment Channelsμ Escrowμ κ΄λ ¨λ XRPλ λ³΄λΈ μ¬λμ΄ μ 곡ν μ²κ΅¬μ μν΄ (Payment Channels) νκΈνλκ±°λ, λ§λ£λ μνΈ μ‘°κ±΄μ μν΄ (Escrow) ν΄μ λ λκΉμ§ μ¬μ©ν μ μμ΅λλ€.
- Escrowλ₯Ό ν΅ν΄ μμ μκ² XRPλ₯Ό λ³΄λΌ μ μμ΅λλ€. μμ μκ² Checksλ₯Ό λ³΄λΌ μλ μμ΅λλ€.
Checksμ λͺ©μ β
μ ν΅μ μΈ μ’ μ΄ μνλ μ¬λλ€μ΄ μ€μ ν΅νλ₯Ό μ¦μ κ΅ννμ§ μκ³ λ μκΈμ μ΄μ²΄ν μ μκ² ν΄μ€λλ€. XRP Ledger Checksλ μ¬λλ€μ΄ μν μ κ³μμ μ΅μνκ² λ°μλ€μ¬μ§λ κ³Όμ μ μ¬μ©νμ¬ λΉλκΈ°μ μΌλ‘ μκΈμ κ΅νν μ μκ² ν©λλ€.
XRP Ledger Checksλ λν XRP Ledgerμ κ³ μ ν λ¬Έμ λ₯Ό ν΄κ²°ν©λλ€: μ¬μ©μκ° μμΉ μλ κ²°μ λ₯Ό κ±°λΆνκ±°λ κ²°μ μ μΌλΆλ§μ μλ½ν μ μκ² ν©λλ€. μ΄λ μ»΄νλΌμ΄μΈμ€ μ΄μ λ‘ κ²°μ λ₯Ό μ μ€νκ² λ°μμΌ νλ κΈ°κ΄λ€μκ² μ μ©ν©λλ€.
μ¬μ© μ¬λ‘: κ²°μ μΉμΈβ
λ¬Έμ : BSA, KYC, AML, and CFTμ κ°μ κ·μ μ μ€μνκΈ° μν΄, κΈμ΅ κΈ°κ΄μ λ°μ μκΈμ μΆμ²μ λν λ¬Έμλ₯Ό μ 곡ν΄μΌ ν©λλ€. μ΄λ¬ν κ·μ μ κΈ°κ΄μ΄ κ·Έλ€μ΄ μ²λ¦¬νλ λͺ¨λ κ²°μ μ μΆμ²μ λͺ©μ μ§λ₯Ό μμμΌ νλλ‘ νμ¬ λΆλ²μ μΈ μκΈ μ΄μ²΄λ₯Ό λ°©μ§νλ €κ³ ν©λλ€. XRP Ledgerμ μ±μ§λ‘ μΈν΄, λꡬλ μ§ μνλ κ²½μ° XRP (κ·Έλ¦¬κ³ νΉμ 쑰건 νμμ ν ν°)λ₯Ό κΈ°κ΄μ XRP Ledger κ³μ μΌλ‘ λ³΄λΌ μ μμ΅λλ€. μ΄λ¬ν μμΉ μλ κ²°μ λ₯Ό μ²λ¦¬νλ κ²μ μ΄λ¬ν κΈ°κ΄μ μ»΄νλΌμ΄μΈμ€ λΆμμ μλΉν λΉμ©κ³Ό μκ° μ§μ°μ μΆκ°νλ©°, μ μ¬μ μΌλ‘ λ²κΈμ΄λ μ μ¬λ₯Ό ν¬ν¨ν μ μμ΅λλ€.
ν΄κ²°μ±
: κΈ°κ΄μ AccountSet νΈλμμ
μμ asfDepositAuth
νλκ·Έλ₯Ό μ€μ νμ¬ κ·Έλ€μ XRP Ledger κ³μ μ Deposit Authorizationμ νμ±νν μ μμ΅λλ€. μ΄κ²μ κ³μ μ΄ κ²°μ νΈλμμ
μ λ°μ μ μκ² λ§λλλ€. Deposit Authorizationμ΄ νμ±νλ κ³μ μ μ€μ§ Escrow, Payment Channels, λλ Checksλ₯Ό ν΅ν΄μλ§ μκΈμ λ°μ μ μμ΅λλ€. Deposit Authorizationμ΄ νμ±νλ κ²½μ°, Checksλ μκΈμ μ΄μ²΄νλ κ°μ₯ κ°λ¨νκ³ μΉμνλ©° μ μ°ν λ°©λ²μ
λλ€.
μ¬μ©λ²β
XRP Ledgerμ Checksλ μλ κ·Έλ¦Όκ³Ό κ°μ μμ μ£ΌκΈ°λ₯Ό λ³΄ν΅ κ°μ§λλ€.
λ¨κ³ 1: 체ν¬λ₯Ό μμ±νκΈ° μν΄, λ°μ μλ [CheckCreate][] νΈλμμ
μ μ μΆνκ³ μμ μ(Destination
), λ§λ£ μκ°(Expiration
), κ·Έλ¦¬κ³ λ°μ μ κ³μ μμ μΈμΆλ μ μλ μ΅λ κΈμ‘(SendMax
)μ μ§μ ν©λλ€.
λ¨κ³ 2: CheckCreate νΈλμμ μ΄ μ²λ¦¬λ ν, XRP Ledger μμ Check κ°μ²΄κ° μμ±λ©λλ€. μ΄ κ°μ²΄λ κ·Έκ²μ μμ±ν νΈλμμ μ μν΄ μ μλ 체ν¬μ μμ±μ ν¬ν¨ν©λλ€. μ΄ κ°μ²΄λ λ§λ£ μκ°μ΄ μ§λκΈ° μ μ λ°μ μ(체ν¬λ₯Ό [CheckCancel][] νΈλμμ μΌλ‘ μ·¨μνλ κ²½μ°) λλ μμ μ(체ν¬λ₯Ό μ·¨μνκ±°λ νκΈννλ κ²½μ°)μ μν΄μλ§ λ³κ²½λ μ μμ΅λλ€. λ§λ£ μκ°μ΄ μ§λ νμλ λꡬλ μ§ μ²΄ν¬λ₯Ό μ·¨μν μ μμ΅λλ€.
λ¨κ³ 3: 체ν¬λ₯Ό νκΈννκΈ° μν΄, μμ μλ [CheckCash][] νΈλμμ μ μ μΆν©λλ€. μμ μλ 체ν¬λ₯Ό νκΈννλ λ κ°μ§ μ΅μ μ΄ μμ΅λλ€:
Amount
β μμ μλ μ΄ μ΅μ μ μ¬μ©νμ¬ νκΈνν μ νν κΈμ‘μ μ§μ ν μ μμ΅λλ€. μ΄λ λ°μ μκ° κ°λ₯ν μ΄μ²΄ μμλ£λ₯Ό 컀λ²νκΈ° μν΄ μ²΄ν¬λ₯Ό ν¨λ©νκ³ μμ μκ° μ‘μ₯μ΄λ λ€λ₯Έ κ³μ½μ λͺ μλ μ νν κΈμ‘μ λ°μλ€μ΄κΈ° μνλ κ²½μ°μ μ μ©ν μ μμ΅λλ€.DeliverMin
β μμ μλ μ΄ μ΅μ μ μ¬μ©νμ¬ μ²΄ν¬μμ λ°μ μ΅μ κΈμ‘μ μ§μ ν μ μμ΅λλ€. μμ μκ° μ΄ μ΅μ μ μ¬μ©νλ©΄, XRP Ledgerλ κ°λ₯ν λ§μ΄ μ λ¬νλ €κ³ μλνκ³ νμ μ μ΄λ μ΄ κΈμ‘μ μ λ¬ν©λλ€. μμ μμκ² μ κΈλ μ μλ κΈμ‘μ΄ μμ²ν κΈμ‘ μ΄μμ΄ μλλΌλ©΄, νΈλμμ μ μ€ν¨ν©λλ€.
λ°μ μκ° μ²΄ν¬λ₯Ό 컀λ²ν μΆ©λΆν μκΈμ κ°μ§κ³ μκ³ λ§λ£ μκ°μ΄ μμ§ μ§λμ§ μμλ€λ©΄, μκΈμ λ°μ μμ κ³μ μμ μ°¨κ°λκ³ μμ μμ κ³μ μΌλ‘ μ κΈλλ©°, μ²΄ν¬ κ°μ²΄λ νκ΄΄λ©λλ€.
λ§λ£ κ²½μ°β
λ§λ£μ κ²½μ°, 체ν¬λ μλ κ·Έλ¦Όκ³Ό κ°μ μμ μ£ΌκΈ°λ₯Ό κ°μ§λλ€.
λͺ¨λ 체ν¬λ λμΌν λ°©μμΌλ‘ μμνλ―λ‘ λ¨κ³ 1κ³Ό 2λ λμΌν©λλ€.
λ¨κ³ 3a: μμ μκ° μ²΄ν¬λ₯Ό νκΈννκΈ° μ μ 체ν¬κ° λ§λ£λ κ²½μ°, 체ν¬λ λ μ΄μ νκΈνλ μ μμ§λ§ κ°μ²΄λ Ledgerμ λ¨μ μμ΅λλ€.
λ¨κ³ 4a: 체ν¬κ° λ§λ£λ νμλ λꡬλ μ§ [CheckCancel][] νΈλμμ μ μ μΆνμ¬ μ·¨μν μ μμ΅λλ€. κ·Έ νΈλμμ μ 체ν¬λ₯Ό Ledgerμμ μ κ±°ν©λλ€.
체ν¬μ JSON ννβ
체ν¬μ JSON ννμ λ€μκ³Ό κ°μ΅λλ€:
{
"Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn",
"TransactionType": "CheckCreate",
"Fee": "12",
"SendMax": "100000000",
"Destination": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX",
"Expiration": 570113521,
"InvoiceID": "46060241FABCF692D4D934BA2A6C442898318206E51EDE1F824F300A",
"DestinationTag": 1,
"Sequence": 2
}
μ΄ JSON μ½λλ XRP Ledgerμμ Checkλ₯Ό μμ±νλ TransactionTypeμΈ
CheckCreate
λ₯Ό μ¬μ©νκ³ μμ΅λλ€. Account
λ 체ν¬λ₯Ό λ§λλ κ³μ μ, Destination
μ 체ν¬λ₯Ό λ°λ κ³μ μ λνλ
λλ€. SendMax
λ 체ν¬μμ μΈμΆν μ μλ μ΅λ κΈμ‘μ λνλ
λλ€. Expiration
μ 체ν¬κ° λ§λ£λλ μκ°μ λνλ΄λ©°, μ΄ μκ° μ΄νλ‘λ 체ν¬λ₯Ό μΈμΆν μ μμ΅λλ€. InvoiceID
λ 체ν¬μ μ°κ²°λ μ‘μ₯μ IDλ₯Ό, DestinationTag
λ λͺ©μ μ§ κ³μ μ λν μΆκ° μ 보λ₯Ό λνλ
λλ€. Sequence
λ ν΄λΉ κ³μ μμ λͺ λ²μ§Έ νΈλμμ
μΈμ§λ₯Ό λνλ
λλ€.
μ²΄ν¬ κ΄λ ¨ νΈλμμ νμ β
체ν¬μ κ΄λ ¨λ νΈλμμ
μ μΈ κ°μ§ νμ
μ΄ μμ΅λλ€: CheckCreate
, CheckCash
, CheckCancel
. κ° νΈλμμ
νμ
μ μ¬μ© λ°©λ²κ³Ό μ£Όμ μ¬νμ λν΄ μμΈν μμλ΄
μλ€.
CheckCreateβ
CheckCreate
νΈλμμ
μ μ¬μ©νλ©΄ 체ν¬λ₯Ό λ§λ€ μ μμ΅λλ€. 체ν¬λ₯Ό λ§λ€κΈ° μν΄μλ λ€μκ³Ό κ°μ μ λ³΄κ° νμν©λλ€:
Account
: 체ν¬λ₯Ό λ§λλ κ³μ μ μ£Όμμ λλ€.Destination
: 체ν¬λ₯Ό λ°λ κ³μ μ μ£Όμμ λλ€.SendMax
: 체ν¬μμ μΈμΆν μ μλ μ΅λ κΈμ‘μ λλ€. μ΄ κΈμ‘μ XRP λλ νΉμ ν΅νλ‘ μ§μ ν μ μμ΅λλ€.Expiration
(μ νμ¬ν) : 체ν¬κ° λ§λ£λλ μκ°μ λνλ΄λ 리ν νμμ€ν¬νμ λλ€.InvoiceID
(μ νμ¬ν) : 체ν¬μ μ°κ²°λ μ‘μ₯μ IDμ λλ€.SourceTag
(μ νμ¬ν) : μλ³Έ κ³μ μ λν μΆκ° μ 보λ₯Ό λνλ΄λ μ«μμ λλ€.DestinationTag
(μ νμ¬ν) : λͺ©μ μ§ κ³μ μ λν μΆκ° μ 보λ₯Ό λνλ΄λ μ«μμ λλ€.
CheckCashβ
CheckCash
νΈλμμ
μ μ¬μ©νλ©΄ 체ν¬λ₯Ό νκΈνν μ μμ΅λλ€. 체ν¬λ₯Ό νκΈννκΈ° μν΄μλ λ€μκ³Ό κ°μ μ λ³΄κ° νμν©λλ€:
Account
: 체ν¬λ₯Ό νκΈννλ κ³μ μ μ£Όμμ λλ€. μ΄ κ³μ μ 체ν¬μ μμ·¨μΈμ΄μ΄μΌ ν©λλ€.CheckID
: νκΈνν 체ν¬μ IDμ λλ€.Amount
(μ νμ¬ν) : 체ν¬μμ μΈμΆνλ €λ κΈμ‘μ λλ€. μ΄ νλλ₯Ό μ§μ νμ§ μμΌλ©΄DeliverMin
νλλ₯Ό μ§μ ν΄μΌ ν©λλ€.DeliverMin
(μ νμ¬ν) : 체ν¬μμ λ°μλ€μΌ μ΅μ κΈμ‘μ λλ€. μ΄ νλλ₯Ό μ§μ νμ§ μμΌλ©΄Amount
νλλ₯Ό μ§μ ν΄μΌ ν©λλ€.
CheckCancelβ
CheckCancel
νΈλμμ
μ μ¬μ©νλ©΄ 체ν¬λ₯Ό μ·¨μν μ μμ΅λλ€. 체ν¬λ₯Ό μ·¨μνκΈ° μν΄μλ λ€μκ³Ό κ°μ μ λ³΄κ° νμν©λλ€:
Account
: 체ν¬λ₯Ό μ·¨μνλ κ³μ μ μ£Όμμ λλ€. μ΄ κ³μ μ 체ν¬μ μ‘μ μμ΄κ±°λ λ§λ£λ 체ν¬μ μμ·¨μΈμ΄μ΄μΌ ν©λλ€.CheckID
: μ·¨μν 체ν¬μ IDμ λλ€.
μ½λ ꡬνβ
XRP Ledgerμμ Checkλ₯Ό μ¬μ©νλ μλ리μ€λ₯Ό λ€μκ³Ό κ°μ΄ κ°μ νμ¬ μ½λλ‘ κ΅¬νν΄λ³΄κ² μ΅λλ€.
- Aliceλ Bobμκ² 50 XRPλ₯Ό λ³΄λΌ μνλ₯Ό μμ±ν©λλ€.
- Aliceλ μνλ₯Ό XRPLμ μ μ‘ν©λλ€.
- a. Bobμ μνλ₯Ό νμΈνκ³ νκΈμΌλ‘ κ΅νν©λλ€.
b. Alice λλ Bobμ΄ μνλ₯Ό μ·¨μν©λλ€.
μν μμ±β
from xrpl.models.transactions import CheckCreate
from xrpl.wallet import Wallet
from xrpl.clients import JsonRpcClient
from xrpl.transaction import (
safe_sign_and_autofill_transaction,
safe_sign_and_submit_transaction,
)
JSON_RPC_URL = "https://s.altnet.rippletest.net:51234" # Ripple testnet JSON-RPC URL
alice_wallet = Wallet(seed="alice's seed", sequence=1) # Alice's wallet
bob_address = "bob's address" # Bob's address
client = JsonRpcClient(JSON_RPC_URL)
# Alice creates a check
check_create = CheckCreate(
account=alice_wallet.classic_address,
sequence=alice_wallet.sequence,
destination=bob_address,
send_max="50000000", # 50 XRP
)
# Alice signs and submits the CheckCreate transaction
response = safe_sign_and_submit_transaction(check_create, alice_wallet, client)
print(response.result["engine_result"]) # Output: tesSUCCESS
μν νκΈνβ
from xrpl.models.transactions import CheckCash
from xrpl.core.binarycodec import encode_for_signing_check_cash
bob_wallet = Wallet(seed="bob's seed", sequence=1) # Bob's wallet
check_id = response.result["hash"] # Check's ID
# Bob cashes the check
check_cash = CheckCash(
account=bob_wallet.classic_address,
sequence=bob_wallet.sequence,
check_id=check_id,
amount="50000000", # 50 XRP
)
# Bob signs and submits the CheckCash transaction
response = safe_sign_and_submit_transaction(check_cash, bob_wallet, client)
print(response.result["engine_result"]) # Output: tesSUCCESS
μν μ·¨μβ
from xrpl.models.transactions import CheckCancel
# Alice cancels the check
check_cancel = CheckCancel(
account=alice_wallet.classic_address,
sequence=alice_wallet.sequence,
check_id=check_id, # ID of the check to be cancelled
)
# Alice signs and submits the CheckCancel transaction
response = safe_sign_and_submit_transaction(check_cancel, alice_wallet, client)
print(response.result["engine_result"]) # Output: tesSUCCESS