About XRPL
home

TrustSet

주요 내용
TrustLine 설정 (사용자 측) 및 발행자 승인(RequireAuth 시)
폴더명
TrustSet

스크립트 실행 명령어

$npx ts-node xrpl/TrustSet/authorizeTrustLine.ts $npx ts-node xrpl/TrustSet/TrustSet.ts
Bash
복사

1. TrustSet

TrustSetIOU 신뢰선 생성/수정을 위한 트랜잭션이다.
특정 통화에 대해 수신 한도(limit) 를 설정하고, 발행자 정책(RequireAuth 등)에 따라 승인 흐름을 거칠 수 있다.
수신자(User): 발행자 IOU를 받기 위해 자신의 계정에 신뢰선 생성 (limit 설정)
발행자(Admin): RequireAuth를 켠 경우, 승인(allow) 을 통해 수신자 사용 허가(필수 아님!)
TrustSet을 취소하려면? : 발행된 토큰을 가지고 있는 사용자가 없어야 함, 즉 balance = 0으로 만들고, Limitamount = 0으로 설정한 TrustSet을 User가 Admin에게 보내면 됨

2. 왜 필요한가?

IOU 보유 전제: TrustLine 없으면 IOU 수취/보유 불가
정책 반영: RequireAuth, Freeze, QualityIn/Out 등 통화 정책과 연동
리스크 한도: 계정별 보유 한도 관리

3. 시나리오: TrustsetauthorizeTrustLine (RequireAuth)

Step 1. User 신뢰선 생성 (Trustset.ts)

주체: User
행동: TrustSet 트랜잭션 전송
내용:
LimitAmount: { currency, issuer, value }
필요 시 Quality/Flags 추가 가능
import dotenv from "dotenv" import path from "path" import { Client, Wallet, TrustSet as TrustSetTx } from "xrpl" // .env 파일 로드 (ADMIN_SEED, USER_SEED 필요) dotenv.config({ path: path.join(__dirname, "..", ".env") }) export async function TrustSet() { // XRPL Devnet에 연결 const client = new Client("wss://s.devnet.rippletest.net:51233") await client.connect() // 환경변수 확인 const ADMIN_SEED = process.env.ADMIN_SEED const USER_SEED = process.env.USER_SEED if (!ADMIN_SEED || !USER_SEED) throw new Error("Missing env: ADMIN_SEED, USER_SEED") // 1) Wallet 객체 생성 const admin = Wallet.fromSeed(ADMIN_SEED.trim()) // IOU 발행자(Admin) const user = Wallet.fromSeed(USER_SEED.trim()) // 수신자(User) // 2) TrustSet 트랜잭션 생성 const tx: TrustSetTx = { TransactionType: "TrustSet", Account: user.address, // 신뢰선을 설정하는 계정(User) LimitAmount: { currency: "USD", // 통화 코드 issuer: admin.address, // IOU 발행자 value: "10000", // 수신 허용 한도 }, } try { // 3) 트랜잭션 자동 완성 (수수료/시퀀스 채우기) const prepared = await client.autofill(tx) // 4) User 계정이 서명 const signed = user.sign(prepared) // 5) 네트워크에 제출 및 결과 대기 const result = await client.submitAndWait(signed.tx_blob) // 6) 결과 출력 console.log(JSON.stringify(result, null, 2)) return result } finally { // 연결 종료 await client.disconnect() } } // 직접 실행된 경우 실행 if (require.main === module) { TrustSet().catch((e) => { console.error(e) process.exit(1) }) }
TypeScript
복사

Step 2. 발행자 승인 (authorizeTrustLine.ts)

주체: Admin (발행자)
행동: admin의 계정 플래그가 RequireAuth일 때 특정 User 라인 승인
내용
TrustSet에서 발행자 Flags/Quality로 승인 표현
import 'dotenv/config' import { Client, Transaction, Wallet } from 'xrpl' async function allowTrust() { // XRPL Devnet 연결 const client = new Client('wss://s.devnet.rippletest.net:51233') await client.connect() // 환경 변수에서 Admin/User 시드 불러오기 const ADMIN_SEED = process.env.ADMIN_SEED const USER_SEED = process.env.USER_SEED if (!ADMIN_SEED || !USER_SEED) throw new Error('Missing env: ADMIN_SEED, USER_SEED') // 1) Wallet 객체 생성 const adminWallet = Wallet.fromSeed(ADMIN_SEED.trim()) // IOU 발행자 (RequireAuth 설정 계정) const userWallet = Wallet.fromSeed(USER_SEED.trim()) // IOU 수신자 // 2) 발행자의 승인(TrustSet with tfSetAuth) const tx : Transaction = { TransactionType: 'TrustSet', Account: adminWallet.address, // 발행자 (승인 주체) LimitAmount: { currency: 'USD', // 통화 코드 issuer: userWallet.address, // 승인할 User 주소 value: '0' // 승인 시 value=0 }, Flags: 0x00010000 // tfSetAuth (승인 플래그) } // 3) 트랜잭션 준비 const prepared = await client.autofill(tx) // 4) Admin이 서명 const signed = adminWallet.sign(prepared) // 5) 제출 및 결과 대기 const result = await client.submitAndWait(signed.tx_blob) // 6) 결과 출력 console.log(JSON.stringify(result, null, 2)) // 연결 종료 await client.disconnect() } // 직접 실행된 경우 실행 allowTrust().catch(e => { console.error(e) process.exit(1) })
TypeScript
복사
핵심은 RequireAuth 활성화 환경에서 수신자가 IOU를 받으려면 발행자 승인이 필요하다는 점.