Ripple(瑞波)多重签名
介绍
您可以将一个“SignerList”添加到Ripple帐户,以便签名的法定人数可以授权帐户的交易。SignerList具有与常规密钥相同的权限级别。(基本上,除了禁用主密钥或执行全局冻结之外,它可以执行所有操作。)您可以使用SignerList以及其他授权方法,也可以禁用主密钥并删除任何常规密钥,以便SignerList是唯一的授权账户交易的方式。如前所述,该帐户必须至少保留一种授权交易的方法。
SignerList的成员可以是“实际的”Ripple帐户或“幻影”帐户(未在分类账中出资的地址)。如果所引用的帐户存在于分类帐中,则可以使用常规密钥(如果已定义密钥)或主密钥(除非它被禁用)为多重签名的交易提供签名。如果该帐户不存在,则只能使用主密钥进行签名。即使引用的帐户启用了SignerList,多重签名中的每个成员都必须是单个签名,而不是另一个多重签名。
主要用例:
- 双因素认证
- 可能需要多个设备来授权交易。
- 组管理一个Ripple帐户。
- 包括必须合作签署交易的自动化流程组。只要这些流程的法定人数不受影响,账户就不会受到影响。
注意事项:
- 如果有人更改其常规密钥或禁用其主密钥,则其未完成签名可能失效。他们需要构建新的签名。
协议更改:
- 分类账中的新节点类型“SignerList”,它由一个账户拥有,并包含可签名的账户列表。
- 一个帐户最多可以有1个SignerList。
- SignerList中的每个成员都有一个权重值。
- SignerList具有法定值。签名者的权重必须等于或大于授权交易的法定人数。
- 重量和法定人数共同允许允许多个签名(如“所有成员”,“任何3个成员”,“任何两个成员加上特定成员”等等)的灵活要求。
- 一个SignerList必须至少有一个成员和不超过八个成员。
- 新的交易类型“SignerListSet”,它为账户指定一个SignerList提供了一种方式。
- SignerListSet没有特殊的交易费用要求
- SignerListSet可以添加,替换或从帐户中删除SignerList。
- AccountSet和SetRegularKey事务被修改,以便您可以禁用主密钥并在SignerList可用时删除常规密钥。
- 多签名事务与常规密钥签名事务具有相同的权限级别。他们不能禁用主密钥,但他们可以重新启用它。
- 任何其他交易都可以进行多重签名。
费用
像往常一样,如果发送账户可以支付XRP费用,则波动服务器仅分发候选交易。多签名交易需要更大的XRP费用进行分配。如果简单签名交易的网络费用为N XRP,那么多签名交易需要为其中的每个签名添加N个XRP。
例如:如果当前的网络费用是12,000个XRP,则由3个签名签署的交易需要(3 + 1)* N = 48,000个下降。
SignerListSet交易具有正常费用。
储量
像往常一样,账户拥有的分类帐中的节点有助于该账户的XRP储备金要求。SignerList节点需要比Offer或RippleState(Trust Line)节点更大的预留。SignerList本身对所有者数量贡献2,并且SignerList的每个成员都为业主数量增加了另一个1。所有者储备是N XRP乘以所有者数量。
例如:如果“所有者保留”为每个项目5个XRP,则包含8个成员的SignerList需要保留(2 + 8)* N = 50个XRP。具有1个成员的SignerList需要(2 + 1)* N = 15个XRP的保留。
不包含
Ripple中已经讨论过的多特征的许多特征不包括在多重签名的第一阶段。这些功能将不包含在初始功能集中,但仍可能在未来版本中考虑。
- 门票 - 在您收集签名时为交易保留一个位置
- 关于需要额外签名的未决交易的分类账通信
- 多级多重签名:使用多重签名作为多重签名的成员。
- 多个签署者列表为单个帐户
- 用于多重签名的细粒度权限
如何多重签名
多重签名是授权XRP分类帐交易的三种方式之一,同时还可以使用常规密钥和主密钥进行签名。您可以配置您的地址以允许这三种方法的任意组合来授权交易。
多重签署的好处包括:
- 您可以要求使用不同设备上的密钥,以便恶意角色必须妥协多台机器才能代表您发送交易。
- 您可以在多人之间分享地址的监管权限,每个人只能从该地址发送交易所必需的几个密钥之一。
- 您可以委派从您的地址发送交易到一组人员的权力,如果您不可用或无法正常签署,他们可以控制您的地址。
- ... 和更多。
要使用多重签名:
- XRP分类帐对等网络必须启用多重签名。
- 在您的帐户中设置一个签名者列表。
- 使用多个签名发送交易。
多签名的可用性
自2016年6月27日起对XRP总账协议的修订已启用多重签名。
如果您想要rippled
在独立模式下使用新帐本进行多重签名,则必须强制启用MultiSign功能。您可以使用该feature
命令检查MultiSign修订版的状态。
要强制启用多重签名功能,请将以下节添加到您的rippled.cfg
:
[features]
MultiSign
设置多重签名
要对来自特定地址的交易进行多重签名,您必须创建一个地址列表,以便为您的地址提供多重签名。该列表作为SignerList节点存储在XRP分类帐中。以下过程演示如何为您的地址设置SignerList:
1.准备一个受资助的地址
您需要一个可以发送交易的XRP分类帐地址,并且有足够的XRP可用。对于账户储备和交易成本而言,多重签名要求的XRP的数量通常要多于您使用的签名者和签名的数量。
如果您rippled
以独立模式开始创建新的分类账,您必须:
- 为新地址生成密钥,或重新使用已拥有的密钥。
- 提交支付交易以资助创建帐户中的新地址。(发送至少100,000,000 滴XRP。)
- 手动关闭分类帐。
2.准备成员密钥
您需要多组XRP分类帐密钥(地址和秘密)才能包含为您的SignerList的成员。这些可以是分类帐中存在的资金地址,也可以使用该wallet_propose
命令生成新地址。例如:
$ rippled wallet_propose
Loading: "/home/mduo13/.config/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{"result" : {"account_id" : "rnRJ4dpSBKDR2M1itf4Ah6tZZm5xuNZFPH","key_type" : "secp256k1","master_key" : "FLOG SEND GOES CUFF GAGE FAT ANTI DEL GUM TIRE ISLE BEAR","master_seed" : "snheH5UUjU4CWqiNVLny2k21TyKPC","master_seed_hex" : "A9F859765EB8614D26809836382AFB82","public_key" : "aBR4hxFXcDNHnGYvTiqb2KU8TTTV1cYV9wXTAuz2DjBm7S8TYEBU","public_key_hex" : "03C09A5D112B393D531E4F092E3A5769A5752129F0A9C55C61B3A226BB9B567B9B","status" : "success"}
}
记下您生成的每个人的account_id
(XRP分类帐地址)和master_seed
(密钥)。
3.发送SignerListSet事务
签署并提交一个SignerListSet交易正常(单签名)的方式。这将一个SignerList与您的XRP分类帐地址关联,以便来自该SignerList成员的签名组合可以代表您以后多次签署交易。
在本例中,SignerList有3个成员,设置权重和法定人数,使得多重签名的交易需要来自rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW的签名以及来自列表的其他两个成员的至少一个签名。
警告:切勿将密钥提交给不受控制的服务器。不要通过网络发送未加密的密钥。
$ rippled submit shqZZy2Rzs9ZqWTCQAdqc3bKgxnYq '{
> "Flags": 0,
> "TransactionType": "SignerListSet",
> "Account": "rnBFvgZphmN39GWzUJeUitaP22Fr9be75H",
> "Fee": "10000",
> "SignerQuorum": 3,
> "SignerEntries": [
> {
> "SignerEntry": {
> "Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
> "SignerWeight": 2
> }
> },
> {
> "SignerEntry": {
> "Account": "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v",
> "SignerWeight": 1
> }
> },
> {
> "SignerEntry": {
> "Account": "raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n",
> "SignerWeight": 1
> }
> }
> ]
> }'
Loading: "/home/mduo13/.config/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{"result" : {"engine_result" : "tesSUCCESS","engine_result_code" : 0,"engine_result_message" : "The transaction was applied. Only final in a validated ledger.","status" : "success","tx_blob" : "12000C2200000000240000000120230000000368400000000000271073210303E20EC6B4A39A629815AE02C0A1393B9225E3B890CAE45B59F42FA29BE9668D74473045022100BEDFA12502C66DDCB64521972E5356F4DB965F553853D53D4C69B4897F11B4780220595202D1E080345B65BAF8EBD6CA161C227F1B62C7E72EA5CA282B9434A6F04281142DECAB42CA805119A9BA2FF305C9AFA12F0B86A1F4EB1300028114204288D2E47F8EF6C99BCC457966320D12409711E1EB13000181147908A7F0EDD48EA896C3580A399F0EE78611C8E3E1EB13000181143A4C02EA95AD6AC3BED92FA036E0BBFB712C030CE1F1","tx_json" : {"Account" : "rnBFvgZphmN39GWzUJeUitaP22Fr9be75H","Fee" : "10000","Flags" : 0,"Sequence" : 1,"SignerEntries" : [{"SignerEntry" : {"Account" : "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW","SignerWeight" : 2}},{"SignerEntry" : {"Account" : "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v","SignerWeight" : 1}},{"SignerEntry" : {"Account" : "raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n","SignerWeight" : 1}}],"SignerQuorum" : 3,"SigningPubKey" : "0303E20EC6B4A39A629815AE02C0A1393B9225E3B890CAE45B59F42FA29BE9668D","TransactionType" : "SignerListSet","TxnSignature" : "3045022100BEDFA12502C66DDCB64521972E5356F4DB965F553853D53D4C69B4897F11B4780220595202D1E080345B65BAF8EBD6CA161C227F1B62C7E72EA5CA282B9434A6F042","hash" : "3950D98AD20DA52EBB1F3937EF32F382D74092A4C8DF9A0B1A06ED25200B5756"}}
}
确保交易结果是tesSUCCESS。否则,交易失败。如果您在独立模式或非生产网络中遇到问题,请检查是否启用了多重符号。
注意:SignerList中的成员越多,您的地址必须拥有的XRP就越多,以用于所有者预留。如果您的地址没有足够的XRP,则交易将失败,并显示tecinsuFFICIENT_RESERVE。另见:签名者列表和储备。
4.关闭分类帐
在实时网络上,您可以等待4-7秒让分类账自动关闭。
如果您rippled
以独立模式运行,请使用该ledger_accept
命令手动关闭分类帐:
$ rippled ledger_accept
Loading: "/home/mduo13/.config/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{"result" : {"ledger_current_index" : 6,"status" : "success"}
}
5.确认新的签名者列表
使用该account_objects
命令确认SignerList与最新验证分类帐中的地址相关联。
通常,一个账户可以拥有不同类型的许多对象(例如信任线和优惠)。如果您为本教程提供了一个新地址,则SignerList是响应中的唯一对象。
$ rippled account_objects rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC validated
Loading: "/home/mduo13/.config/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{"result" : {"account" : "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC","account_objects" : [{"Flags" : 0,"LedgerEntryType" : "SignerList","OwnerNode" : "0000000000000000","PreviousTxnID" : "8FDC18960455C196A8C4DE0D24799209A21F4A17E32102B5162BD79466B90222","PreviousTxnLgrSeq" : 5,"SignerEntries" : [{"SignerEntry" : {"Account" : "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW","SignerWeight" : 2}},{"SignerEntry" : {"Account" : "raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n","SignerWeight" : 1}},{"SignerEntry" : {"Account" : "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v","SignerWeight" : 1}}],"SignerListID" : 0,"SignerQuorum" : 3,"index" : "79FD203E4DDDF2EA78B798C963487120C048C78652A28682425E47C96D016F92"}],"ledger_hash" : "56E81069F06492FB410A70218C08169BE3AB3CFD5AEA20E999662D81DC361D9F","ledger_index" : 5,"status" : "success","validated" : true}
}
如果SignerList与预期的内容一同出现,那么您的地址已准备好进行多重签名。
6.进一步的步骤
此时,您的地址已准备好发送多重签名的交易。您可能还想要:
- 通过使用标志发送AccountSet事务来禁用地址的主密钥对
asfDisableMaster
。 - 通过发送SetRegularKey事务来移除地址的常规密钥对(如果您以前设置了一对)。
发送多重签名的交易
在您可以对交易进行多重签名之前,请先 为您的地址设置多重签名。以下过程演示如何创建,签署和提交多签名事务。
1.创建交易
创建一个表示要提交的事务的JSON对象。您必须指定有关此事务的所有信息,包括Fee
和Sequence
。还要将该字段SigningPubKey
作为空字符串来表示该事务是多重签名的。
请记住,Fee
多签名交易的数量远远高于定期签署的交易数量。它应该至少是正常交易成本的(N + 1)倍,其中N是您计划提供的签名数量。由于收集来自多个来源的签名有时需要一段时间,因此在此期间交易成本增加的情况下,您可能需要指定比当前最小值更多的签名。
以下是一个准备好多签名的示例事务:
{"TransactionType": "TrustSet","Account": "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC","Flags": 262144,"LimitAmount": {"currency": "USD","issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","value": "100"},"Sequence": 2,"SigningPubKey": "","Fee": "30000"
}
(此交易创建了一个从rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC到rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh的会计关系,最大余额为100美元。)
2.获取一个签名
使用带有您的SignerList成员之一的秘密密钥和地址的sign_for
命令来获取该成员的签名。
警告:切勿将密钥提交给不受控制的服务器。不要通过网络发送未加密的密钥。
$ rippled sign_for rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW <rsA2L..'s secret> '{
> "TransactionType": "TrustSet",
> "Account": "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
> "Flags": 262144,
> "LimitAmount": {
> "currency": "USD",
> "issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
> "value": "100"
> },
> "Sequence": 2,
> "SigningPubKey": "",
> "Fee": "30000"
> }'
Loading: "/home/mduo13/.config/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{"result" : {"status" : "success","tx_blob" : "1200142200040000240000000263D5038D7EA4C680000000000000000000000000005553440000000000B5F762798A53D543A014CAF8B297CFF8F2F937E868400000000000753073008114A3780F5CB5A44D366520FC44055E8ED44D9A2270F3E010732102B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF744730450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E58114204288D2E47F8EF6C99BCC457966320D12409711E1F1","tx_json" : {"Account" : "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC","Fee" : "30000","Flags" : 262144,"LimitAmount" : {"currency" : "USD","issuer" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","value" : "100"},"Sequence" : 2,"Signers" : [{"Signer" : {"Account" : "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW","SigningPubKey" : "02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF","TxnSignature" : "30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"}}],"SigningPubKey" : "","TransactionType" : "TrustSet","hash" : "A94A6417D1A7AAB059822B894E13D322ED3712F7212CE9257801F96DE6C3F6AE"}}
}
保存tx_json
响应字段:它在该Signers
字段中具有新的签名。您可以放弃该tx_blob
字段的值。
如果您在独立模式或非生产网络中遇到问题,请检查是否启用了多重符号。
3.获得额外的签名
您可以并行或串行收集其他签名:
- 并行执行:使用
sign_for
具有原始JSON 的命令作为事务。每个响应在Signers
数组中都有一个签名。 - 在串行中:使用
sign_for
带有tx_json
前一个sign_for
响应值的命令。每个响应都会为现有Signers
阵列添加一个新签名。
警告:切勿将密钥提交给不受控制的服务器。不要通过网络发送未加密的密钥。
$ rippled sign_for rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v <rUpy..'s secret> '{
> "Account" : "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
> "Fee" : "30000",
> "Flags" : 262144,
> "LimitAmount" : {
> "currency" : "USD",
> "issuer" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
> "value" : "100"
> },
> "Sequence" : 2,
> "Signers" : [
> {
> "Signer" : {
> "Account" : "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
> "SigningPubKey" : "02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF",
> "TxnSignature" : "30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"
> }
> }
> ],
> "SigningPubKey" : "",
> "TransactionType" : "TrustSet",
> "hash" : "A94A6417D1A7AAB059822B894E13D322ED3712F7212CE9257801F96DE6C3F6AE"
> }'
Loading: "/home/mduo13/.config/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{"result" : {"status" : "success","tx_blob" : "1200142200040000240000000263D5038D7EA4C680000000000000000000000000005553440000000000B5F762798A53D543A014CAF8B297CFF8F2F937E868400000000000753073008114A3780F5CB5A44D366520FC44055E8ED44D9A2270F3E010732102B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF744730450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E58114204288D2E47F8EF6C99BCC457966320D12409711E1E0107321028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B744630440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC181147908A7F0EDD48EA896C3580A399F0EE78611C8E3E1F1","tx_json" : {"Account" : "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC","Fee" : "30000","Flags" : 262144,"LimitAmount" : {"currency" : "USD","issuer" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","value" : "100"},"Sequence" : 2,"Signers" : [{"Signer" : {"Account" : "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW","SigningPubKey" : "02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF","TxnSignature" : "30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"}},{"Signer" : {"Account" : "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v","SigningPubKey" : "028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B","TxnSignature" : "30440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC1"}}],"SigningPubKey" : "","TransactionType" : "TrustSet","hash" : "BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6"}}
}
根据您配置的SignerList,您可能需要多次重复此步骤才能从所有必要方获取签名。
4.合并签名并提交
如果您以串行方式收集签名,tx_json
则从最后一个sign_for
响应收集所有签名,因此您可以将其用作该submit_multisigned
命令的参数。
如果您并行收集签名,则必须手动构建tx_json
包含所有签名的对象。Signers
从所有sign_for
响应中取出数组,并将它们的内容组合成一个Signers
具有每个签名的数组。将组合Signers
数组添加到原始事务JSON值,并将其用作该submit_multisigned
命令的参数。
$ rippled submit_multisigned '{
> "Account" : "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC",
> "Fee" : "30000",
> "Flags" : 262144,
> "LimitAmount" : {
> "currency" : "USD",
> "issuer" : "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh",
> "value" : "100"
> },
> "Sequence" : 2,
> "Signers" : [
> {
> "Signer" : {
> "Account" : "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW",
> "SigningPubKey" : "02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF",
> "TxnSignature" : "30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"
> }
> },
> {
> "Signer" : {
> "Account" : "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v",
> "SigningPubKey" : "028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B",
> "TxnSignature" : "30440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC1"
> }
> }
> ],
> "SigningPubKey" : "",
> "TransactionType" : "TrustSet",
> "hash" : "BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6"
> }'
Loading: "/home/mduo13/.config/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{"result": {"engine_result": "tesSUCCESS","engine_result_code": 0,"engine_result_message": "The transaction was applied. Only final in a validated ledger.","status": "success","tx_blob": "1200142200040000240000000263D5038D7EA4C680000000000000000000000000005553440000000000B5F762798A53D543A014CAF8B297CFF8F2F937E868400000000000753073008114A3780F5CB5A44D366520FC44055E8ED44D9A2270F3E010732102B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF744730450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E58114204288D2E47F8EF6C99BCC457966320D12409711E1E0107321028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B744630440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC181147908A7F0EDD48EA896C3580A399F0EE78611C8E3E1F1","tx_json": {"Account": "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC","Fee": "30000","Flags": 262144,"LimitAmount": {"currency": "USD","issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","value": "100"},"Sequence": 2,"Signers": [{"Signer": {"Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW","SigningPubKey": "02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF","TxnSignature": "30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"}}, {"Signer": {"Account": "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v","SigningPubKey": "028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B","TxnSignature": "30440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC1"}}],"SigningPubKey": "","TransactionType": "TrustSet","hash": "BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6"}}
}
记下hash
响应中的值,以便稍后检查交易结果。(在这种情况下,哈希是BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6
。)
5.关闭分类帐
如果您正在使用实时网络,则可以等待4-7秒让账簿自动关闭。
如果您rippled
以独立模式运行,请使用该ledger_accept
命令手动关闭分类帐:
$ rippled ledger_accept
Loading: "/home/mduo13/.config/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{"result" : {"ledger_current_index" : 7,"status" : "success"}
}
6.确认交易结果
使用该submit_multisigned
命令的响应中的散列值来查找使用该tx
命令的事务。特别是,检查是否TransactionResult
是字符串tesSUCCESS
。
在实时网络上,您还必须确认该validated
字段已设置为布尔值true
。如果该领域不是true
,那么您可能需要等待更长的时间才能达成共识流程; 或者出于某种原因,您的交易可能无法包含在分类账中。
在独立模式下,服务器会自动将分类帐视为validated
手动关闭。
$ rippled tx BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6
Loading: "/home/mduo13/.config/ripple/rippled.cfg"
Connecting to 127.0.0.1:5005
{"result": {"Account": "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC","Fee": "30000","Flags": 262144,"LimitAmount": {"currency": "USD","issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","value": "100"},"Sequence": 2,"Signers": [{"Signer": {"Account": "rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW","SigningPubKey": "02B3EC4E5DD96029A647CFA20DA07FE1F85296505552CCAC114087E66B46BD77DF","TxnSignature": "30450221009C195DBBF7967E223D8626CA19CF02073667F2B22E206727BFE848FF42BEAC8A022048C323B0BED19A988BDBEFA974B6DE8AA9DCAE250AA82BBD1221787032A864E5"}}, {"Signer": {"Account": "rUpy3eEg8rqjqfUoLeBnZkscbKbFsKXC3v","SigningPubKey": "028FFB276505F9AC3F57E8D5242B386A597EF6C40A7999F37F1948636FD484E25B","TxnSignature": "30440220680BBD745004E9CFB6B13A137F505FB92298AD309071D16C7B982825188FD1AE022004200B1F7E4A6A84BB0E4FC09E1E3BA2B66EBD32F0E6D121A34BA3B04AD99BC1"}}],"SigningPubKey": "","TransactionType": "TrustSet","date": 512172510,"hash": "BD636194C48FD7A100DE4C972336534C8E710FD008C0F3CF7BC5BF34DAF3C3E6","inLedger": 6,"ledger_index": 6,"meta": {"AffectedNodes": [{"ModifiedNode": {"LedgerEntryType": "AccountRoot","LedgerIndex": "2B6AC232AA4C4BE41BF49D2459FA4A0347E1B543A4C92FCEE0821C0201E2E9A8","PreviousTxnID": "B7E1D33DB7DEA3BB65BFAB2C80E02125F47FCCF6C957A7FDECD915B3EBE0C1DD","PreviousTxnLgrSeq": 4}}, {"CreatedNode": {"LedgerEntryType": "RippleState","LedgerIndex": "93E317B32022977C77810A2C558FBB28E30E744C68E73720622B797F957EC5FA","NewFields": {"Balance": {"currency": "USD","issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji","value": "0"},"Flags": 2162688,"HighLimit": {"currency": "USD","issuer": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","value": "0"},"LowLimit": {"currency": "USD","issuer": "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC","value": "100"}}}}, {"ModifiedNode": {"FinalFields": {"Account": "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC","Balance": "999960000","Flags": 0,"OwnerCount": 6,"Sequence": 3},"LedgerEntryType": "AccountRoot","LedgerIndex": "A6B1BA6F2D70813100908EA84ABB7783695050312735E2C3665259F388804EA0","PreviousFields": {"Balance": "999990000","OwnerCount": 5,"Sequence": 2},"PreviousTxnID": "8FDC18960455C196A8C4DE0D24799209A21F4A17E32102B5162BD79466B90222","PreviousTxnLgrSeq": 5}}, {"ModifiedNode": {"FinalFields": {"Flags": 0,"Owner": "rEuLyBCvcw4CFmzv8RepSiAoNgF8tTGJQC","RootIndex": "C2728175908D82FB1DE6676F203D8D3C056995A9FA9B369EF326523F1C65A1DE"},"LedgerEntryType": "DirectoryNode","LedgerIndex": "C2728175908D82FB1DE6676F203D8D3C056995A9FA9B369EF326523F1C65A1DE"}}, {"CreatedNode": {"LedgerEntryType": "DirectoryNode","LedgerIndex": "D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA635204","NewFields": {"Owner": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","RootIndex": "D8120FC732737A2CF2E9968FDF3797A43B457F2A81AA06D2653171A1EA635204"}}}],"TransactionIndex": 0,"TransactionResult": "tesSUCCESS"},"status": "success","validated": true}
}
Ripple(瑞波)多重签名相关推荐
- Ripple(瑞波)服务器配置示例
rippled-example.cfg #内容 # # 1.服务器 # # 2.对等协议 # # 3.Ripple协议 # # 4. HTTPS客户端 # # 5.数据库 ...
- Ripple(瑞波)之交易清算
Ripple能展开的话题很多,包括瑞波币(XRP).共识机制算法(Consensus Process).路径算法等等,先撇开复杂的算法不说,先直奔主题,看看交易和清算Ripple怎么玩的,所以本文主要 ...
- Ripple(瑞波)杂项
Ripple Solutions Ripple Connect (real-time settlement of cross-border payments) Ripple Network ( ...
- Trustlines Network:以太坊上实现 Ripple 瑞波协议
2017年在法国巴黎举行的 EDCON 以太坊开发者会议上,我们介绍了Trustlines Network,它是建立在以太坊上的Ripple 概念的迭代. 在这篇博客文章中,我们将讲述这个项目的背景故 ...
- 瑞波Ripple概念解析-XRP账本概述(官方文档不完全翻译)
XRP账本概述 XRP账本是一个区中心化的加密账本,运行在P2P网络上.XRP是一个在世界范围内用来桥接多种货币的数字资产.Ripple负责账本的开发,及推动XRP为价值互联网做出关键贡献. 支付数字 ...
- Ripple(瑞波) JavaScript(node.js) 客户端接口库RippleAPI
介绍 RippleAPI是XRP Ledger的官方客户端库.目前,RippleAPI仅适用于JavaScript.使用RippleAPI,您可以: 从XRP分类帐历史中查询交易 无需连接任何服务器即 ...
- 瑞波(Ripple)服务器安装(官方文档)
瑞波服务器 XRP Ledger对等网络的核心服务器是rippled.任何人都可以rippled在网络后面运行自己的服务器,并保留XRP分类帐的完整副本.你甚至可以让你的服务器参与一致的过程. 本页面 ...
- 瑞波(Ripple)服务器安装
瑞波服务器 XRP Ledger对等网络的核心服务器是rippled.任何人都可以rippled在网络后面运行自己的服务器,并保留XRP分类帐的完整副本.你甚至可以让你的服务器参与一致的过程. 本页面 ...
- 瑞波Ripple概念解析-XRP账本业务(官方文档不完全翻译)
将XRP上到交易所 本文档描述了交换所需列出XRP的步骤. Alpha Exchange 为了便于说明,本文档使用名为Alpha Exchange的虚构业务来解释列出XRP所需的高级步骤.为了本文档的 ...
最新文章
- java产生随机数(学习)
- nginx + gunicorn + django的简单部署
- (十)Centos之文件搜索命令find
- 二 Array 数组常用操作方法
- mysql分布式安装可靠读写案列图解,高并发下的分布式锁-mysql篇
- python离散余弦变换_在python3下使用OpenCV做离散余弦变换DCT及其反变换IDCT
- java获取数组的最小值_Java 数组获取最大和最小值的实例实现
- 【算法】汉诺塔 移动
- 15 分钟 教你搞一个专属于你的域名邮箱
- 【原创】Magisk Root隐藏模块 Shamiko安装
- [CATARC_2017] 第一周
- 动态IP和静态IP有什么区别?
- Spring Boot 2.3.0配置Graceful-Shutdown,Readiness和Liveness
- pandas学习之电影评分(利用python进行统计分析)的学习笔记
- 恐怖系列丨互联网幕后攻防:咳血的独角兽二
- 苹果MACOS电脑MAC地址修改的方法
- to写日志or not to写日志,is a question.-.-
- HBase的数据模型和存储原理
- ENC1编码器插USB-4G卡托后如何获取IP并通过无线方式访问后台
- 逆向工程核心原理——消息钩取