About XRPL
home

XRPL 핵심 기능별 샘플 코드(Typescript)

들어가며

1. XRPL (XRP Ledger)의 특징

XRPL(XRP Ledger)은 빠른 거래 확정성(Finality)과 낮은 수수료, 그리고 계정 기반 구조(AccountSet, TrustLine 등)라는 특유의 설계를 갖춘 블록체인입니다.
메인넷과 Devnet은 구조적으로 동일하지만, Devnet은 무료 발급 시드와 Faucet을 통한 테스트 자산 지급이 가능하며, 최신 기능들을 시험할 수 있어 이번 프로젝트에서는 Devnet 환경을 사용했습니다.

2. 해당 문서의 목적

각 기능(Amendment/기본 트랜잭션) 별로 폴더를 나누고, 해당 기능을 활용하는 짧고 명확한 시나리오 기반 코드 제공
복잡한 구현보다 직관적이고 학습 중심적인 코드 예시 제공에 초점을 맞춤.
XRPL 개발 입문자가 XRPL 주요 기능을 빠르게 이해하고 응용할 수 있는 학습 자료로 활용되도록 설계

3. 코드 및 콘솔 출력값의 구조

해당 프로젝트에서는 XRPL의 주요 기능들을 폴더 구조로 나누어, 각 기능들을 구성하는 짧고 명확한 시나리오 스크립트를 폴더에 배치했습니다.
폴더 내부 예제 코드는 복잡한 구현보다는 직관적인 학습과 테스트에 초점을 맞추어 코드의 구조를 통일했으며, 스크립트를 실행하면 트랜잭션 JSON 원문 로그가 함께 출력되도록 구성했습니다.
각 스크립트에서 사용될 코드의 구조는 다음과 같습니다 :
import dotenv from "dotenv" // import path from "path" //1. 필요한 모듈 import import { Client, Wallet, TrustSet as TrustSetTx } from "xrpl" // dotenv.config({ path: path.join(__dirname, "..", ".env") }) // 2. 환경변수 로드 모듈 export async function TrustSet() { // const client = new Client("wss://s.devnet.rippletest.net:51233") // 3. XRPL 연결 (Devnet) await client.connect() // const ADMIN_SEED = process.env.ADMIN_SEED // const USER_SEED = process.env.USER_SEED // 4. 환경변수에서 시드 불러오기 if (!ADMIN_SEED || !USER_SEED) throw new Error("Missing env: ADMIN_SEED, USER_SEED") const admin = Wallet.fromSeed(ADMIN_SEED.trim()) // const user = Wallet.fromSeed(USER_SEED.trim()) // 5. 불러온 시드로 지갑 연결 // TrustSet 트랜잭션 const tx: TrustSetTx = { // TransactionType: "TrustSet", // Account: user.address, // LimitAmount: { //6. 핵심부(메인 트랜잭션) currency: "USD", // issuer: admin.address, // value: "10000", // }, // } // try { const prepared = await client.autofill(tx) // const signed = user.sign(prepared) //7. 트랜잭션 서명 const result = await client.submitAndWait(signed.tx_blob) // console.log(JSON.stringify(result, null, 2)) //8. 트랜잭션 원문 콘솔에 출력 return result } finally { await client.disconnect() //9. XRPL 연결 해제 } } if (require.main === module) { TrustSet().catch((e) => { console.error(e) process.exit(1) }) }
TypeScript
복사
실행 후 출력되는 로그는 다음과 같습니다 :
# 확인할 부분(하단에 위치) "TransactionIndex": 0, "TransactionResult":"tesSUCCESS" # 트랜잭션 실행 결과 코드 (tesSUCCESS = 정상 처리 완료) }, "tx_json": { # 실제 제출된 트랜잭션 원문(JSON) "Account": "rnD149aGRA''", # 트랜잭션 서명/제출 계정 주소 "Fee": "1", # 수수료 (drops 단위, 1 drop = 0.000001 XRP) "Flags": 0, # 플래그 값 (0이면 특별한 설정 없음) "LastLedgerSequence": 5223890,# 이 Ledger Index까지만 유효 (그 이후에는 무효) "LimitAmount": { # 한도 설정 값(amount) "currency": "USD", # 통화 코드 "issuer": "rER8ArNF''" # 발행자 주소 "value": "10000" # 허용 한도 (여기선 10,000 USD) }, "Sequence": 4836822, # 계정의 현재 시퀀스 번호 "SigningPubKey": "EDEC88~", # 서명에 사용된 공개키 "TransactionType": "TrustSet",# 트랜잭션 타입 (TrustSet = 신용한도 설정) "TxnSignature": "3FD7E071~", # 서명 결과값 (트랜잭션 무결성 검증에 사용) "ctid": "C04FB5C000000002", # Compact Transaction ID "date": 808200681, # Ledger Epoch 기준 timestamp "ledger_index": 5223872 # 포함된 원장(Ledger) 번호 }, "validated": true # 해당 트랜잭션이 원장에 최종 반영되었는지 여부 }, "type": "response" }
Bash
복사
이를 통해 트랜잭션 타입(TxType), 계정(Account), 금액(Amount), 수수료(Fee) 등의 필드를 직접 확인할 수 있습니다. 각 스크립트 실행 로그에서 핵심적인 내용은 폴더별 README에 명시해 놓았습니다.
+이후 시나리오에 필요한 Sequence나 주소 등의 정보는 마지막에 강조되어 한번 더 출력됩니다.

