作者丨Seek

XRP 简介

XRP是一个由Ripple Labs开发的数字资产和支付协议。

01背景

  • Ripple Labs: 于2012年创建,旨在解决现有金融系统中的支付问题。他们开发了一系列解决方案,其中包括Ripple支付协议和XRP数字资产。

  • 支付问题: 传统跨境支付通常昂贵、缓慢和不透明。Ripple旨在通过其协议和数字资产解决这些问题,使国际支付更快速、便宜和可追踪。

02 技术架构

  • Ripple 协议: 一种开放式支付协议,使实时交换任何形式的货币、商品或价值成为可能。它基于分布式总账技术,称为Ripple共识账本,这意味着交易可以在网络中快速验证和确认,而无需中央控制机构。

  • XRP Ledger: Ripple的公共分布式总账,用于记录和验证XRP交易。它是一种开放源代码协议,任何人都可以查看和参与。

03 XRP 的用途

  • 中继货币: XRP 最初设计为一种中继货币,用于促进跨境支付。通过使用 XRP,机构可以快速转移资金,而无需预先持有大量本地货币。

  • 流动性提供者:  XRP还可以用作流动性提供者,支持Ripple网络上的交易。流动性提供者通过在XRP Ledger上发布交易来提供资金,从中获得一定的费用。

  • 代币发行: XRP还可以用于发行新的数字代币,这些代币可以代表任何形式的价值,如股票、债券或商品。这种功能使得XRP可以作为资产发行平台。

04 生态系统和合作伙伴关系

  • 金融机构:  Ripple与世界各地的金融机构建立了合作关系,以提供更快速、便宜的跨境支付解决方案。这些机构可以直接使用Ripple协议和XRP数字资产,也可以通过Ripple提供的解决方案来接入。

  • 技术公司:  Ripple与其他技术公司合作,推动区块链和数字支付技术的发展。这些合作伙伴关系有助于扩大Ripple生态系统的影响力和可用性。

05 法律和监管

  • 合规性: Ripple致力于遵守全球各地的法律和监管要求。他们与监管机构合作,确保其解决方案和数字资产符合法规。

  • 监管挑战:  由于加密货币行业的快速发展,监管环境可能会发生变化。Ripple必须不断适应这些变化,并确保其业务的合规性。

06 XRP 的共识算法

XRP 的共识算法是称为“XRP 共识协议”(XRP Consensus Protocol)的一种机制,旨在通过一种高效、快速和安全的方式对交易进行验证和确认。这种共识算法与比特币的工作证明(Proof of Work)和以太坊的权益证明(Proof of Stake)等不同,其核心概念是一种称为“一致性”的协议,这是一种更快速的达成共识的方法。

以下是XRP共识算法的一些关键特点:

  • 一致性: XRP共识算法通过一种称为“联合验证”的过程来实现一致性。在这个过程中,网络中的验证节点通过投票达成一致,以确定哪些交易可以被包含在下一个账本中。

  • 联合验证:  在联合验证中,验证节点会在特定的时间间隔内共同选择提案中的交易,并验证这些交易的有效性。他们会通过投票表达自己的选择,并试图达成共识。

  • 比较快速: XRP共识算法的设计使得交易确认速度非常快。通常,一笔交易的确认时间大约为3到5秒,远远快于比特币等其他加密货币的确认时间。

  • 无需“挖矿”: 与工作证明或权益证明机制不同,XRP共识算法无需“挖矿”,因此不需要大量的计算资源。这使得XRP 网络更加环保和高效

  • 分布式网络: XRP 共识算法建立在一个分布式网络之上,没有中心化的控制机构。这意味着网络中的任何节点都可以参与共识过程,而不需要特殊的权限或身份。

XRP 离线地址生成

