•
XRPL Ledger : xrpl.js - Trustset(공식 Docs)
스크립트 실행 명령어
$npx ts-node xrpl/TrustSet/authorizeTrustLine.ts
$npx ts-node xrpl/TrustSet/TrustSet.ts
Bash
복사
1. TrustSet
TrustSet은 IOU 신뢰선 생성/수정을 위한 트랜잭션이다.
특정 통화에 대해 수신 한도(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. 시나리오: Trustset → authorizeTrustLine (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를 받으려면 발행자 승인이 필요하다는 점.

