专注Chia
分享与XCH有关的资讯

Chia Network:汇总签名,Taproot,Graftroot和标准交易

【Chia在哪交易?】XCH如何交易,操作教程!

在Chia中,我们使用BLS签名来启用非交互式签名聚合。在这篇文章中,我将说明它如何适合整个系统,它提供了什么实际好处,以及我们的“标准”交易格式如何工作,以及主根和嫁接根到底是什么。

解释主根和嫁接的动机和背景不在本文的讨论范围内,因此,如果您不知道主根和嫁接在比特币中的工作原理,您可以阅读有关主根的动机和背景的说明,有关更多技术知识,请阅读这篇解释。细节以及嫁接根的解释

本文将介绍我们的“标准”格式交易,该交易在此处实现。该代码段用chialisp编写。

首先,对发生的事情有一个高层次的了解(关于交易如何在比特币中工作的一些背景知识)。在比特币中,持久状态称为UTXO套,在Chia中称为硬币套。比特币中的其他命名约定有些深奥,因此在Chia中,我们选择了更具描述性的名称。在Chia中,比特币的“ scriptpubkey”被称为“拼图”。在Chia中,比特币“ scriptsig”被称为“解决方案”。这两个概念在Chia中都更加强大。必须为难题传递解决方案,然后难题返回“条件”,即等同于交易中包含的信息的Chia,但它们是动态生成的,不会散列到将来的硬币的标识中。由于签名聚合解决方案,有些违反直觉的不包含签名。通常,解决方案包含要声明的条件的列表,难题将要签名的条件的声明添加到该列表中,这些条件必须包含在集合签名中。聚集签名是悬空的信息,这些信息包含在内存池和事务块中传递的事务中。创建交易块时,由于BLS签名不可交互地聚合,魔术中的所有交易聚合签名都重新聚合为单个聚合签名。

Bitcoin-with-segwit

与比特币的最大区别之一是每个硬币都有其自己的独立解决方案,这引发了一个问题,即如何将几种不同的花费和硬币创造捆绑在一起。他们的直接方法是声明其他硬币必须在其条件下用作交易的一部分。一个更优雅,更基本的技巧是仅释放其所有签名的集合。BLS具有以下特性:可以将任意数量的(键,值)对的签名表示为单个聚合签名。给定聚合签名不可能提取出任何单个签名。进行交易是完全正常的,其中一项输入(甚至可能是最小的一项)会使所有输出,而其他输入只是烧掉自己什么也不做。只要输出大小的总和等于输入大小的总和,就可以正常工作。只要只发布了汇总签名,其他任何人都无法仅靠硬币解决方案来烧掉大笔钱并自己赚钱。如果有人想以其他方式安全地花费单个输入,那么与他们最初签署的内容的任何偏差都将提供安全性。硬币花费也可以显式地相互交流并相互依赖,但这不是必需的。使用BLS,可以非交互式地聚合任意数量的聚合,这使每个Chia事务块都恰好包含一个聚合签名,而不管进入其中的内存池中的事务数量如何。只要只发布了汇总签名,其他任何人都无法仅靠硬币解决方案来烧掉大笔钱并自己赚钱。如果有人想以其他方式安全地花费单个输入,那么与他们最初签署的内容的任何偏差都将提供安全性。硬币花费也可以显式地相互交流并相互依赖,但这不是必需的。使用BLS,可以非交互式地聚合任意数量的聚合,这使每个Chia事务块都恰好包含一个聚合签名,而不管进入其中的内存池中的事务数量如何。只要只发布了汇总签名,其他任何人都无法仅靠硬币解决方案来烧掉大笔钱并自己赚钱。如果有人想以其他方式安全地花费单个输入,那么与他们最初签署的内容的任何偏差都将提供安全性。硬币花费也可以显式地相互交流并相互依赖,但这不是必需的。使用BLS,可以非交互式地聚合任意数量的聚合,这使每个Chia事务块都恰好包含一个聚合签名,而不管进入其中的内存池中的事务数量如何。

尽管塔普根(taproot)和嫁接根(graftroot)之类的功能绝不能直接内置在Chia中,但是实现它们所需的钩子就在那里,而且我们使用的是“标准”交易格式,我们建议大多数香草交易都坚持使用。事实证明,主根和嫁接根中的许多密码魔术都与尝试使用构成临时签名聚合的压缩方式有关。当聚合已经内置到系统中并一直使用时,这些功能的基本逻辑将变得更加直接。

描述的最简单的智能功能是MAST。chia链编程环境的基础语言是CLVM(Chia Lisp虚拟机或更通用的公共语言虚拟机),但是这是MAST看起来更像是Python伪代码的含义:

