主页 > imtoken钱包安卓版 > 信息安全从业者澳大利亚。 刘:谈谈比特币上的智能合约

信息安全从业者澳大利亚。 刘:谈谈比特币上的智能合约

imtoken钱包安卓版 2023-07-13 05:11:13

摘要:在9月7日举行的“BSV发展与商业生态大会”上,信息安全从业者Aus.Liu从黑客的角度分析了智能合约,列举了以太坊智能合约存在的三大问题。

比特币合约对冲锁仓_比特币是不是智能合约_比特币合约技巧

信息安全从业者澳大利亚。 刘

9月7日,比特币协会、OKEx、链得得在中国北京联合举办BSV发展与商业生态大会。 Canaan Creative 和 wework 作为协办方支持了此次活动。

本次活动是比特币协会(以下简称BA)设立中国区负责人以来的首次线下亮相,也是比特币SV在中国的首场官方活动。

作为一名信息安全从业者,Aus.Liu从黑客的角度分析了比特币之上的智能合约。 他列举了以太坊智能合约的三大问题:1、货币模型限制了商业模式; 2. 1.问题是链上定义的VM限制了开发; 第三个问题是复杂性。

经编辑,Aus.Liu演讲全文如下:

我是Aus.Liu,孙悟空在其他地方也被用作名字。 我是信息安全从业者,也是 BSV 的独立开发者。 这可能使我与其他开发人员不同,因为我习惯于采用一些黑客的想法。

黑客的想法是什么? 在我上学的时候,一些辩论队的同学找到我和我的室友,因为他们使用的计时软件是在倒数15秒时提醒我的,他们想倒数到30秒。 那么该怎么办? 室友说他可以在30秒内做出一模一样的。 我的思路是什么? 我说的是我可以通过底层的手段把程序里面硬编码的15改成30。

于是,我的室友成为了一名工程能力很强的优秀开发人员,而我成为了一名安全从业者,这是不同思维的结果。

有黑客思想的人,对比特币会有怎样不同的担忧? 我会更加关注底层的细微变化能带来什么样的可能性,发现别人想不到的各种使用场景。 因此,开发者普遍讨厌安全从业者。 刚开发完一个功能,边吃火锅边唱歌,发现一个奇怪的用法,然后就是开发的漏洞,只好加班加点。 作为一名具有安全背景的开发人员,我喜欢各种可能性,边界条件的简单改变可以产生很大的不同。

比特币合约对冲锁仓_比特币合约技巧_比特币是不是智能合约

回到比特币,我们用这个思路来讨论比特币上的智能合约。 BSV扩容解禁看似不起眼的变化,又会带来怎样的可能性?

从表面上看,似乎只是增加了容量,但这种容量的增加实际上带来了巨大的质变。 这是什么质变,和小编一起来探讨一下吧。

从演示开始

首先,我想从一个演示开始。 我们看到这个状态下的灯泡现在已经熄灭了。 当我们按下开关时,灯泡的状态变为亮起。 再次按下开关,灯泡将熄灭。 在任何可以访问 BSV 的地方,你都可以获得灯泡的当前状态。

这个演示是在链上的:

实际上,每一次按下开关的动作都会在BSV链上发送一个Tx,而这个Tx中包含了定义的按下开关的动作。 当需要获取灯泡的状态时,我可以通过BitDB获取所有的开关动作,我可以计算出灯泡当前的状态。 那么当前的灯泡是什么状态呢? 这完全取决于您按下开关的次数。 这实际上构成了链上状态,或者说是链上状态机。

记住这个演示,让我们看看链上存储。

确定性记录

许多人对 BSV 扩张的意义表示怀疑。 虽然目前上限已经扩大到2G,但实际有什么用呢? 很多人认为这只是意味着BSV可以用作网盘,而区块链网盘价格昂贵且效率低下。

比特币合约技巧_比特币合约对冲锁仓_比特币是不是智能合约

其实这种扩容只是网盘? 要回答这个问题,就需要回到一个更本质的问题,即——链上存储的数据是否只是纯粹的数据? 链上存储和普通云存储的本质区别是什么?