export function createHdWallet(seedHex, addressIndex) {    const root = bip32.fromSeed(Buffer.from(seedHex, 'hex'));    let path = "m/44'/144'/0'/0'/" + addressIndex + '';    const child = root.derivePath(path);    const params = {        pubKey: Buffer.from(child.publicKey).toString('hex')    }    const address = pubKeyToAddress(params)    return {        privateKey: Buffer.from(child.privateKey).toString('hex'),        publicKey: Buffer.from(child.publicKey).toString('hex'),        address: address    }; } export function pubKeyToAddress({ pubKey }): string {    if (!pubKey) {        throw new Error("pubKey 不能为空 ");    }    try {        return Keypair.deriveAddress(pubKey);    } catch (error) {        throw Error("Invalid public key.");    } }

XRP 离线签名

export function signTransaction(params) {    const {        txObj: {            from, to, amount, tag, sequence, fee, decimal, currency, issuer, transactionType,            sendMaxValue,        },        privateKey    } = params;    const calcAmount = new BigNumber(amount).times(new BigNumber(10).pow(decimal)).toString();    if (calcAmount.indexOf(".") !== -1) throw new Error("decimal 无效");    const publicKey = getPubKeyByPrivateKey(privateKey);    let txnObj: any;    if(transactionType==="TransferTokens"){        txnObj = {            TransactionType: 'Payment',            Account: from,            Destination: to,            SendMax: {                currency,                issuer,                value: sendMaxValue            },            Amount: {                currency,                issuer,                value: amount            },            Fee: fee,            Sequence: sequence,            SigningPubKey: publicKey,        };    }else{        txnObj = {            TransactionType: 'Payment',            Account: from,            Destination: to,            Amount: calcAmount,            Fee: fee,            Sequence: sequence,            SigningPubKey: publicKey,        };    }    if(tag !== undefined && tag !== null) txnObj.DestinationTag =  tag;    return generateRawT(txnObj, privateKey); }

XRP 和钱包相关的接口

01 获取签名的 currency 和 issuer

  • 接口方法:account_offers

  • 接口参数 account:用户地址

ledger_index:账本索引

  • 请求示范
curl --location 'https://s1.ripple.com:51234/' \ --header 'Content-Type: application/json' \ --data '{    "method": "account_offers",    "params": [        {            "account": "rGDreBvnHrX1get7na3J4oowN19ny4GzFn",            "ledger_index":"current"        }    ] }'
  • 返回值
{  "id": 9,  "status": "success",  "type": "response",  "result": {    "account": "rpP2JgiMyTF5jR5hLG3xHCPi1knBb1v9cM",    "ledger_current_index": 18539550,    "offers": [      {        "flags": 0,        "quality": "0.00000000574666765650638",        "seq": 6577664,        "taker_gets": "33687728098",        "taker_pays": {          "currency": "EUR",          "issuer": "rhub8VRN55s94qWKDv6jmDy1pUykJzF3wq",          "value": "193.5921774819578"        }      }      ... trimmed for length ...    ],    "validated": false  } }
  • currency:货币名称(签名需要的参数)

  • issuer:发行者(签名需要的参数)

  • value:账户金额

  • data 为账户余额

02 获取账户的 Sequence

  • 接口方法:account_info

  • 接口参数 account:账户地址

ledger_index:账本索引

  • 请求示范
curl --location 'https://s1.ripple.com:51234/' \ --header 'Content-Type: application/json' \ --data '{    "method": "account_info",    "params": [        {            "account": "rLPHHJh3Cin2E7D3aZPgMX62YS16RHBAGG",            "ledger_index": "current",            "queue": true        }    ] }'
  • 返回值
{    "result": {        "account_data": {            "Account": "rLPHHJh3Cin2E7D3aZPgMX62YS16RHBAGG",            "Balance": "19569500",            "Flags": 0,            "LedgerEntryType": "AccountRoot",            "OwnerCount": 0,            "PreviousTxnID": "D52061577250FC306C784E37179ACE0EFF1688C7FD55F8972D90AE219CA19F12",            "PreviousTxnLgrSeq": 88545344,            "Sequence": 88545344,            "index": "A2231B25F5C66D0288F4130F63D468D2BCE7BD28A4FD25BBE92C187EB2BF540D"        },        "account_flags": {            "allowTrustLineClawback": false,            "defaultRipple": false,            "depositAuth": false,            "disableMasterKey": false,            "disallowIncomingCheck": false,            "disallowIncomingNFTokenOffer": false,            "disallowIncomingPayChan": false,            "disallowIncomingTrustline": false,            "disallowIncomingXRP": false,            "globalFreeze": false,            "noFreeze": false,            "passwordSpent": false,            "requireAuthorization": false,            "requireDestinationTag": false        },        "ledger_current_index": 88545752,        "queue_data": {            "txn_count": 0        },        "validated": false,        "status": "success"    },    "status": "success",    "type": "response",    "forwarded": true,    "warnings": [        {            "id": 2001,            "message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request"        }    ] }
  • Sequence:为签名需要的参数