4. 목적에 따른 문서 활용법

XRPL 개발이 처음이라면 : Quickstart를 먼저 따라한 뒤, Wallet, Payment, TrustSet 등의 기본적인 기능 먼저 테스트 -> 정상 동작 확인 후 다른 주요 기능 README를 따라 실행
특정 기능만 테스트하려면 : Quickstart를 따라한 뒤, 해당 기능 폴더의 README로 바로 이동해 시나리오 학습 후 실행
전체 흐름을 학습하려면 : Quickstart를 따라한 뒤 주요 기능 2~3개(ex. PermissionedDomains - Credential - PermissionedDEX) 를 조합해 테스트
이외의 기능들을 추가해 실험하려면 : Server - serverInfo 스크립트 실행 - 지원 기능 확인 후 xrpl.js 참고해 실험
현재 문서는 전체적인 맥락을 제공하며, 각 폴더별 문서는 기능별 상세 가이드와 실행 예시를 제공합니다. 본 문서는 향후 기능과 예제를 지속적으로 업데이트할 예정이며, 이를 통해 XRPL의 다양한 기능을 실습하고 응용할 수 있습니다.

Quickstart

# 0) 레포 클론 git clone https://github.com/jun637/XRPL.git cd XRPL # 1) 의존성 설치 npm install # 2) 서버 기능 확인 (선택) npx ts-node xrpl/Server/serverInfo.ts # 3) Devnet 지갑 생성 (Admin, User, User2 총 3개) npx ts-node xrpl/Wallet/createNewWallet.ts -> 여기서 출력되는 시드 값을 프로젝트 루트에 위치한 .env에 저장 # 4) faucet으로 자산 활성화 npx ts-node xrpl/Wallet/faucet.ts # 5) 지갑 정보 조회 npx ts-node xrpl/Wallet/WalletInfo.ts # 6) XRP 전송하기 (Admin -> User) npx ts-node xrpl/Payment/sendXRP.ts # 7) IOU 전송하기 (Admin -> User) npx ts-node xrpl/Payment/sendIOU.ts # 8) Trustline 설정하기 (User -> Admin) npx ts-node xrpl/TrustSet/TrustSet.ts # 9) AccountSet(계정 설정)하기 - 필수 아님 npx ts-node xrpl/AccountSet/AccountSet.ts
Bash
복사
지갑 생성 후 환경변수에 입력하는 방법
(.env파일은 루트에 생성되어 있어야 정상입니다.)
# 2) 시나리오 테스트에 필요한 지갑(Admin,User,User2 - 총 3개) 생성 후 출력되는 시드를 환경변수 파일(.env)에 기록 # 지갑 생성 후 환경변수 입력하는 방법 # 2-1. 아래 명령어를 터미널에 입력(총 3번 실행) npx ts-node xrpl/Wallet/createNewWallet.ts npx ts-node xrpl/Wallet/createNewWallet.ts npx ts-node xrpl/Wallet/createNewWallet.ts # 2-2. 1회 실행 시마다 아래와 같은 로그가 출력됨 주소: r"""""""""""""""""""""""""""""" 시드: sE""""""""""""""""""""""""""""" # <- 이 값 복사해서 프로젝트 루트의 .env 파일에 입력! 공개키: E"""""""""""""""""""""""""""" # 2-3. .env 파일 예시" # ADMIN_SEED="sEdXXXXXXXXXXXXXXXXX" <- 첫 번째 시드(Admin)" # USER_SEED="sEdYYYYYYYYYYYYYYYYY" <- 두 번째 시드(User)" # USER2_SEED="sEdZZZZZZZZZZZZZZZZ" <- 세 번째 시드(User2)
Bash
복사

