Slide 1

Slide 1 text

XRPLハンズオン講座

Slide 2

Slide 2 text

自己紹介 Q / tequ 2017年からクリプトの世界へ アカウントの残高追跡アプリや XRPL NFTマーケットプレイスなどを作成 @_tequ_ 2

Slide 3

Slide 3 text

Agenda ● XRPレジャーとは ● コンセンサスの仕組み ● レジャーオブジェクトとトランザクションタイプ ● 手数料と準備金 ● アカウントの管理 ● XRPレジャーの機能 ● 開発者リソース ● ワークショップ 3

Slide 4

Slide 4 text

XRPレジャーとは 4

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

コンセンサスの仕組み How Consensus Works

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

コンセンサス(PoW/PoS) 8 ● PoW / PoS ○ ネットワーク参加者は大きな力 (計算力・資金力)を持つ少数 のバリデータが共謀しないことを信じる ● 参加者が誰とコンセンサスを取るかはネットワークが決定 する ● バリデータが共謀を試みた場合、他の参加者はフォークす るしかない ○ 力を持つバリデータの力を無視することができない

Slide 9

Slide 9 text

コンセンサス(PoW/PoW) 9

Slide 10

Slide 10 text

コンセンサス(PoA) 10 ● PoA ○ ネットワーク参加者は自身が選択したバリデータが共謀し ないことを信じる ● 参加者が誰とコンセンサスを取るかは参加者自身が決定 する ● バリデータが共謀を試みた場合、参加者は自身が選択し たバリデータのリストからそのバリデータを削除 ○ リストから削除することで自身へのバリデータの力を無視 することができる。

Slide 11

Slide 11 text

コンセンサス(PoA) 11 各ユーザがコンセンサスを取りたいリストが似ていれば 1つのネットワークとして機能する。 同一のコンセンサス達成を望む参加者 の意志で影響力を持つバリデータも変わる 太郎 二郎 花子 春子 夏子 秋子 太郎 二郎 花子 春子 夏子 冬子 太郎 二郎 花子 夏子 秋子 冬子 一郎 二郎 花子 春子 夏子 秋子

Slide 12

Slide 12 text

コンセンサス(PoA) 12 異なるコンセンサスを達成しようとすると別のネットワークを形成する可能性が生まれる どのネットワークに参加するかはバリデータの自由、コンセンサスを取りたい方を選択 太郎 二郎 花子 春子 夏子 秋子 太郎 二郎 花子 春子 夏子 冬子 太郎 二郎 花子 夏子 秋子 冬子 三郎 四郎 五郎 花男 丸子 季子

Slide 13

Slide 13 text

レジャーオブジェクトと トランザクションタイプ Ledger Object and Transaction Type

Slide 14

Slide 14 text

レジャーオブジェクト ● XRPL上のデータはレジャーオブジェクトによって表される ● Account, DEXOffer, NFToken, NFTOffer, Multisig… ● レジャーオブジェクトはトランザクションによってのみ追加・変更・削除可能 14 Map

Slide 15

Slide 15 text

レジャーオブジェクト 15 Global AccountRoot Offer NFTokenPage RippleState DirectoryNode SignerList 定義済みのオブジェクトを利用 NFTokenOffer

Slide 16

Slide 16 text

NFTokenPage RippleState Offer レジャーオブジェクト 16 AccountRoot DirectoryNode アカウントの所有オブジェクト DirectoryNode Offer RippleState NFTokenPage Offer Offer Offer 特定ペアのDEX板情報

Slide 17

Slide 17 text

レジャーオブジェクト ヒューマンリーダブルなJSON形式 17 { "index": "AEBABA4FAC212BF28E0F9A9C3788A47B085557EC5D1429E7A8266FB859C863B3" "LedgerEntryType": "NFTokenOffer", "Owner": "rhRxL3MNvuKEjWjL7TBbZSDacb8PmzAd7m" , "NFTokenID": "00081B5825A08C22787716FA031B432EBBC1B101BB54875F0002D2A400000000" , "Flags": 1, "Amount": "1000000", "NFTokenOfferNode": "0", "OwnerNode": "17", "PreviousTxnID": "BFA9BE27383FA315651E26FDE1FA30815C5A5D0544EE10EC33D3E92532993769" , "PreviousTxnLgrSeq": 75443565, }

Slide 18

Slide 18 text

レジャーオブジェクト 公開APIからレジャーオブジェクトは取得可能 18 { "command": "book_offers" , "taker_gets": { "currency": "XRP" }, "taker_pays": { "currency": "USD", "issuer": "rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B" }, "limit": 10 }

Slide 19

Slide 19 text

レジャーオブジェクト 19 アカウント関連 AccountRoot DirectoryNode DepositPreauth SignerList Ticket トークン/DEX関連 RippleState Offer NFT関連 NFTokenOffer NFTokenPage Payment関連 Check Escrow PayChannel その他 Amendments FeeSettings LedgerHashes NegativeUNL

