瑞波Ripple概念解析-支付系统基础知识(官方文档不完全翻译)

本文主要是介绍瑞波Ripple概念解析-支付系统基础知识(官方文档不完全翻译),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


帐号

XRP账本中的账户负责持有XRP瑞波币和发送交易。账户的属性元素有:

  • 识别地址,例如rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn
  • 一个XRP余额(XRP balance)。一些XRP预留给Reserve
  • 一个起始序号(sequence number),从1开始,随着从该帐户发送的每个交易增加而增加。除非交易的序号与其发送方的下一个序号相匹配,否则交易不能包含在账本中。
  • 交易历史(history of transactions),影响本账户及其余额。
  • 一种或多种授权交易,可能包括:
    • 该帐户固有的主密钥对。(这可以禁用但不能更改。)
    • 一个可以替换 “常规”密钥对。
    • 签名的签名者列表。(与帐户的核心数据分开存储。)

在账本的数据树中,帐户的核心数据存储在AccountRoot账本对象类型中。一个帐户也可以是其他几种数据的所有者(或部分所有者)。

提示:XRP账本中的账户介于金融使用(如银行账户)和计算机的账户(如“UNIX账户)之间。非XRP货币和资产不存储在XRP帐户帐户本身中每个这样的资产都存储在一个称为信任线的会计关系中,该关系连接双方。

创建帐户

没有一个专门的交易来创建账户。如一个支付交易发送大于等于预留数额(account reserve )的XRP到一个合法的地址,这个地址还没被使用的话,则会自动创建账户。这称为创建账户,并在账本中创建AccountRoot对象。除此外没有其他交易可以创建帐户。

警告:为账户提供资金不会为您提供该账户的任何特权。拥有与账户地址相对应的密钥的任何人都可以完全控制该账户及其包含的所有XRP。对于某些地址,可能没有人拥有秘密密钥,在这种情况下,帐户是黑洞XRP永远丢失。

XRP账本中创建帐户的典型方法如下:

  1. 使用强随机性生成密钥对并计算该密钥对的地址。(例如,您可以使用wallet_propose方法来执行此操作。)
  2. 让已有账户的人将XRP发送到您生成的地址。
  • 例如,您可以在私人交易所购买XRP,然后将XRP从交易所撤回到您指定的地址。

警告:您第一次在您自己的XRP账本地址收到XRP时,您必须支付帐户预留(当前为20 XRP),无限期锁定XRP的数量。相比之下,私人交易通常将所有客户的XRP都保存在几个共享的XRP账户中,因此客户不必为交易所的个人账户支付保留金。在退出之前,考虑在XRP账本上直接拥有自己的账户是否物有所值。

地址

XRP账本中的帐户由base58 XRP账本地址标识。该地址来源于账户的主公钥,而后者又是从一个私钥中派生出来的。地址在JSON中表示为一个字符串,并具有以下特征:

  • 长度在25到35个字符之间
  • 从角色开始 r
  • 使用字母数字字符,不包括数字“ 0”大写字母“ O”,大写字母“ I”和小写字母“ l
  • 区分大小写
  • 包含一个4字节的校验和,从随机字符生成有效地址的概率约为1 / 2 ^ 32

有关更多信息,请参阅帐户

任何有效的地址都可以通过创建成为XRP账户中的一个资金账户。您还可以使用尚未创建的地址来作为常规密钥签名人列表的成员。只有资金账户才能成为交易的发送方。

创建一个有效的地址是一个以密钥对开始的严格的数学任务。您可以生成密钥对后完全离线,而无需与XRP账本或任何其他方通信。从公共密钥到地址的转换涉及单向散列函数,因此可以确认公钥与地址匹配,但无法单独从地址派生公钥。(这是签名交易包含公钥发送方地址的原因之一。)

有关如何计算XRP账本地址的更多技术细节,请参阅地址编码

特别地址

某些地址在XRP账本中具有特殊含义或历史用途。在很多情况下,这些是黑洞地址,这意味着地址不是从已知的密钥中派生出来的。由于仅从一个地址猜测秘密密钥实际上是不可能的,因此黑洞地址所拥有的任何XRP将永远丢失。

地址

名称

含义

黑洞

rrrrrrrrrrrrrrrrrrrrrhoLvTp