如果你足够敏锐,你会发现 PoW 是值得信赖的,不可篡改的。 一旦存储在链上,它具有与 PoW 相同的高确定性,并且可以公开访问。 云存储很难提供确定性和不可篡改的信任。 比特币上的数据存储实际上提供了这样一个不可篡改的、可以被公众访问的数据源。

那么,什么是数据? 数据不仅仅是静态文件,不仅仅是文本和视频。 事实上,一切都是数据。 用户的业务请求和服务器上运行的代码也是数据。 也就是说,数据本身就是一种状态,状态的表示也是数据。 世界上各种复杂的状态都可以标准化表示为数据,被区块链记录为历史,就像WeatherSV所做的那样,成为一种确定性的记录。

比特币所包含的记录的确定性是由熵来保证的,这是 PoS 或 BFT 难以实现的。 那么这种确定性记录能给智能合约带来哪些变化呢? 我们得先看看智能合约的本质,状态机。

确定性有限状态自动机

其实我们在讲智能合约的时候,到底什么是智能合约呢?

程序员可能知道一种叫做有限状态自动机或确定性有限状态自动机或 DFA 的东西。 这个东西其实就是各种程序的基础。

包括以太坊或各种智能合约在内的公链实际上是在构建一个接受输入并产生状态转换的状态机。 输入可以是交易或操作码。 链上的状态机接受输入并改变链上的状态,比如账户金额,或者链上的其他状态。

各种程序其实就是状态机。 比如前面的灯泡演示中,灯泡有开和关两种状态。 按下按钮是一种输入,它会在两种状态之间产生状态转换。

比特币合约技巧_比特币合约对冲锁仓_比特币是不是智能合约

如果我们从更精确的定义来看DFA是什么,它其实是一个五元组:一个非空的有限状态集、一个输入字母表、一个状态转移函数、一个起始状态和一组接受状态。

让我们用这个定义来反思链上的虚拟机。 当我们谈论链上智能合约时,我们需要什么? 我们想要的是一个可公开验证的确定性状态和一个确定性状态转移函数。 例如,当我们想要某种代币或合约时,我们真正关心的不是程序如何运行,而是想要的功能(比如转账)是否能够确定性地实现和验证,并且任何人都无法篡改.

在这个过程中,合约或链指定初始状态、接受状态和状态集,用户提供输入并被记录,并在共识中设置状态转换功能。 导致确定性状态。 一系列源自以太坊的智能合约区块链都是这样做的。

然而,在共识中定义状态转换函数存在几个严重的问题。

以太坊方式的智能合约问题

第一个问题是货币模型约束商业模型。 虽然图灵完备意味着任何程序都可以做,但是业务场景和货币模型总是很难匹配。

很多商业模式不仅不是货币模型,甚至很难用货币模型来表达,这使得传统业务很难在智能合约上发展,因为其他商业模型很难转化为货币模型。 以至于相对成功的智能合约往往仅限于天生适合货币模型的代币或数字资产等场景。 普通大众乃至开发者对智能合约的理解往往仅限于代币和数字资产。

第二个问题是链上定义的VM限制了开发。 为了区块链的运行和扩展,共识中的状态转换函数必须尽可能简单。 然而,在这种情况下,开发变得复杂。 尽管在技术方面会有很多有才华的人编写编译器,但在各种语言生态系统中复用组件仍然很困难。

这大大提高了智能合约的技术门槛,再加上模型的翻译,门槛更高,难以大规模开发(当然从增加职业收入的角度来说也不错从制造门槛)。 作为一个喜欢用JS的伪全栈工程师,我用JS写前端,用JS写后端,用JS访问数据库。 为什么不能使用Chrome V8引擎在链上运行虚拟机? 做不到,因为VM已经定义好了,不能自己选择。

比特币是不是智能合约_比特币合约技巧_比特币合约对冲锁仓

第三个问题是复杂性问题。 状态转换的计算在共识层,带来了严重的性能问题。 网络拥有大量的计算能力,但整个链条的处理能力还不如一台古老的家用电脑。 能否完全承载一个通用的程序是难点。

