Multisignature (多方签名)

说明

交易签名

POCChain使用签名作为授权。 交易总是需要至少一个公钥的授权才能被视为有效。 通常,交易只需要来自源帐户的公钥的授权。

通过使用密钥对交易对象内容进行加密签名来创建交易签名。 POCChain目前使用ed25519签名方案,但也有一种添加其他类型的公钥/私钥方案的机制。 具有附加签名的交易被视为具有来自该公钥的授权。

在两种情况下,交易可能需要多个签名。 如果交易具有影响多个帐户的操作,则需要来自每个相关帐户的授权。 如果与交易关联的帐户具有多个公钥,则交易还需要其他签名。 有关示例,请参阅操作指南

Thresholds 阈值

操作属于特定阈值类别:低,中或高。给定级别的阈值可以设置为0-255之间的任何数字。此阈值是授权该级别的操作所需的签名权重。

假设Diyang将其中一个帐户的中等阈值设置为4.如果该帐户提交包含付款操作(中等安全性)的交易,则交易的阈值为4 - 其上的签名权重需要大于或等于4为了运行。如果Diyang的主密钥 - 与识别其拥有的帐户的公钥对应的密钥 - 的权重小于4,则不能在没有其他签名者的情况下授权交易。

如果存在任何剩余签名,则一旦满足签名阈值,则该交易被视为具有太多签名,这导致失败的交易,即使剩余签名有效,即对于使用N个签名签名的交易,如果达到阈值如果N> K,使用K签名则交易将失败。

每个帐户都可以设置自己的阈值。默认情况下,所有阈值级别都设置为0,并且主密钥设置为权重1.Set Options操作允许您更改主密钥的权重并添加具有不同权重的其他签名密钥。

安全性低 (低阈值):

  • 交易处理
    • 收取费用或更新源帐户的序列号
  • Allow Trust 操作
    • 用于允许人们从此帐户持有信用额,而不会泄露启用此帐户付款的密钥。
  • Bump Sequence
    • 直接修改帐户的序列号

中等安全 (中阈值):

  • 全部other operations

高安全性 (高阈值):

  • Set Options以更改签名者或阈值
    • 允许您创建一组授予或撤消帐户访问权限的签名者。
  • Account Merge 以合并帐户

对于大多数情况,建议设置阈值,low <= medium <= high

其他签名密钥

帐户由公钥标识。 与此公钥对应的私钥称为主密钥。 可以使用Set Options操作将其他签名密钥添加到帐户。

如果主密钥的权重永远更新为0,则主密钥被视为无效密钥,您无法使用它签署任何交易(即使对于阈值为0的操作)。 如果帐户中列出了其他签名者,他们仍可继续签署交易。

“签名者”是指主密钥或稍后添加的任何签名密钥。 签名者被定义为对:公钥,权重。

主密钥之外的每个额外签名者都会增加帐户的最小余额

替代签名类型

要启用某些高级智能合约功能,还有一些其他签名类型。 这些签名类型也具有权重,可以与普通签名类型类似地添加和删除。 但是,不是检查加密签名以进行授权,而是使用不同的方法来证明网络的有效性。

预授权交易

帐户可以通过将未来交易的散列添加为帐户上的“签名者”来预授权特定交易。 为此,您需要事先使用正确的序列号准备交易。 然后,您可以获取此交易的哈希值并将其作为签名者添加到帐户。

正确应用匹配交易时,将自动从帐户中删除此类签名者。 如果出现错误,或者从未提交匹配的交易,则签名者仍然保留,必须使用Set Options操作手动删除。

这种类型的签名者在托管帐户中特别有用。 您可以预先授权两个不同的交易。 两者都可以具有相同的序列号但不同的目的地。 这意味着只能执行其中一个。

Hash(x)

添加hash(x)类型的签名允许任何知道x的人签署该交易。 这种类型的签名者在原子交叉链交换中特别有用,这是区域链协议(如lightning networks)所需要的。

