들어가며

1. XRPL (XRP Ledger)의 특징


2. 해당 문서의 목적


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

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에 명시해 놓았습니다.