ACCOUNT_ZERO

一个地址,它是该值的base58编码0。在点对点通信中,rippled使用此地址作为XRP的发行者。

rrrrrrrrrrrrrrrrrrrrBZbvji

ACCOUNT_ONE

一个地址,它是该值的base58编码1。在账本中,RippleState条目使用此地址作为托管行余额发行人的占位符。

rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh

起源说明

rippled从头开始创建新创建账本(例如,在独立模式下)时,此帐户将保留所有XRP。该地址由硬编码的种子值“masterpassphrase”生成。

没有

rrrrrrrrrrrrrrrrrNAMEtxvNvQ

Ripple名称预留黑洞

在过去,Ripple要求用户将XRP发送到该帐户作为预留数额。

rrrrrrrrrrrrrrrrrrrn5RM1rHd

NaN地址

base58编码值NaN时,先前版本的ripple-lib生成此地址。

账户永久性

一旦创建,账户将永远存在XRP账本的数据树中。这是因为交易的当前序号必须永久跟踪,以便旧交易不能再次处理。

与比特币和许多其他加密货币不同,XRP账本的公共账本链的每个新版本的账页都包含账本的全部状态,随着每个新账户的创建规模也会增加。出于这个原因,Ripple不鼓励创建新账户,除非完全有必要。代表许多用户发送和接收价值的机构可以使用“ 源标签Source tags“ 目的地标签Destination tags来区分来自其客户的付款,同时仅使用XRP账本中的一个(或少数)帐户。

交易历史

XRP账本中,交易历史是交易跟踪的线索,由交易的散列ID和账本索引连接的交易组成。该AccountRoot账本对象包含识别哈希和最近修改它的交易交易的元数据包括该AccountRoot节点的先前状态,因此可以以这种方式遍历单个帐户的历史记录。交易历史记录包括直接修改AccountRoot的所有交易,包括:

  • 由帐户发送的交易,因为它们修改帐户的Sequence号码。由于交易费用会修改帐户的XRP余额。
  • 交易修改了账户的XRP余额,包括传入付款交易和其他类型的交易,如PaymentChannelClaimEscrowFinish

原则上交易历史记录还包括修改账户的自身对象和没有修改XRP余额的交易。这些对象是单独的账本对象,每个对象都有影响它们的交易线索。如果您拥有帐户的全部账本历史记录,则可以按照该记录查找由其创建或修改的账本对象。完整交易历史记录包括的历史对象如下:

  • RippleState 对象(信任线)与该帐户连接。
  • DirectoryNode 对象,尤其是追踪账户自己拥有的对象。
  • Offer 代表去中心化交易所中账户未完成的货币兑换订单。
  • PayChannel 对象,代表帐户间的异步付款渠道。
  • Escrow 对象,代表按时间或加密条件锁定的账户间的付款。
  • SignerList对象,表示可以通过多重签名为帐户授权交易的地址列表。

有关每个这些对象的更多信息,请参阅账本格式参考

地址编码

提示:这些技术细节仅与构建用于XRP账本兼容性的低级库软件的人员相关!

[资源]
XRP账本地址使用base58Ripple 字典进行编码:rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz。由于XRP分类器使用base58对几种类型的密钥进行编码,因此它使用一个字节的类型前缀(也称为版本前缀)对编码数据进行前缀以区分它们。类型前缀导致地址通常以base58格式的不同字母开头。

下图显示了键和地址之间的关系:


计算XRP账本地址的公式如下。有关完整的示例代码,请参阅encode_address.js

  1. 导入所需算法:SHA-256,RIPEMD160和base58。为base58设置字典。

2. 'use strict';

3. const assert = require('assert');

4. const crypto = require('crypto');

5. const R_B58_DICT = 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz';

6. const base58 = require('base-x')(R_B58_DICT);

7.  

8. assert(crypto.getHashes().includes('sha256'));

9. assert(crypto.getHashes().includes('ripemd160'));

  1. 从33字节的ECDSA secp256k1公钥或32字节的Ed25119公钥开始。对于Ed25519密钥,在密钥前加上字节0xED

11.  const pubkey_hex =

12.    'ED9434799226374926EDA3B54B1B461B4ABF7237962EAE18528FEA67595397FA32';