首先,创建一个随机的256位值,我们称之为x。 可以将该值的SHA256哈希添加为hash(x)类型的签名者。 然后,为了授权交易,将x添加为交易的签名之一。 请记住,只要交易以x作为签名提交到网络,x就会为全世界所知。 这意味着任何人都可以使用hash(x)签名者在该点签署该帐户。 通常你希望有其他签名者,所以有人必须有一个特定的密钥并知道x才能达到授权帐户交易所需的权重阈值。

信封

交易信封使用一组签名包装交易。 交易对象是签名者实际签名的事情。 从技术上讲,交易信封是在网络中传递并包含在交易集中的事物。

授权

要确定交易是否具有运行所需的授权,将累计交易信封中所有签名的权重。 如果此总和等于或大于为该操作类型设置的阈值(见下文),则授权该操作。

这个方案非常灵活。 您可以要求许多签名者授权来自特定帐户的付款。 您可以拥有任意数量的人可以授权的帐户。 您可以拥有一个授予访问权限或撤消其他人访问权限的主密钥。 它支持任何m的n设置。

操作

例1:锚点

您运行一个希望保持其发布密钥脱机的锚点。 这样,一个坏演员不太可能得到锚的钥匙,并开始不正当地发放信用。 但是,您的主持人需要通过运行Allow Trust操作来授权持有信用的人。 在向帐户发放信用额度之前,您需要验证该帐户是否正常。

Multisig允许您在不暴露锚点主密钥的情况下完成所有这些操作。 您可以使用Set Options操作向帐户添加其他签名密钥。 此附加密钥的权重应低于锚帐户的中等阈值。 由于Allow Trust是一种低阈值操作,因此该额外密钥授权用户保留您的锚点信用。 但是,由于Payment是一种中等阈值操作,因此该密钥不允许任何妥协您的锚点的人发放信用。

您的帐户设置:


    master key weight: 2
    additional signing key weight: 1
    low threshold: 0
    medium threshold: 2
    high threshold: 2

                        

示例2:联合帐户

您想与Bilal和Carina建立联合帐户,以便任何人都可以授权付款。 您还想设置帐户,以便在您选择更改签名者(例如,删除或添加某人),高阈值操作时,所有3人都必须同意。 您将Bilal和Carina作为签名者添加到联名帐户中。 您还可以确保所有关键权重都清除高阈值,但只有一个清除中等阈值。

联名帐户设置:


    master key weight: 1
    low threshold: 0
    medium threshold: 0
    high threshold: 3
    Bilal's signing key weight: 1
    Carina's signing key weight: 1

                        

示例3:公司帐户

贵公司希望建立一个帐户,要求6名员工中的3名同意该帐户的任何交易。

公司帐户设置:


    master key weight: 0 (关闭所以没有员工这个帐户不能做任何事情)
    low threshold: 3
    medium threshold: 3
    high threshold: 3
    Employee 1 key weight: 1
    Employee 2 key weight: 1
    Employee 3 key weight: 1
    Employee 4 key weight: 1
    Employee 5 key weight: 1
    Employee 6 key weight: 1

                        

示例4:费用帐户

您完全控制了一个费用帐户,但您希望您的两个同事Diyuan和Emil能够通过此帐户授权交易。 您将Diyuan和Emil的签名密钥添加到费用帐户。 如果Diyuan或Emil离开公司,您可以删除他们的签名密钥,即高门槛操作。

费用帐户设置:


    master key weight: 3
    low: 0
    medium: 0
    high: 3
    Diyuan's key weight: 1
    Emil's key weight: 1

                        

例5:自定义货币

您想要发行自定义货币并确保不会再创建任何货币。 您创建一个源帐户并向持有帐户发放最大货币金额。 然后,将源帐户的主要权重设置为低于中等阈值 - 源帐户不能再发行货币。

来源帐户设置:


    master key weight: 0
    low threshold: 0
    medium threshold: 0
    high threshold: 0

                        

请注意,即使此处的阈值为0,主密钥也无法成功签署交易,因为它自身的权重为0,这使其成为无效的签名密钥。