전체 디렉토리 구조

xrpl/ ├── Wallet/ # 지갑 생성/관리 │ ├── createNewWallet.ts │ ├── faucet.ts │ ├── LoadWallet.ts │ └── WalletInfo.ts │ ├── Payment/ # XRP/IOU 송금 │ ├── sendIOU.ts │ └── sendXRP.ts │ ├── TrustSet/ # 신뢰선 설정 ├ ├── requireAuth.ts │ └── TrustSet.ts │ ├── AccountSet/ # 계정 옵션 설정 │ └── AccountSet.ts │ ├── Credential/ # Credential 발급/검증 │ ├── acceptCredential.ts │ ├── checkCredential.ts │ ├── createCredential.ts │ └── deleteCredential.ts │ ├── PermissionedDEX/ # 권한 기반 DEX │ ├── bookOffers.ts │ ├── cancelOffer.ts │ └── createPermissionedOffer.ts │ ├── PermissionedDomains/# Domain 기반 권한 관리 │ ├── AcceptedCredentials.ts │ ├── createDomain.ts │ └── deleteDomain.ts │ ├── TokenEscrow/ # 에스크로 │ ├── escrowCancel.ts │ ├── escrowCreateIOU.ts │ ├── escrowCreateMPT.ts │ └── escrowFinish.ts │ ├── MPTokensV1/ # Multi-Party Tokens (v1) │ ├── authorizeHolder.ts │ ├── createIssuance.ts │ ├── destroyIssuance.ts │ ├── sendMPT.ts │ └── setIssuance.ts │ ├── Batch/ # 배치 트랜잭션 │ ├── AllOrNothing.ts │ ├── Independent.ts │ ├── OnlyOne.ts │ └── UntilFailure.ts │ ├── Server/ # 서버 정보 확인 │ └── serverInfo.ts │ ├── AMM/ # AMM(유동성 풀) │ ├── AMMCreate.ts │ ├── AMMDeposit.ts │ ├── AMMWithdraw.ts │ ├── AMMSwap.ts │ ├── AMMVote.ts │ ├── AMMBid.ts │ ├── AMMDelete.ts │ ├── AMMClawback.ts │ ├── getAMMInfo.ts └──
Shell
복사

폴더명
주요 내용
README
Payment
XRP/IOU 전송
TrustSet
TrustLine 설정 (사용자 측) 및 발행자 승인(RequireAuth 시)
AccountSet
계정 설정 변경 (플래그)
Credentials
온체인 신원/권한 증명
PermissionedDomains
도메인 생성·정책 관리
PermissionedDex
도메인 규칙 적용된 DEX 거래
MPtokensV1
발행자 승인형 토큰 발행/전송
TokenEscrow
토큰 예치·해제
Batch
여러 트랜잭션을 하나의 Batch로 처리
Server
Rippe 노드 및 지원 기능 확인
AMM
DEX 구현 시 필요한 전반적인 AMM 기능

XRPL Devnet Explorer(트랜잭션 확인)

네트워크 / 버전

네트워크: XRPL Devnet (wss://s.devnet.rippletest.net:51233)
rippled 버전: 2.6.0
xrpl.js 버전: package.json 참조
Node.js: LTS 권장