介绍

您可以将一个“SignerList”添加到Ripple帐户,以便签名的法定人数可以授权帐户的交易。SignerList具有与常规密钥相同的权限级别。(基本上,除了禁用主密钥或执行全局冻结之外,它可以执行所有操作。)您可以使用SignerList以及其他授权方法,也可以禁用主密钥并删除任何常规密钥,以便SignerList是唯一的授权账户交易的方式。如前所述,该帐户必须至少保留一种授权交易的方法。

SignerList的成员可以是“实际的”Ripple帐户或“幻影”帐户(未在分类账中出资的地址)。如果所引用的帐户存在于分类帐中,则可以使用常规密钥(如果已定义密钥)或主密钥(除非它被禁用)为多重签名的交易提供签名。如果该帐户不存在,则只能使用主密钥进行签名。即使引用的帐户启用了SignerList,多重签名中的每个成员都必须是单个签名,而不是另一个多重签名。

主要用例:

  • 双因素认证

    • 可能需要多个设备来授权交易。
  • 组管理一个Ripple帐户。
    • 包括必须合作签署交易的自动化流程组。只要这些流程的法定人数不受影响,账户就不会受到影响。

注意事项:

  • 如果有人更改其常规密钥或禁用其主密钥,则其未完成签名可能失效。他们需要构建新的签名。

协议更改:

  • 分类账中的新节点类型“SignerList”,它由一个账户拥有,并包含可签名的账户列表。

    • 一个帐户最多可以有1个SignerList。
    • SignerList中的每个成员都有一个权重值。
    • SignerList具有法定值。签名者的权重必须等于或大于授权交易的法定人数。
    • 重量和法定人数共同允许允许多个签名(如“所有成员”,“任何3个成员”,“任何两个成员加上特定成员”等等)的灵活要求。
    • 一个SignerList必须至少有一个成员和不超过八个成员。
  • 新的交易类型“SignerListSet”,它为账户指定一个SignerList提供了一种方式。
    • SignerListSet没有特殊的交易费用要求
    • SignerListSet可以添加,替换或从帐户中删除SignerList。
  • AccountSetSetRegularKey事务被修改,以便您可以禁用主密钥并在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分类帐交易的三种方式之一,同时还可以使用常规密钥和主密钥进行签名。您可以配置您的地址以允许这三种方法的任意组合来授权交易。

多重签署的好处包括:

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

要使用多重签名:

  1. XRP分类帐对等网络必须启用多重签名。
  2. 在您的帐户中设置一个签名者列表。
  3. 使用多个签名发送交易。

多签名的可用性

自2016年6月27日起对XRP总账协议的修订已启用多重签名。

如果您想要rippled在独立模式下使用新帐本进行多重签名,则必须强制启用MultiSign功能。您可以使用该feature命令检查MultiSign修订版的状态。

要强制启用多重签名功能,请将以下节添加到您的rippled.cfg

[features]
MultiSign

设置多重签名

要对来自特定地址的交易进行多重签名,您必须创建一个地址列表,以便为您的地址提供多重签名。该列表作为SignerList节点存储在XRP分类帐中。以下过程演示如何为您的地址设置SignerList:

1.准备一个受资助的地址

您需要一个可以发送交易的XRP分类帐地址,并且有足够的XRP可用。对于账户储备和交易成本而言,多重签名要求的XRP的数量通常要多于您使用的签名者和签名的数量。

