作者丨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/