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)
})
}
# 확인할 부분(하단에 위치)
"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"
}
이를 통해 트랜잭션 타입(TxType), 계정(Account), 금액(Amount), 수수료(Fee) 등의 필드를 직접 확인할 수 있습니다. 각 스크립트 실행 로그에서 핵심적인 내용은 폴더별 README에 명시해 놓았습니다.