13.  const pubkey = Buffer.from(pubkey_hex, 'hex');

14.  assert(pubkey.length == 33);

  1. 计算公钥的SHA-256哈希值的RIPEMD160哈希值。该值是“账户ID”。

16.  const pubkey_inner_hash = crypto.createHash('sha256').update(pubkey);

17.  const pubkey_outer_hash = crypto.createHash('ripemd160');

18.  pubkey_outer_hash.update(pubkey_inner_hash.digest());

19.  const account_id = pubkey_outer_hash.digest();

  1. 计算帐户ID的SHA-256散列的SHA-256散列; 采取前4个字节。这个值是“校验和”。

21.  const address_type_prefix = Buffer.from([0x00]);

22.  const payload = Buffer.concat([address_type_prefix, account_id]);

23.  const chksum_hash1 = crypto.createHash('sha256').update(payload).digest();

24.  const chksum_hash2 = crypto.createHash('sha256').update(chksum_hash1).digest();

25.  const checksum =  chksum_hash2.slice(0,4);

  1. 连接有效负载和校验和。计算连接缓冲区的base58值。结果是地址。

27.  const dataToEncode = Buffer.concat([payload, checksum]);

28.  const address = base58.encode(dataToEncode);

29.  console.log(address);

// rDTXLQ7ZKZVKz33zJbHjgVShjsBnqMBhmN

 

 

加密密钥

XRP账本中,数字签名证明交易有权执行特定的一组操作。只有已签署的交易才可以提交到网络并包含在经过验证的账本中。

每个数字签名均基于与交易的发送账户相关联的加密密钥对。密钥对可以使用任何XRP账本支持的加密签名算法生成。无论使用什么算法生成密钥,密钥对都可以用作主密钥对常规密钥对签名者列表的成员。

警告:保持私钥的适当安全非常重要。数字签名是向XRP 账本验证您有权发送交易的唯一方式,并且没有特权管理员可撤销或撤消已应用于账本的任何交易。如果其他人知道您的XRP账户的私钥,该人可以创建数字签名来授权任何交易,尽可能相同。

生成密钥

您使用该wallet_propose方法生成密钥对。以下是一个示例wallet_propose回应:

{

  "result": {

    "account_id": "rDGnaDqJczDAjrKHKdhGRJh2G7zJfZhj5q",

    "key_type": "secp256k1",

    "master_key": "COON WARN AWE LUCK TILE WIRE ELI SNUG TO COVE SHAM NAT",

    "master_seed": "sstV9YX8k7yTRzxkRFAHmX7EVqMfX",

    "master_seed_hex": "559EDD35041D3C11F9BBCED912F4DE6A",

    "public_key": "aBQXEw1vZD3guCX3rHL8qy8ooDomdFuxZcWrbRZKZjdDkUoUjGVS",

    "public_key_hex": "0351BDFB30E7924993C625687AE6127034C4A5EBA78A01E9C58B0C46E04E3A4948"

  },

  "status": "success",

  "type": "response"

}

该响应包含一个密钥对(一个私钥和一个公钥,以各种格式)以及一个account_id

私钥

master_keymaster_seedmaster_seed_hex是各种格式的私钥,所有这些都可以用来签署交易。尽管有前缀master_,但这些密钥不一定是帐户的主密钥。在这种情况下,master_前缀更多地指的是密钥作为私钥的角色。这master_seed是所有其他有关此帐户信息的主要种子。

公钥

public_keypublic_key_hex在各种格式的公钥,与public_key_hex是对应于签订该交易的私钥的公钥。无论是public_keypublic_key_hex直接从所导出的master_seed

帐户ID

account_id从公共密钥导出并可创建用于XRP账本的账户。重要的是要知道,尽管account_id存在,但在XRP账簿中不存在实际账户,直到account_id收到第一笔XRP付款。此外,account_id只有在收到资金并创建帐户的交易后,才能发送任何交易。

但是,account_id(没有资金账户)也可以用作常规密钥签名人列表成员,以授权另一个确实存在的帐户进行交易。

要创建存储在账本中的资金账户时,account_id必须接受Payment交易,提供足够的XRP满足准备金要求

有关wallet_propose响应的更多信息,请参阅wallet_propose