Slide 20

Slide 20 text

トランザクションタイプ ● レジャーオブジェクトを変更するための操作 ● 送金、DEX取引、NFT取引、アカウント削除など 20 Offer OfferCreate Payment AccountRoot Alice: 100XRP AccountRoot Alice: 200XRP AccountRoot Bob: 1000XRP AccountRoot Bob: 900XRP Create +100XRP -100XRP

Slide 21

Slide 21 text

トランザクションタイプ ● トランザクションはアカウントから送信する ● 他チェーンだとコントラクトが必要な処理も、これらのトランザクションを通じて直接実行可能 ○ 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レジャー

Slide 22

Slide 22 text

トランザクションタイプ 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

Slide 23

Slide 23 text

手数料と準備金 Fee and Reserves

Slide 24

Slide 24 text

手数料と準備金 ● トランザクション手数料 ● 準備金 24 安い 0.001円くらい 高負荷時に高騰 データの保有コスト 保有しなくなったら 返還

Slide 25

Slide 25 text

手数料と準備金 ● 基本準備金 (Base Reserve) ○ アカウントを利用するため (=AccountRootオブジェクト) ○ 10XRP / 1アカウント ○ アカウント削除 → 準備金の一部を取り戻せる ● 所有者準備金 (Owner Reserve) ○ 1つのレジャーオブジェクトを保有するため ○ 2XRP /1オブジェクト ○ オブジェクト削除 → 準備金を取り戻せる ● 準備金の額はバリデータによるオンレジャーのガバナンス投票 によって決定 25 ○ SetFeeトランザクション ○ FeeSettingsオブジェクト

Slide 26

Slide 26 text

アカウントの管理 Manage Accounts

Slide 27

Slide 27 text

アカウントの管理 アドレスの形式: rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh ● マルチシグ ○ 最大32アカウントでアカウントの操作 ● レギュラーキー ○ 他アドレスの秘密鍵でトランザクションへ署名 ○ マスターキーの流出リスクを減らす ● マスターキーの無効化 ○ プロトコルでマルチシグを必須とする運用が可能 27 SignerListSet トランザクション SignerList オブジェクト SetRegularKey トランザクション AccountRoot オブジェクト AccountSet トランザクション AccountRoot オブジェクト

Slide 28

Slide 28 text

ここまでのおさらい ● コンセンサスの仕組み ○ 資本力/資金力に依存しない ○ コンセンサスを取りたい人とコンセンサスを取る ● レジャーオブジェクト/トランザクションタイプ ○ XRPレジャーにおけるデータの表現 ○ レジャーオブジェクトの操作 ● 準備金と手数料 ○ 一般ユーザは低手数料で利用でき、攻撃者に大きな攻撃コスト ● アカウントの管理 ○ プロトコルの機能で秘密鍵の運用方法を決定できる 28

Slide 29

Slide 29 text

Agenda ● XRPレジャーとは ● コンセンサスの仕組み ● レジャーオブジェクトとトランザクションタイプ ● 手数料と準備金 ● アカウントの管理 ● XRPレジャーの機能 29

Slide 30

Slide 30 text

XRPレジャーの機能 30

Slide 31

Slide 31 text

31 DeFi Tokenization NFT Payment Hooks

Slide 32

Slide 32 text

Payment Smart Payment features

Slide 33

Slide 33 text

Payment 33 Paychan Escrow Check Payment Payment: シンプルな直接支払い 小切手形式の後払い 条件付きの後払い 非同期の支払い

Slide 34

Slide 34 text

Payment: シンプルな直接支払い Paymentトランザクションを使用する XRP to XRPやXRP to Token、Token to Tokenのような支払い。 ● クロスカレンシー支払い ● マルチホップ支払い ● スワップなど 34 XRP XRP 送金人 受取人 JPY JPY Payment

Slide 35

Slide 35 text

Payment: シンプルな支払い ● クロスカレンシー支払い 相手に届けるトークンを保有していなくても、別のトークンを DEXを利用して自動変換する 35 JPY USD DEX JPY/USD 送金人 受取人 Payment

Slide 36

Slide 36 text

Payment: シンプルな支払い ● マルチホップ支払い 複数のDEXペアを経由して最良のレートでの取引を行う。 36 JPY USD DEX JPY/EUR 送金人 受取人 DEX XRP/USD DEX EUR/XRP Payment

Slide 37

Slide 37 text

Payment: シンプルな支払い ● スワップ 自身の保有するトークンを別のトークンへ変換する 37 JPY USD DEX JPY/USD 送金人 Payment

Slide 38

Slide 38 text

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の送信 トークンの送信

Slide 39

Slide 39 text