在很多商业服务中,单台高性能服务器都不能满足业务需求,更何况链上合约、高吞吐量? 基本不可能。 造成这些问题的根本原因是共识中定义了状态转移函数,所有节点都必须计算状态转移进行验证,否则无法保证状态的确定性。

状态决定论不需要计算

有如下公式:(1087357389+87890345434)*28 + 897733^21388233 - 73004832%3

它的结果是什么? 我不知道我算不算。 但我问你,它的结果是确定性的吗? 是不是无论谁计算,结果都是唯一的,不会改变? 事实上,我们不需要进行任何计算就知道结果是确定性的。 因为我们知道,这些操作都是确定的,用于计算的数字也是确定的。

如果你足够聪明,你可能已经明白我的意思了。 对于一个DFA,只要它的定义是确定性的,状态转移函数是确定性的,输入流也是确定性的,那么你不需要执行状态转移函数就知道执行后的状态是确定性的。

这种状态的确定性无需计算即可获得。 要计算的只是那些想知道具体结果的人,也就是对当前状态感兴趣的人。 因此,要达到智能合约的目的,只需要确定性地定义DFA及其状态转移函数,并生成确定性的输入流即可。

一旦确定了这些,链上的计算其实就没有必要了,因为不管是链上计算还是链下计算,在哪里计算都不会影响结果的确定性。 和那个计算一样,你在家里算还是在公园里算,都没有什么区别。

BSV扩容带来的本质变化就在这里,确定性,也就是PoW保证的确定性。

比特币合约技巧_比特币是不是智能合约_比特币合约对冲锁仓

BSV带来的全新智能合约可能

那怎么办呢? 原理其实很简单。 实际上,它是利用BSV存储的确定性来确定性地定义DFA,你得到的是一个不可篡改、可公开验证的DFA。 通过在BSV链上公开定义状态集、状态转移函数、起始状态和结束状态,并获得TX输入流的确定性排序方式,生成接受链上输入的链上智能合约。

这里面,能不能自己定义一些复杂的状态对象呢? 绝对可以。 将TX定义为输入时,是否可以使用自定义数据结构? 完全可以(不符合要求的TX是无效输入,也是一种输入,对应的状态转移不转移)。 定义状态转移函数时,能不能用你习惯的语言? 这很好,只要代码和 VM 都是确定性的。

灯泡的演示甚至是用 JS 编写的简单链上 DFA。 其实这些定义大部分都是JS代码(当然需要考虑组件的安全性,区块链历史查询不要信任第三方)。

至此,聪明人已经知道如何在BSV上实现这种智能合约了。 其实这就是Tokenized智能合约的思路之一,也是unwriter称之为Planaria Infinite State Machine的原因。

以太坊分片扩容计划的思路是从本质上摒弃链上计算,只让感兴趣的人或分片进行计算。 但遗憾的是,以太坊及其模仿者终究无法通过这种思路进行扩展。

为什么以太坊一定要做链上计算

简单的说,就是攻击的代价。 如果以太坊不执行链上计算来验证输入是否有效,就无法阻止攻击者用大量无效输入堵塞状态机,无限消耗计算资源。 零攻击成本将使状态计算在计算上不可行。

现在的以太坊虽然有Gas机制来处理无效输入,但是Gas机制也是依赖状态计算的比特币是不是智能合约,除非以太坊有外部的Gas机制不依赖EVM状态计算。 比特币(BSV)数据存储的手续费价格恰好从攻击成本的角度解决了这个问题。 即使是无效输入,也需要付出数据上链的成本,这实际上构成了智能合约不依赖于合约状态的Gas。

事实上比特币是不是智能合约,建立在比特币第二层之上并使用比特币作为 Gas 的 EVM 将是一个更理想的智能合约引擎。 每次想到这里,作为一个比特币原教旨主义者,我都不禁感慨,BTC本该成为智能合约的底层区块链,可惜被各种共识限制束缚住了。 今天的应用开发早在四五年前就应该繁荣起来,而不是看着Github上一堆四五年前就停止维护的比特币应用项目,感叹前人的智慧。

幸运的是我们有 BSV。