生成的密钥对可用于以下三种方式:作为主密钥对常规密钥对签署者列表成员

密钥类型

该字段key_type指示使用什么加密签名算法来生成该密钥对。您可以key_type使用wallet_propose方法指定何时发出请求以生成密钥对。

主密钥对

主密钥对由私钥和公钥组成。除了能够签署常规密钥对可以使用的所有交易之外,主密钥对的私钥是唯一可用于执行以下操作的密钥:

  • 禁用主公钥
  • 永久放弃冻结的能力。
  • 发送成本为0的密钥重置事务

使用wallet_propose生成帐户的主密钥对就是跟返回结果中的account_id对应的主密钥对,可以用来授权签署交易。由于主密钥对是在同一个返回结果中产生的,所以它与account_id 内在绑定account_id是由public_key_hex派生而来

这与使用该wallet_propose方法生成的常规密钥对相反,但它必须明确指定为帐户的常规密钥对。由于常规密钥对是明确分配的,因此它与其account_id授权签署交易的帐户本质上没有关系。有关更多信息,请参阅常规密钥对

警告:主密钥对不能更改,但可以禁用。这意味着如果您的主密钥被泄露,而不是改变它,您必须禁用它

由于主密钥对无法更改,只能在发生危害时才能禁用,因此这是使主密钥对保持脱机并设置常规密钥对以代替您的帐户签署交易的强有力原因。

使主密钥对保持离线状态意味着不要将主密钥放在恶意角色可以访问的地方。例如,这可能意味着将其保存在永不连接互联网的空隙机器上,保存在保险箱中的一张纸上,或者一般来说,保存在与整个互联网互动的计算机程序的范围内。理想情况下,主密钥对仅在最值得信赖的设备上使用,并仅用于紧急情况,例如在发生可能或实际的危害时更改常规密钥对。

常规密钥对

XRP账户允许账户授权一个称为常规密钥对的二级密钥对来签署未来的交易,同时保持您的主密钥对离线。如果常规密钥对的私钥遭到破坏,您可以删除或替换它,而无需更改帐户的其余部分并重新建立与其他帐户的关系。您也可以主动替换常规密钥对。(这些东西都不可能用于帐户的主密钥对,该帐户内部链接到该帐户的地址。)

您使用该wallet_propose方法生成密钥对以用作常规密钥对。但是,与使用与其支持的帐户并行生成的主密钥对不同account_id,您必须明确创建常规密钥对与您希望为其签署交易的帐户之间的关系。您使用SetRegularKey方法将常规密钥对分配给帐户。

有关分配常规密钥对的教程,请参阅分配常规密钥对

将常规密钥对分配给帐户后,该帐户有两个与其关联的密钥对:

  • 与帐户内在相关account_id且您保持离线的主密钥对。
  • 您已明确分配给该帐户的常规密钥对,以及用于为帐户签署交易的密钥对。

您可以将一个常规密钥对分配给一个帐户,并将其用于签署所有交易,但为主密钥对保留的交易除外。

您可以随时移除或更改常规密钥对。这意味着,如果普通私钥遭到破坏(但不是主密钥),只需删除或更改常规密钥对,即可重新获得对您帐户的控制权。

有关更改或删除常规密钥对的教程,请参阅分配常规密钥对

签名算法

加密密钥对总是绑定到特定的签名算法,该算法定义私钥和公钥之间的数学关系。密码签名算法具有这样的性质,即鉴于密码技术的当前状态,使用私钥来计算匹配公共密钥是容易的,但是通过从公钥开始计算匹配的私钥是不可能的。

XRP账本支持以下加密签名算法:

密钥类型

算法

描述

secp256k1

ECDSA使用椭圆曲线secp256k1

这是比特币中使用的方案。XRP账本默认使用这些密钥类型。

ed25519

EdDSA使用椭圆曲线Ed25519

这是一个更新的算法,具有更好的性能和其他方便的属性。由于Ed25519公钥比secp256k1键短一个字节,因此rippled前缀Ed25519公钥的字节是0xED因此这两种公钥都是33字节。

当您使用wallet_propose方法生成密钥对时,可以指定key_type选择使用哪种加密签名算法来导出密钥。如果您生成了除默认值以外的其他密钥类型,则还必须指定key_type签署事务处理时的密钥类型。