Payment: シンプルな支払い 39 { TransactionType : “Payment”, Account: “rf45yU9HDuzDWZYZPgSewG8TXZKemQjovS”, Destination : “rGUBJ3g4dSBB2n9QLVdYB2L9Ax1h6NVu2y”, Amount: { issuer: “rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B”, currency: “USD”, value: “100” }, SendMax: { issuer: “rvYAfWj5gh67oV6fW32ZzP3Aw4Eubs59B”, currency: “EUR”, value: “300” }, } クロスカレンシー送金

Slide 40

Slide 40 text

Check: 小切手形式の後払い ● 送金人が送金したタイミングではなく、受取人の任意のタイミングで送金を受け取る ● 送金人の指定額を上限に任意の金額を受け取れる。 40 JPY Check 100XRP 送金人 受取人 Check JPY CheckCreate CheckCash 90XRP JPY

Slide 41

Slide 41 text

Check: 小切手形式の後払い 41 { TransactionType : “CheckCreate” , Account: “rf45yU9HDuzDWZYZPgSewG8TXZKemQjovS”, Destination : “rGUBJ3g4dSBB2n9QLVdYB2L9Ax1h6NVu2y”, SendMax: “100000000”, // 100XRP Expiration: 570113521 } { TransactionType : “CheckCash” , Account: “rGUBJ3g4dSBB2n9QLVdYB2L9Ax1h6NVu2y”, CheckID: “838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334”, Amount: “90000000”, // 90XRP } Checkの作成 Checkの請求

Slide 42

Slide 42 text

Escrow: 条件付きの支払い ● 時間条件や暗号条件などの指定条件を満たした場合のみ支払いを完了する 42 XRP Escrow ❔ 送金人 受取人 Escrow ✅ XRP EscrowCreate EscrowFinish 条件を満たす 100XRP 100XRP

Slide 43

Slide 43 text

Paychan: 非同期の支払い ● 個々の取引をオフチェーンで処理し、後々まとめて決済する。 43 XRP PayChan 送金人 受取人 XRP PaymentChannel Create PaymentChannel Claim PaymentChannel Fund 1000XRP オフチェーン Claimの送信 Claimの検証 10XRP, 2XRP,4XRP… 16XRP

Slide 44

Slide 44 text

Tokenization Advanced token management features

Slide 45

Slide 45 text

Tokenization 45 トークン発行 トークン管理

Slide 46

Slide 46 text

トークンの発行 ● “トラストライン”という仕組みで 残高を管理 ● 事前にトラストラインを設定している場合のみトークンを保有可能 ○ →スキャムトークンが送信されない 46 JPY 発行者 ユーザ JPY トラストライン -100 +100 -2000 +2000

Slide 47

Slide 47 text

トークンの発行 ● “トラストライン”が設定されていればPaymentトランザクションでトークンを送信可能 47 JPY 発行者 ユーザ トラストライン -300 +300 Payment 300 JPY

Slide 48

Slide 48 text

トークンの管理 ● 規制要件準拠のための機能 ○ 保有者制限 ■ トークンが保有可能なアカウントを発行者が認可 ■ 認可トラストライン ○ トークン凍結 ■ 第三者間のトレード、送付を禁止する ○ トークン回収(開発中) ○ XRP/トークン入金制限 ■ Paymentトランザクションによる入金を認可制とする ● Checkなどでの入金は可能 ■ DepositAuth 48

Slide 49

Slide 49 text

DeFi Built-in decentralized finance

Slide 50

Slide 50 text

DeFi ● 通貨ペア毎に単一の流動性 ● CLOBとAMMの流動性の統合 ● AutoBridgingによる流動性の向上 50 CLOB AMM (開発中)

Slide 51

Slide 51 text

DEX ● 世界初のDEX ○ 2012年のXRPL稼働当初から存在 ● 無制限のペアとオンチェーンの注文情報 ○ 注文情報はすべてチェーン上に公開情報として存在 ○ 過去の約定情報も historicalデータから取得可能 ● AutoBridgingによる最良レートの自動採用 ○ USD->EURのトレードでUSD/XRP,XRP/EURの流動性も自動的に利用される。 51

Slide 52

Slide 52 text

DEX ● AutoBridging ○ 暗黙的にXRPをブリッジ通貨とするパスを利用 52 JPY USD DEX JPY/XRP DEX XRP/USD DEX JPY/USD XRP

Slide 53

Slide 53 text

DEX 53 JPY USD DEX JPY/XRP DEX XRP/USD EUR ETH DEX ETH/XRP DEX XRP/EUR XRP プロトコルネイティブでXRPをブリッジ通貨とする仕組み

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

DEX ● PathFinding ○ WebsocketAPIで継続的に最良パスを検索可能 55 JPY USD DEX JPY/XRP DEX XRP/USD DEX JPY/USD DEX JPY/BTC DEX BTC/EUR DEX EUR/USD

Slide 56

Slide 56 text

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利用

Slide 57

Slide 57 text

AMM ● CLOBの流動性との統合 ○ DEXトレードやクロスカレンシー送金時に AMMの流動性も自動的に利用される。 ● 無制限のプールとプール毎のガバナンストークン (=LPToken) ○ 手数料投票や連続オークションへの入札 ● 連続オークション ○ トレーダーは手数料無料の権利を競い合い、低ボラティリティでも裁定機会を得る ○ トレーダー...ボラティリティ < プールの手数料 の場合でも収益 ○ 流動性提供者…オークションの落札額による収益 ● MEVなし ○ バリデータを含め誰も任意の順番でトランザクションを並び替えることはできない。 ○ 正規順序 57

Slide 58

Slide 58 text

AMM 58 JPY USD CLOB+AMM JPY/XRP CLOB+AMM XRP/USD CLOB +AMM JPY/USD XRP

Slide 59

Slide 59 text

AMM 59

Slide 60

Slide 60 text

AMM 60

Slide 61

Slide 61 text

NFT Easy-to-use NFT features

Slide 62

Slide 62 text

NFToken 62 コントラクト開発 不要 フラグによる SBT指定 強制力のある ロイヤリティ 個人間の直接売買 MP向けの ブローカー取引

Slide 63

Slide 63 text

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次流通許可

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

Hooks Small, efficient piece of code

Slide 67

Slide 67 text

Hooks(開発中) ● トランザクション送受信の前後へロジックを組み込む ○ 支払いを行う前に・・・ ○ 支払いを受け取った時に・・・ ○ NFTを購入した時に・・・ ○ Hook実行用トランザクションを実行した時に・・・ ● State操作 ● ロジック内からトランザクション送信 ○ 支払いを受けた時に NFTを転送 ○ NFTを売却した時にトークンを売却 ● パラメータやメモなどでHookにデータを渡す 67

Slide 68

Slide 68 text

Hooks(開発中) ● ユースケース ○ XRP/トークン支払いの分配 ○ ブラックリストによる支払いの拒否 ○ DeFi etc… ● WASMによるコーディング ○ Assembly Script(TSライク)ライブラリ開発中 ● Web IDE ○ コード・テスト・デプロイ 68

Slide 69

Slide 69 text

Hooks(開発中) 69 Alice Bob Hook ● 1000XRPを超える支払いはブロック Pay 1500XRP Alice Bob Hook Pay 1000XRP ● 支払いの一部を他アカウントへ送金 Charlie Pay 100XRP

Slide 70

Slide 70 text

Hooks(開発中) 70 Alice Bob ● Stateの登録や削除など Bob State Alice: xxx Bob: yyy Hook Regist / Delete 🔑 アカウントの秘密鍵の無効化を行い、 コントラクトアカウントとしての運用可能

Slide 71

Slide 71 text

Hooks(開発中) 71 accept: トランザクションの許可 rollback: トランザクションの拒否 emit: hook内からトランザクションの送信

Slide 72

Slide 72 text

72 DeFi Tokenization NFT Payment Hooks

Slide 73

Slide 73 text

開発者リソース Developer Resources

Slide 74

Slide 74 text

開発者リソース ● 開発者向けドキュメント ● 多くのページで日本語も提供 74 xrpl.org

Slide 75

Slide 75 text

開発者リソース ● 開発者Discord ○ “XRP Ledger Developers” ● 5000人の参加者 ● 毎月のAMA ● AMMやDEXなどの機能や目的毎に特化したチャンネル ● 日本語チャンネル 75 xrpldevs.org

Slide 76

Slide 76 text

開発者リソース ● XRPL チュートリアル ● 開発環境やプログラミング言語の事前知識なしに XRPレジャーを触ってみることができます 76 xrpl-tutorial.vercel.app

Slide 77

Slide 77 text

開発者リソース 77 xrpldevs.org xrpl.org xrpl-tutorial.vercel.app

Slide 78

Slide 78 text

XRPレジャーを触ってみましょう 78 ● トランザクションの作成~署名~送信 ● APIメソッド xrpl-tutorial.vercel.app

Slide 79

Slide 79 text

トランザクションの作成・署名・送信 79 ● トランザクションの作成 ● トランザクションへの署名 ● トランザクションの送信 xrpl-tutorial.vercel.app

Slide 80

Slide 80 text

APIメソッド 80 ● レジャーの情報を取得する ● アカウントの情報 ● DEXの注文情報 ● 保有するNFTの一覧 など xrpl-tutorial.vercel.app

Slide 81

Slide 81 text

NFTをミントしてみましょう 81 1. テストネットアカウント(Faucet)の取得 2. コードを書く 3. 実行

Slide 82

Slide 82 text

開催中のハッカソン 82