03 获取最新块

  • 请求示范
curl --location 'https://s1.ripple.com:51234/' \ --header 'Content-Type: application/json' \ --data '{    "method": "ledger",    "params": [        {            "ledger_index": "validated",            "transactions": false,            "expand": false,            "owner_funds": false        }    ] }'
  • 返回值
{    "result": {        "ledger_hash": "AE211D4F9DB6A8E66FE93D1689B051E13BAD9D6377F2D449FB09C6C90F883FCE",        "ledger_index": 88550384,        "validated": true,        "ledger": {            "account_hash": "E3EF05EDA3397B2A31B3A1366AD13292916D3DA23955C55AE1B6E749773F9D52",            "close_flags": 0,            "close_time": 771175011,            "close_time_human": "2024-Jun-08 15:16:51.000000000 UTC",            "close_time_resolution": 10,            "close_time_iso": "2024-06-08T15:16:51Z",            "ledger_hash": "AE211D4F9DB6A8E66FE93D1689B051E13BAD9D6377F2D449FB09C6C90F883FCE",            "parent_close_time": 771175010,            "parent_hash": "F12AB71EFE9BAB87FA01DA21F59EAD36104D297C0E89D1B60296A736B6B57B0D",            "total_coins": "99987515687904183",            "transaction_hash": "03EE4C16E0C54A1B4C4DF0DED2A8E627DE06A8949360726B075CD2001A24B2F6",            "ledger_index": "88550384",            "closed": true        },        "status": "success"    },    "warnings": [        {            "id": 2001,            "message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request"        }    ] }
  • ledger_index:为最新块高

  • ledger_hash:为最新块高 Hash

04 根据块号获取块里面的信息

  • 请求参数 ledger_hash:账本 Hash,  类似其他链的区块 Hash

  • 请求示范

curl --location 'https://s1.ripple.com:51234/' \ --header 'Content-Type: application/json' \ --data '{    "method": "ledger_data",    "params": [        {            "binary": true,            "ledger_hash": "AE211D4F9DB6A8E66FE93D1689B051E13BAD9D6377F2D449FB09C6C90F883FCE",            "limit": 1        }    ] }'
  • 返回值
{    "result": {        "ledger_hash": "AE211D4F9DB6A8E66FE93D1689B051E13BAD9D6377F2D449FB09C6C90F883FCE",        "ledger_index": 88550384,        "validated": true,        "state": [            {                "data": "11007222002200002504D5FD0B37000000000000002838000000000000000055EEF262B9485368FD2DB14F0A4EEC7D06C0D979F541F26A9CDD54965A4D0B4C4B6294E10A4CFC6940000000000000000000000000005345430000000000000000000000000000000000000000000000000166800000000000000000000000000000000000000053454300000000000250260AE1E4202439AFB5F9927067D48F8B17DC67D61C6B728800DCA4000000000000000000000000534543000000000047021569ECC348FD11FECFF66610D1F4249A3D41",                "index": "000000E42EDA8F440C16D376B5FC6DE1370CE38C8A5D2965107E8DDBEAF4B007"            }        ],        "ledger": {            "ledger_data": "05472BF001633A1DA28D23B7F12AB71EFE9BAB87FA01DA21F59EAD36104D297C0E89D1B60296A736B6B57B0D03EE4C16E0C54A1B4C4DF0DED2A8E627DE06A8949360726B075CD2001A24B2F6E3EF05EDA3397B2A31B3A1366AD13292916D3DA23955C55AE1B6E749773F9D522DF732622DF732630A00",            "closed": true        },        "marker": "000000E42EDA8F440C16D376B5FC6DE1370CE38C8A5D2965107E8DDBEAF4B007",        "status": "success"    },    "warnings": [        {            "id": 2001,            "message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request"        }    ] }
  • state 里面为交易 Json 格式编码的 hex