受支持的密钥对类型可在整个XRP账本中互换使用,作为主密钥对,常规密钥对和签名者列表的成员。派生地址的过程对于secp256k1Ed25519密钥对是相同的。

注意:目前,您无法使用Ed25519密钥签署付款渠道声明。这是一个错误。

未来的算法

未来,Ripple期望在XRP账本中添加新的加密签名算法,以跟上加密技术的发展。例如,如果看起来使用Shor算法(或类似的)的量子计算机很快就会足够实用以破坏椭圆曲线密码体系,Ripple可以添加一个不易破碎的密码签名算法。截至2018年初,这种量子抗性签名算法相对不切实际,量子计算机更加不切实际,因此Ripple没有立即计划添加任何特定算法。

 

多签名

XRP账本中的多重签名是一种通过使用多个密钥的组合来为XRP账本进行交易授权的方法。您可以为您的地址启用授权方法的任意组合,包括多重签名,主密钥对常规密钥对。(唯一的要求是至少必须启用一种方法。)

多重签署的好处包括:

  • 您可以要求来自不同设备的密钥,以便恶意行为者必须妥协多台机器以您的名义发送交易。
  • 您可以在多人之间分享地址的监管权限,每个人只能从该地址发送交易所必需的几个密钥之一。
  • 您可以委派从您的地址发送交易到一组人员的权力,如果您不可用或无法正常签名,他们可以控制您的地址。
  • ... 和更多。

签名者列表

在您可以进行多重签名之前,您必须创建一个可以为您签名的地址列表。

SignerListSet交易定义哪些地址可以从地址授权的交易。您最多可以在SignerList中包含8个地址。您可以通过使用SignerList的法定人数和权重值来控制需要多少签名,以及在哪些组合中。

发送多重签名交易

要成功提交多签名交易,您必须执行以下所有操作:

  • 发送交易的地址(在该Account字段中指定)必须SignerList账本拥有一个地址。
  • 该交易必须包含该SigningPubKey字段作为空字符串。
  • 该交易必须包含一个包含一系列签名的Signers字段
  • Signers数组中存在的签名必须与SignerList中定义的签名者匹配。
  • 对于提供的签名,weight与这些签名者相关的总数必须等于或大于quorumSignerList的总数。
  • 交易费用Fee字段)必须至少在正常的交易成本(N + 1)倍,其中N是所提供的签名的数目。
  • 收集签名之前,必须定义交易的所有字段。您无法自动填写任何字段。
  • 如果以二进制形式表示,则Signers必须根据签名者地址的数值对数组进行排序,并以最低值开头。(如果以JSON提交,submit_multisigned方法会自动处理。)

有关更多信息,请参阅设置多重签名

 

准备金

XRP账本在XRP中应用准备金要求,以防止由于垃圾邮件或恶意使用而导致共享全局账本过大。目标是限制账本的增长以匹配技术的改进,以便当前的商品级机器始终能够适应RAM中的当前账本和磁盘上的全额账本历史记录。

要提交交易,地址必须在共享的全局账本中保留最小量的XRP。您不能将此XRP发送到其他地址。为了支付新地址,您必须发送足够的XRP以满足储备要求。

目前的最低储备金要求是20 XRP。(这是在帐本中没有其他对象的地址的成本。)

基本储备和所有者储备

准备金要求分为两种:

  • 基本储备是必需的账本每个地址XRP的最小量。目前,20个XRP(20000000Drop)。
  • 所有者储备是该地址增加账本对象的存款准备金。目前,每个对象5000000 5个XRP(Drop)。

所有者储备

账本中的许多对象都属于特定的地址,并计入该地址的预留要求。当物品从账本中被移除时,它们不再计入所有者的储备金要求。

  • 挂单由放置它们的地址所有。交易处理会自动删除已完成消费。另外,所有者可以通过发送OfferCancel交易或通过发送包含OfferSequence参数的OfferCreate交易取消交易
  • 信任线在两个地址之间共享。所有者保留可以应用于一个或两个地址,具体取决于控制地址的字段是否处于默认状态。有关详细信息,请参阅向所有者保留做出贡献
  • 单个SignerList保留3到10个对象用于所有者,跟成员多少有关系。另见:签名者列表和储备
  • 持有的付款(托管)
  • 支付渠道由创建它们的地址所有。
  • 所有者目录所有账本对象也需要所有者准备金。但是,所有者目录本身不计入准备金。
  • 支票由创建它们的地址(发送方,而不是目的地)拥有。
