Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Technical Lecture on XRPL Workshop at WebX Asia

tequ
July 27, 2023

Technical Lecture on XRPL Workshop at WebX Asia

tequ

July 27, 2023
Tweet

More Decks by tequ

Other Decks in Programming

Transcript

  1. XRPレジャーとは XRP XRPLの開始時に1000億単位発行されたXRPレ ジャーのネイティブトークン 追加発行を行う機能/プログラムはなし XRPLを利用する上で必要となる手数料や準備金、 DEXにおけるブリッジ通貨として利用 バリデータによるオンレジャーのガバナンス投票に より手数料や機能の追加などが決定される XRPレジャー(XRPL)

    2011年から2012年にかけてBitcoinの初期コントリ ビュータを含む3人の開発者によって作られた分散 型のL1ブロックチェーン Bitcoin/Ethereumとは異なる独自のコンセンサスア ルゴリズムを採用 →PoW・PoSに対してPoA(Proof of Association) と呼ばれることも。 プロトコルネイティブなDEXやNFTなどの機能 →最小限のコントラクトリスク 5
  2. コンセンサス • XRP Ledger Consensus Protocol / Proof of Association

    ◦ 連合コンセンサスとも • 計算力や資金力によるパワーの偏りなし ◦ 上位3~4つ程度のマイナー /バリデータが共謀することで 悪意あるトランザクションがネットワークに取り込まれるリスクがない • バリデータが共同でトランザクションの選択・順番決定 ◦ トランザクションを選択するリーダーの選出は行わない • 各ノードは共謀しないと信頼するバリデータのリストを自由に設定 ◦ 選択するバリデータは誰かに強制されているものではない ◦ 多数のバリデータと大きく異なる選択をした場合はネットワークをフォローできなくなる恐れ • バリデータ間の合意と妥協の中でレジャーに含めるトランザクションの決定・バリデーションを行 う 7
  3. コンセンサス(PoW/PoS) 8 • PoW / PoS ◦ ネットワーク参加者は大きな力 (計算力・資金力)を持つ少数 のバリデータが共謀しないことを信じる

    • 参加者が誰とコンセンサスを取るかはネットワークが決定 する • バリデータが共謀を試みた場合、他の参加者はフォークす るしかない ◦ 力を持つバリデータの力を無視することができない
  4. コンセンサス(PoA) 10 • PoA ◦ ネットワーク参加者は自身が選択したバリデータが共謀し ないことを信じる • 参加者が誰とコンセンサスを取るかは参加者自身が決定 する

    • バリデータが共謀を試みた場合、参加者は自身が選択し たバリデータのリストからそのバリデータを削除 ◦ リストから削除することで自身へのバリデータの力を無視 することができる。
  5. レジャーオブジェクト • XRPL上のデータはレジャーオブジェクトによって表される • Account, DEXOffer, NFToken, NFTOffer, Multisig… •

    レジャーオブジェクトはトランザクションによってのみ追加・変更・削除可能 14 Map<ObjectID, Object>
  6. レジャーオブジェクト ヒューマンリーダブルなJSON形式 17 { "index": "AEBABA4FAC212BF28E0F9A9C3788A47B085557EC5D1429E7A8266FB859C863B3" "LedgerEntryType": "NFTokenOffer", "Owner": "rhRxL3MNvuKEjWjL7TBbZSDacb8PmzAd7m"

    , "NFTokenID": "00081B5825A08C22787716FA031B432EBBC1B101BB54875F0002D2A400000000" , "Flags": 1, "Amount": "1000000", "NFTokenOfferNode": "0", "OwnerNode": "17", "PreviousTxnID": "BFA9BE27383FA315651E26FDE1FA30815C5A5D0544EE10EC33D3E92532993769" , "PreviousTxnLgrSeq": 75443565, }
  7. レジャーオブジェクト 公開APIからレジャーオブジェクトは取得可能 18 { "command": "book_offers" , "taker_gets": { "currency":

    "XRP" }, "taker_pays": { "currency": "USD", "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B" }, "limit": 10 }
  8. レジャーオブジェクト 19 アカウント関連 AccountRoot DirectoryNode DepositPreauth SignerList Ticket トークン/DEX関連 RippleState

    Offer NFT関連 NFTokenOffer NFTokenPage Payment関連 Check Escrow PayChannel その他 Amendments FeeSettings LedgerHashes NegativeUNL
  9. トランザクションタイプ • トランザクションはアカウントから送信する • 他チェーンだとコントラクトが必要な処理も、これらのトランザクションを通じて直接実行可能 ◦ NFTやDEX取引など 21 { From:

    “0xf39fd6e5a…” , To: “0x5FbDB231567…” , nonce: 123, gas: 500000, data: nftContract .methods.mint… } { TransactionType : “NFTokenMint ”, Account: “rvYAfWj5gh67o…”, NFTokenTaxon : 1, TransferFee : 123, Flags: 8, URI: “697066733A2F2F62…”, } イーサリアム XRPレジャー
  10. トランザクションタイプ 22 アカウント関連 AccountSet AccountDelete DepositPreauth SetRegularKey SignerListSet TicketCreate トークン/DEX関連

    TrustSet OfferCreate OfferCancel NFT関連 NFTokenMint NFTokenCreateOffer NFTokenAcceptOffer NFTokenCancelOffer NFTokenBurn Payment関連 Payment CheckCreate CheckCash CheckCancel EscrowCreate EscrowFinish EscrowCancel PaymentChannelCreate PaymentChannelFund PaymentChannelClaim その他 EnableAmendment SetFee UNLModify
  11. 手数料と準備金 • 基本準備金 (Base Reserve) ◦ アカウントを利用するため (=AccountRootオブジェクト) ◦ 10XRP

    / 1アカウント ◦ アカウント削除 → 準備金の一部を取り戻せる • 所有者準備金 (Owner Reserve) ◦ 1つのレジャーオブジェクトを保有するため ◦ 2XRP /1オブジェクト ◦ オブジェクト削除 → 準備金を取り戻せる • 準備金の額はバリデータによるオンレジャーのガバナンス投票 によって決定 25 ◦ SetFeeトランザクション ◦ FeeSettingsオブジェクト
  12. アカウントの管理 アドレスの形式: rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh • マルチシグ ◦ 最大32アカウントでアカウントの操作 • レギュラーキー ◦

    他アドレスの秘密鍵でトランザクションへ署名 ◦ マスターキーの流出リスクを減らす • マスターキーの無効化 ◦ プロトコルでマルチシグを必須とする運用が可能 27 SignerListSet トランザクション SignerList オブジェクト SetRegularKey トランザクション AccountRoot オブジェクト AccountSet トランザクション AccountRoot オブジェクト
  13. ここまでのおさらい • コンセンサスの仕組み ◦ 資本力/資金力に依存しない ◦ コンセンサスを取りたい人とコンセンサスを取る • レジャーオブジェクト/トランザクションタイプ ◦

    XRPレジャーにおけるデータの表現 ◦ レジャーオブジェクトの操作 • 準備金と手数料 ◦ 一般ユーザは低手数料で利用でき、攻撃者に大きな攻撃コスト • アカウントの管理 ◦ プロトコルの機能で秘密鍵の運用方法を決定できる 28
  14. Payment: シンプルな直接支払い Paymentトランザクションを使用する XRP to XRPやXRP to Token、Token to Tokenのような支払い。

    • クロスカレンシー支払い • マルチホップ支払い • スワップなど 34 XRP XRP 送金人 受取人 JPY JPY Payment
  15. Payment: シンプルな支払い 38 { TransactionType : “Payment”, Account: “rf45yU9HDuzDWZYZPgSewG8TXZKemQjovS”, Destination

    : “rGUBJ3g4dSBB2n9QLVdYB2L9Ax1h6NVu2y”, Amount: “1000000”, // 1XRP } { TransactionType : “Payment”, Account: “rf45yU9HDuzDWZYZPgSewG8TXZKemQjovS”, Destination : “rGUBJ3g4dSBB2n9QLVdYB2L9Ax1h6NVu2y”, Amount: { issuer: “rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B”, currency: “USD”, value: “100” } } XRPの送信 トークンの送信
  16. Payment: シンプルな支払い 39 { TransactionType : “Payment”, Account: “rf45yU9HDuzDWZYZPgSewG8TXZKemQjovS”, Destination

    : “rGUBJ3g4dSBB2n9QLVdYB2L9Ax1h6NVu2y”, Amount: { issuer: “rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B”, currency: “USD”, value: “100” }, SendMax: { issuer: “rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B”, currency: “EUR”, value: “300” }, } クロスカレンシー送金
  17. Check: 小切手形式の後払い 41 { TransactionType : “CheckCreate” , Account: “rf45yU9HDuzDWZYZPgSewG8TXZKemQjovS”,

    Destination : “rGUBJ3g4dSBB2n9QLVdYB2L9Ax1h6NVu2y”, SendMax: “100000000”, // 100XRP Expiration: 570113521 } { TransactionType : “CheckCash” , Account: “rGUBJ3g4dSBB2n9QLVdYB2L9Ax1h6NVu2y”, CheckID: “838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334”, Amount: “90000000”, // 90XRP } Checkの作成 Checkの請求
  18. Paychan: 非同期の支払い • 個々の取引をオフチェーンで処理し、後々まとめて決済する。 43 XRP PayChan 送金人 受取人 XRP

    PaymentChannel Create PaymentChannel Claim PaymentChannel Fund 1000XRP オフチェーン Claimの送信 Claimの検証 10XRP, 2XRP,4XRP… 16XRP
  19. トークンの管理 • 規制要件準拠のための機能 ◦ 保有者制限 ▪ トークンが保有可能なアカウントを発行者が認可 ▪ 認可トラストライン ◦

    トークン凍結 ▪ 第三者間のトレード、送付を禁止する ◦ トークン回収(開発中) ◦ XRP/トークン入金制限 ▪ Paymentトランザクションによる入金を認可制とする • Checkなどでの入金は可能 ▪ DepositAuth 48
  20. DEX • 世界初のDEX ◦ 2012年のXRPL稼働当初から存在 • 無制限のペアとオンチェーンの注文情報 ◦ 注文情報はすべてチェーン上に公開情報として存在 ◦

    過去の約定情報も historicalデータから取得可能 • AutoBridgingによる最良レートの自動採用 ◦ USD->EURのトレードでUSD/XRP,XRP/EURの流動性も自動的に利用される。 51
  21. DEX 53 JPY USD DEX JPY/XRP DEX XRP/USD EUR ETH

    DEX ETH/XRP DEX XRP/EUR XRP プロトコルネイティブでXRPをブリッジ通貨とする仕組み
  22. DEX 54 { TransactionType : “OfferCreate” , Account: “rf45yU9HDuzDWZYZPgSewG8TXZKemQjovS”, Destination

    : “rGUBJ3g4dSBB2n9QLVdYB2L9Ax1h6NVu2y”, TakerPays: { issuer: “rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B”, currency: “USD”, value: “10” }, TakerGets: { issuer: “rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B”, currency: “JPY”, value: “1300” }, Flags: 131072 // tfImmediateOrCancel } DEX取引 USD → JPY
  23. DEX 56 { TransactionType : “Payment”, Account: “rf45yU9HDuzDWZYZPgSewG8TXZKemQjovS”, Destination :

    “rGUBJ3g4dSBB2n9QLVdYB2L9Ax1h6NVu2y”, Amount: { issuer: “rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B”, currency: “USD”, value: “100” }, SendMax: { issuer: “rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B”, currency: “EUR”, value: “300” }, Paths:[ [ { "currency": "XRP" }, { "currency": "USD", "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B" } ],[...],[...] ] } クロスカレンシー送金 PathFinding利用
  24. AMM • CLOBの流動性との統合 ◦ DEXトレードやクロスカレンシー送金時に AMMの流動性も自動的に利用される。 • 無制限のプールとプール毎のガバナンストークン (=LPToken) ◦

    手数料投票や連続オークションへの入札 • 連続オークション ◦ トレーダーは手数料無料の権利を競い合い、低ボラティリティでも裁定機会を得る ◦ トレーダー...ボラティリティ < プールの手数料 の場合でも収益 ◦ 流動性提供者…オークションの落札額による収益 • MEVなし ◦ バリデータを含め誰も任意の順番でトランザクションを並び替えることはできない。 ◦ 正規順序 57
  25. NFTokenPage NFTのミント 63 Alice NFTokenMint Create NFToken Owner Alice NFToken

    { TransactionType : “NFTokenMint” , Account: “rf45yU9HDuzDWZYZPgSewG8TXZKemQjovS”, NFTokenTaxon : 123, URI: strToHex(“ipfs://bafkreic4glsw7ncjhdfsxd…”) , Flags: 8, TransferFee : 1000, } Flags - tfBurnable(1): 発行者がバーン可能 - tfOnlyXRP(2): XRP取引のみ許可 - tfTransferable(8): 2次流通許可
  26. NFTの売買 64 Alice NFToken Offer Sell 100XRP Bob NFToken CreateOffer

    NFToken AcceptOffer Sell 100 XRP Owner Alice 100 XRP Owner Bob NFTokenPage NFToken NFTokenPage NFToken
  27. NFTのブローカー取引 65 Alice NFToken Offer Sell 100XRP Bob NFToken CreateOffer

    NFToken CreateOffer Sell 100 XRP 100 XRP MP Buy 105 XRP 5 XRP NFToken AcceptOffer NFToken Offer Buy 105XRP NFTokenPage NFToken NFTokenPage NFToken
  28. Hooks(開発中) • トランザクション送受信の前後へロジックを組み込む ◦ 支払いを行う前に・・・ ◦ 支払いを受け取った時に・・・ ◦ NFTを購入した時に・・・ ◦

    Hook実行用トランザクションを実行した時に・・・ • State操作 • ロジック内からトランザクション送信 ◦ 支払いを受けた時に NFTを転送 ◦ NFTを売却した時にトークンを売却 • パラメータやメモなどでHookにデータを渡す 67
  29. Hooks(開発中) • ユースケース ◦ XRP/トークン支払いの分配 ◦ ブラックリストによる支払いの拒否 ◦ DeFi etc…

    • WASMによるコーディング ◦ Assembly Script(TSライク)ライブラリ開発中 • Web IDE ◦ コード・テスト・デプロイ 68
  30. Hooks(開発中) 69 Alice Bob Hook • 1000XRPを超える支払いはブロック Pay 1500XRP Alice

    Bob Hook Pay 1000XRP • 支払いの一部を他アカウントへ送金 Charlie Pay 100XRP
  31. Hooks(開発中) 70 Alice Bob • Stateの登録や削除など Bob State Alice: xxx

    Bob: yyy Hook Regist / Delete 🔑 アカウントの秘密鍵の無効化を行い、 コントラクトアカウントとしての運用可能
  32. 開発者リソース • 開発者Discord ◦ “XRP Ledger Developers” • 5000人の参加者 •

    毎月のAMA • AMMやDEXなどの機能や目的毎に特化したチャンネル • 日本語チャンネル 75 xrpldevs.org