05 根据交易 Hash 获取交易详情

  • 接口名称:tx

  • 接口参数 transaction:交易 Hash

  • 请求示范

curl --location 'https://s1.ripple.com:51234/' \ --header 'Content-Type: application/json' \ --data '{    "method": "tx",    "params": [        {            "transaction": "0342E45A7CF2A2D605CC76FE98309479AAF1E32779446F15A27B6CE9B6F5AAA8",            "binary": false        }    ] }'
  • 返回值
{    "result": {        "Account": "rLPHHJh3Cin2E7D3aZPgMX62YS16RHBAGG",        "Amount": "1000000",        "Destination": "rwsZXRC9vj9W9XJY3kuKNiHUBnctSTiXV9",        "DestinationTag": 0,        "Fee": "1000",        "Sequence": 88545346,        "SigningPubKey": "021E8DCCC213247D1C42662EF7A38B63713BFF154560ED1BF8E908268DCCFABD4E",        "TransactionType": "Payment",        "TxnSignature": "3044022068D277180D26C29D5AFCE3917441AC777C73BC86309BEA5530F13BA51C4BD9CE0220066B3C51C1329BA752157EDFA11BA104D0CAA4F83FF7FDA26F4556AE10580D10",        "hash": "0342E45A7CF2A2D605CC76FE98309479AAF1E32779446F15A27B6CE9B6F5AAA8",        "DeliverMax": "1000000",        "ctid": "C547229A00430000",        "meta": {            "AffectedNodes": [                {                    "ModifiedNode": {                        "FinalFields": {                            "Account": "rwsZXRC9vj9W9XJY3kuKNiHUBnctSTiXV9",                            "Balance": "12999500",                            "Flags": 0,                            "OwnerCount": 0,                            "Sequence": 88545188                        },                        "LedgerEntryType": "AccountRoot",                        "LedgerIndex": "78FDFCD71766ED44492916B0FDE5B35F8D60CF15108EA152B267C91F84D8316A",                        "PreviousFields": {                            "Balance": "11999500"                        },                        "PreviousTxnID": "0027A9B9AFA3BCD0CC2EF66D83649349B3D2CC149EE62DB8F26E94FF946E642A",                        "PreviousTxnLgrSeq": 88547978                    }                },                {                    "ModifiedNode": {                        "FinalFields": {                            "Account": "rLPHHJh3Cin2E7D3aZPgMX62YS16RHBAGG",                            "Balance": "16567400",                            "Flags": 0,                            "OwnerCount": 0,                            "Sequence": 88545347                        },                        "LedgerEntryType": "AccountRoot",                        "LedgerIndex": "A2231B25F5C66D0288F4130F63D468D2BCE7BD28A4FD25BBE92C187EB2BF540D",                        "PreviousFields": {                            "Balance": "17568400",                            "Sequence": 88545346                        },                        "PreviousTxnID": "0027A9B9AFA3BCD0CC2EF66D83649349B3D2CC149EE62DB8F26E94FF946E642A",                        "PreviousTxnLgrSeq": 88547978                    }                }            ],            "TransactionIndex": 67,            "TransactionResult": "tesSUCCESS",            "delivered_amount": "1000000"        },        "validated": true,        "date": 771165772,        "ledger_index": 88547994,        "inLedger": 88547994,        "status": "success"    },    "warnings": [        {            "id": 2001,            "message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request"        }    ] }
  • Account:出金地址

  • Amount:转账金额

  • Destination:目标地址

  • Fee:消耗的手续费

  • DestinationTag: 转账标签