如果您rippled以独立模式开始创建新的分类账,您必须:

  1. 为新地址生成密钥,或重新使用已拥有的密钥。
  2. 提交支付交易以资助创建帐户中的新地址。(发送至少100,000,000 滴XRP。)
  3. 手动关闭分类帐。

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对象。您必须指定有关此事务的所有信息,包括FeeSequence。还要将该字段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(瑞波)多重签名相关推荐

  1. Ripple(瑞波)服务器配置示例

    rippled-example.cfg #内容 # #    1.服务器 # #    2.对等协议 # #    3.Ripple协议 # #    4. HTTPS客户端 # #    5.数据库 ...

  2. Ripple(瑞波)之交易清算

    Ripple能展开的话题很多,包括瑞波币(XRP).共识机制算法(Consensus Process).路径算法等等,先撇开复杂的算法不说,先直奔主题,看看交易和清算Ripple怎么玩的,所以本文主要 ...

  3. Ripple(瑞波)杂项

    Ripple Solutions   Ripple Connect (real-time settlement of cross-border payments)   Ripple Network ( ...

  4. Trustlines Network:以太坊上实现 Ripple 瑞波协议

    2017年在法国巴黎举行的 EDCON 以太坊开发者会议上,我们介绍了Trustlines Network,它是建立在以太坊上的Ripple 概念的迭代. 在这篇博客文章中,我们将讲述这个项目的背景故 ...

  5. 瑞波Ripple概念解析-XRP账本概述(官方文档不完全翻译)

    XRP账本概述 XRP账本是一个区中心化的加密账本,运行在P2P网络上.XRP是一个在世界范围内用来桥接多种货币的数字资产.Ripple负责账本的开发,及推动XRP为价值互联网做出关键贡献. 支付数字 ...

  6. Ripple(瑞波) JavaScript(node.js) 客户端接口库RippleAPI

    介绍 RippleAPI是XRP Ledger的官方客户端库.目前,RippleAPI仅适用于JavaScript.使用RippleAPI,您可以: 从XRP分类帐历史中查询交易 无需连接任何服务器即 ...

  7. 瑞波(Ripple)服务器安装(官方文档)

    瑞波服务器 XRP Ledger对等网络的核心服务器是rippled.任何人都可以rippled在网络后面运行自己的服务器,并保留XRP分类帐的完整副本.你甚至可以让你的服务器参与一致的过程. 本页面 ...

  8. 瑞波(Ripple)服务器安装

    瑞波服务器 XRP Ledger对等网络的核心服务器是rippled.任何人都可以rippled在网络后面运行自己的服务器,并保留XRP分类帐的完整副本.你甚至可以让你的服务器参与一致的过程. 本页面 ...

  9. 瑞波Ripple概念解析-XRP账本业务(官方文档不完全翻译)

    将XRP上到交易所 本文档描述了交换所需列出XRP的步骤. Alpha Exchange 为了便于说明,本文档使用名为Alpha Exchange的虚构业务来解释列出XRP所需的高级步骤.为了本文档的 ...

最新文章

  1. java产生随机数(学习)
  2. nginx + gunicorn + django的简单部署
  3. (十)Centos之文件搜索命令find
  4. 二 Array 数组常用操作方法
  5. mysql分布式安装可靠读写案列图解,高并发下的分布式锁-mysql篇
  6. python离散余弦变换_在python3下使用OpenCV做离散余弦变换DCT及其反变换IDCT
  7. java获取数组的最小值_Java 数组获取最大和最小值的实例实现
  8. 【算法】汉诺塔 移动
  9. 15 分钟 教你搞一个专属于你的域名邮箱
  10. 【原创】Magisk Root隐藏模块 Shamiko安装
  11. [CATARC_2017] 第一周
  12. 动态IP和静态IP有什么区别?
  13. Spring Boot 2.3.0配置Graceful-Shutdown,Readiness和Liveness
  14. pandas学习之电影评分(利用python进行统计分析)的学习笔记
  15. 恐怖系列丨互联网幕后攻防:咳血的独角兽二
  16. 苹果MACOS电脑MAC地址修改的方法
  17. to写日志or not to写日志,is a question.-.-
  18. HBase的数据模型和存储原理
  19. ENC1编码器插USB-4G卡托后如何获取IP并通过无线方式访问后台
  20. 逆向工程核心原理——消息钩取

热门文章

  1. 软件以人为本3 - Scrum之每日立会1
  2. 机器人专业讲师与科技的转型思考
  3. 华为手机的备忘录,你真的会用吗?这4个小功能,很多人都不会用
  4. numpy.astype数据精度导致数据变化的问题
  5. 网络学习系列-VLANIF
  6. Vue element 自定义表单验证(手机号校验 )
  7. HTML5开发手机项目
  8. 一觉醒来,硬盘数据被远程删光
  9. node.js+uni计算机毕设项目文具商城微信小程序(程序+小程序+LW)
  10. uni-app中使用Towxml 3.0,小程序完美支持Markdown