def my_mast_puzzle(solution):
    metapuzzle, metasolution = solution
    assert hash(metapuzzle) in [‘hashA’, ‘hashB’]
    return metapuzzle(metasolution)

除了非常简单和整洁外,这种递归合并的方法还具有隐私优势,即不会暗示树的深度或沿途树叶的深度。您可以通过使用类似的程序来加深理解,该程序对元元难题和元元解决方案加重税费,然后再加上元元难题,等等。

您可能会注意到,简单地调用一段作为代码传入的数据对eval的使用非常糟糕。在这种特殊情况下,哈希是预先检查的,因此即使使用不安全的语言也可以保证安全,但是这种clv程序在clvm程序中很常见,即使对于不受信任的代码也是如此,并且CLVM严格遵守,没有副作用也没有全局数据,从而使每个调用都严格地进行沙盒处理。

主根和嫁接根都希望短路智能交易的逻辑。大多数情况下,参与集体交易的每个人都进行合作,或者至少承认他们将被迫合作,因此您可以对硬币上可见的一个和交易的所有N个方使用N-of-N键在干净的箱子上签字,并用一个活板门盖住不干净的箱子。

Graftroot的核心是简单的委派。进行签名交易的最简单方法是将传入的解决方案视为条件列表,并要求该列表必须由汇总签名中的密钥签名,然后将其返回。

def my_simple_puzzle(solution):
    return [(‘aggregate signature’, ‘my_public_key’, hash(solution)] + solution

Graftroot的解决方案包含两个问题,一个元谜题和一个元解决方案,使此问题稍微复杂些。它称为元难题,将其传递给元解决方案,以获取条件列表作为响应。然后,它准备一个断言,即由硬币的密钥签名的元拼图位于集合中,然后将其返回。

def my_graftroot_puzzle(solution):
    metapuzzle, metasolution = solution
    Return [(‘aggregate signature’, ‘my_public_key’, hash(metapuzzle)] +
              metapuzzle(metasolution)

如果几个参与者想要参与智能交易,他们都可以共同签署要在不干净解决方案中使用的元谜题,然后着手开展业务,如果一切都最后一切顺利,请签署一个元谜题,它只返回他们都到达的条件并忽略元解决方案。

主根与嫁接根有细微的区别。它的最大优势在于,可以预先设置活板门条件,而无需与智能交易中的其他参与者进行协调来提前获取其签名。它需要在语言中内置一些额外的钩子来支持它,但是我们已经添加了这些钩子,并且对taproot trapdoors的支持成为了我们标准拼图格式的一部分。

Taproot-Pub-Key-Generation

Taproot-Clean-Path-Generation

在普通路径中,taproot似乎以普通方式使用普通公钥。在活板门的情况下,它揭示了另一个隐藏在公钥中的难题,然后为该难题提供了解决方案。将谜题隐藏在公钥中的方式是,原始公钥是由永远不会公开的私钥组成的,然后将公钥和谜题散列在一起以生成新的私钥。计算出与该私钥相对应的公钥,并将其与原始公钥的总和用于拼图的开放公钥。在正常情况下,签名者使用原始密钥进行签名,然后将该签名与另一个派生密钥中的一个进行聚合,以使其看起来像普通签名。在活板门的情况下,签名者揭示了其原始的公开密钥和活板拼图,并提供了该拼图的解决方案。仅从无前钥匙的活板门难题中派生公钥是不够的,因为这将不允许该密钥成为一个集合,并且如果使用活板门的情况将允许其他人抢先使用该钥匙。使用显示的非活板门私钥进行交易。

当然可以嵌套这些:隐藏的拼图也可以是标准格式,然后也支持主根和嫁接根。类似的技巧对于使整套可能的谜题变得更加有用。根谜题指出必须给它一个谜题,以揭示其哈希是两个值和一个元解决方案之一。然后,它验证谜题揭示的哈希,将其传递给元解决方案,然后将其返回。这些可以嵌套,导致对数深度到任何数量的可能的可替换叶子,并且花费最少的信息在花费硬币时就可以显示出来。

推荐:全球第二大交易所OKEx欧意,邀请链接: https://www.ouyi.run/join/1837888  能交易XCH,BZZ,BTC,ETH等等安全交易,新用户能开合约。
赞(2) 打赏
未经允许不得转载:Chia之家 » Chia Network:汇总签名,Taproot,Graftroot和标准交易

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

DIY Chia矿机,更便宜,更有乐趣

进入DIY矿机配置单

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