06 发送交易到区块链网络

  • 接口方法:submit

  • 接口参数 tx_blob:离线签名之后的交易

  • 请求示范

curl --location 'https://s1.ripple.com:51234/' \ --header 'Content-Type: application/json' \ --data '{    "method": "submit",    "params": [        {            "tx_blob": "12000024054718422E000000006140000000000F42406840000000000003E87321021E8DCCC213247D1C42662EF7A38B63713BFF154560ED1BF8E908268DCCFABD4E74463044022068D277180D26C29D5AFCE3917441AC777C73BC86309BEA5530F13BA51C4BD9CE0220066B3C51C1329BA752157EDFA11BA104D0CAA4F83FF7FDA26F4556AE10580D108114D4A121B65577D6BF511C9A10159B4605CD277CF1831463351D37207D16BC7B3D9AE8271AF320259D7AE6"        }    ] }'
  • 返回值
{    "result": {        "accepted": true,        "account_sequence_available": 88545347,        "account_sequence_next": 88545347,        "applied": true,        "broadcast": true,        "engine_result": "tesSUCCESS",        "engine_result_code": 0,        "engine_result_message": "The transaction was applied. Only final in a validated ledger.",        "kept": true,        "open_ledger_cost": "10",        "queued": false,        "tx_blob": "12000024054718422E000000006140000000000F42406840000000000003E87321021E8DCCC213247D1C42662EF7A38B63713BFF154560ED1BF8E908268DCCFABD4E74463044022068D277180D26C29D5AFCE3917441AC777C73BC86309BEA5530F13BA51C4BD9CE0220066B3C51C1329BA752157EDFA11BA104D0CAA4F83FF7FDA26F4556AE10580D108114D4A121B65577D6BF511C9A10159B4605CD277CF1831463351D37207D16BC7B3D9AE8271AF320259D7AE6",        "tx_json": {            "Account": "rLPHHJh3Cin2E7D3aZPgMX62YS16RHBAGG",            "Amount": "1000000",            "Destination": "rwsZXRC9vj9W9XJY3kuKNiHUBnctSTiXV9",            "DestinationTag": 0,            "Fee": "1000",            "Sequence": 88545346,            "SigningPubKey": "021E8DCCC213247D1C42662EF7A38B63713BFF154560ED1BF8E908268DCCFABD4E",            "TransactionType": "Payment",            "TxnSignature": "3044022068D277180D26C29D5AFCE3917441AC777C73BC86309BEA5530F13BA51C4BD9CE0220066B3C51C1329BA752157EDFA11BA104D0CAA4F83FF7FDA26F4556AE10580D10",            "hash": "0342E45A7CF2A2D605CC76FE98309479AAF1E32779446F15A27B6CE9B6F5AAA8"        },        "validated_ledger_index": 88547992,        "status": "success"    },    "status": "success",    "type": "response",    "forwarded": true,    "warnings": [        {            "id": 2001,            "message": "This is a clio server. clio only serves validated data. If you want to talk to rippled, include 'ledger_index':'current' in your request"        }    ] }
  • engine_result:tesSUCCESS 表示执行成

  • accepted:表示交易已经被接受

XRP 钱包开发特点

  • 交易带 Memo

  • 有代币,代币签名提需要有 issuer 的信息

附录

  • Github:  https://github.com/XRPLF

  • 官网:https://xrpl.org/

  • 基金会:https://foundation.xrpl.org/

  • 开发者工具:https://xrpl.org/resources/dev-tools/

  • Aptos 浏览器: https://xrpscan.com/

https://bithomp.com/en

https://livenet.xrpl.org/

  • API 文档:https://xrpl.org/docs/references/http-websocket-apis/