所有者预留边缘案例

XRP账本认为OfferCreate交易是明确表示持有资产的意愿。taker_pays如果该信任线不存在,则使用该提议会自动创建信用额度(限额为0,余额高于该限额)。但是,如果要约的所有者不具备足够的XRP以满足新信任额度的所有者准备金要求,则该要约被视为未获得资助。另请参阅:优惠的生命周期

低于后备要求

在交易处理期间,交易成本破坏了一些发送地址的XRP余额。这可能会导致地址的XRP低于储备要求。

当地址的XRP比当前准备金要求少XRP时,它不能发送新交易将XRP发送给其他人,除非增加自己的准备金。即使如此,该地址仍然存在于账本中,只要它具有足够的XRP来支付交易成本,就可以发送其他交易。如果地址再次获得足够的XRP以满足其储备要求,或者储备要求减少到小于地址的XRP持有量,则该地址能够再次发送所有类型的交易。

提示:当地址低于准备金要求时,它可以用信任线发送新的OfferCreate交易以获取更多的XRP或其他货币。这些交易不能账本创建新的信任线挂单交易,因此他们只能消费已经在订单簿中的挂单。

更改储备金要求

XRP账本具有调整XRP价值长期变动的准备金要求的机制。任何变化都必须经过共识流程的批准。请参阅费用投票以获取更多信息。

 

存款授权

(需要DepositAuth修正。)

存款授权是XRP账本中账户的可选功能。启用存款授权后,除非这些交易的发送方是账户本身,否则交易无法向账户发送任何类型的价值。这包括XRP和已发行货币的转账。

默认情况下,新帐户禁用了DepositAuth

背景

金融服务法规和许可证可能要求企业或实体必须知道其收到的所有交易的发送方。这对像XRP账本系统这样的去中心化系统提出了挑战,参与者可以通过可以自由生成的假名识别,默认行为是任何地址都可以支付任何其他费用。

存款授权标志为那些使用XRP账本的人提供了一个选项,以符合这些规定,而不会改变去中心化式账本的基本性质。启用存款授权后,账户只能通过发送交易获得明确批准的资金。使用存款授权的账户的所有者可以发送导致账户收到款项的交易之前,执行必要的尽职调查以识别任何资金的发送方。

存款授权旨在与支票托管付款渠道一起使用 “两步操作,首先交易发送方发送交易以授权发送资金,然后交易接受方发送交易以授权接收这些资金。存款授权不能与付款交易一起使用。

建议用法

为了获得存款授权的全部效果,Ripple建议还进行以下操作:

  • 始终保持XRP余额高于最低准备金要求
  • 保持DefaultRipple标志处于其默认(禁用)状态。不要在任何信任线上启用rippling。发送TrustSet交易时,请始终使用tfSetNoRipple flag
  • 不要做挂单操作。事先是不可能知道哪些匹配报价将被用来执行这样的交易。

精确的语义

已启用存款授权的账户:x

  • 不能成为付款交易的接受方,但有一个例外
    • 如果账户的XRP余额等于或低于最低账户存款准备金要求,它可以小于等于Amount最小账户准备金(当前为20 XRP)的XRP支付的目的地。这是为了防止帐户因无法发送交易而“卡住”,但无法接收XRP。该帐户的所有者储备对这种情况无关紧要。
  • 只有当PaymentChannelClaim交易 的发送方是付款渠道的目的地时,可以从PaymentChannelClaim交易中接收XRP 。
  • 只有当EscrowFinish交易 的发送方是托管目的地时,才能从EscrowFinish交易中收到XRP 。
  • 通过发送CheckCash事务可以接收XRP或发行的货币。(需要检查修正案。)
  • 通过发送OfferCreate交易可以接收XRP或已发行货币。
    • 如果账户发送的OfferCreate交易没有立即完全执行,那么当其他账户的PaymentOfferCreate交易消费时,它可以在稍后收到剩余的订购XRP或发行货币。
  • 如果账户创建了没有启用NoRipple标志的信任线,或者启用了DefaultRipple标志并发行了任何货币,则账户可以通过Rippling接收付款交易中这些信任行的已发行货币。但它不能成为这些交易的接收方。
  • 通常,只要满足以下所有条件,XRP账本中的账户就不能在XRP账本中收到任何非XRP货币。(此规则不是特定于DepositAuth标志。)
    • 该帐户尚未创建任何额度大于零的信任线。
    • 该帐户未在其他人创建的信任线上发布货币。
    • 该帐户没有提供任何挂单。

下表总结了交易类型是否可以使用DepositAuth启用或禁用存款:

 

DepositAuth Disabled

 

DepositAuth Enabled

Transaction Type

Sent by Destination

Sent by Others

 

Sent by Destination

Sent by Others

AccountSet

(This transaction type never sends money.)

CheckCancel

(This transaction type never sends money.)

CheckCash

OK

No Permission

 

OK

No Permission

CheckCreate

(This transaction type never sends money.)

EscrowCancel

Can return XRP from an expired escrow

EscrowCreate

(This transaction type can only debit XRP, not credit it.)

EscrowFinish

OK

OK

 

OK

No Permission

OfferCancel

This transaction type never sends money.

OfferCreate

OK

Only if account previously created a matching offer

 

OK

Only if account previously created a matching offer

Payment

(If account has more than the minimum XRP reserve, enables NoRipple on all trust lines, and places no offers)

Cross-currency only

OK

 

No Permission

No Permission

Payment

(If account XRP balance is below the minimum XRP reserve)

Cross-currency only

OK

 

No Permission

XRP payments up to the minimum reserve

Payment

(If account has any trust lines with NoRipple disabled)

Cross-currency only

OK

 

No Permission

Balance changes from rippling

Payment

(If account has placed offers)

Cross-currency only

OK

 

No Permission

Balance changes from executing offers

PaymentChannelClaim

OK

OK

 

OK

No Permission

PaymentChannelCreate

(This transaction type can only debit XRP, not credit it.)

PaymentChannelFund

Can return XRP when closing a channel created by self

SetRegularKey

(This transaction type never sends money.)

SignerListSet

(This transaction type never sends money.)

TrustSet

(This transaction type never sends money.)

 

启用或禁用存款授权

一个账户可以通过发送一个AccountSet事务并且SetFlag设置为asfDepositAuth值(9)的字段来启用存款授权。该帐户可以通过发送一个AccountSet事务,并将该ClearFlag字段设置为asfDepositAuth值(9)来禁用存款授权。有关AccountSet标志的更多信息,请参阅AccountSet标志

检查帐户是否已启用DepositAuth

要查看帐户是否启用了存款授权,请使用account_info方法查找帐户。将Flags字段的值(在result.account_data对象中)与AccountRoot账本对象定义按位标志进行比较

如果Flags按值的结果(AND lsfDepositAuth标志值(0x01000000))不为零,则帐户启用了DepositAuth。如果结果为零,那么该帐户已禁用了存款授权。

也可以看看

  • 授权信托线功能(RequireAuth其对手可以持有账户发出的非XRP货币的标志)的限制。
  • DisallowXRP标志表示一个账户不应该收到XRP。这是比存款授权更软的保护,而不是由XRP账本执行。(客户端应用程序应该尊重该标志或至少警告它。)
  • RequireDest标志指示发送交易需要指定目标标签才能接收货币。这可以防止用户忘记指明付款的目的,但不会保护收件人免受未知发送方的限制,这些发送方可以组成任意目标标签。
  • 部分付款交易为帐户返还不需要的付款提供了一种途径,同时从发送的金额中减去转账费用和汇率,而不是添加发送的金额。

 

 总结:

账号地址生成规则类似于比特币的地址生成规则,地址的加密算法可以指定。
账号的秘钥有两种,一个主的,一个常规的,可以用主秘钥替换常规秘钥,主秘钥为了安全可以禁用,常规秘钥主要用来签署交易。这个设计还是挺不错的~~~



本文作者:architect.bian,欢迎收藏,转载请保留原文地址并保留版权声明!谢谢~
还没完!往下看!!!

这篇关于瑞波Ripple概念解析-支付系统基础知识(官方文档不完全翻译)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/319134

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来