在本次 AMA 中,我们有幸采访了 Dean Tribble。 Dean 是 Agoric 的首席执行官,自 80 年代以来,他参与了各种软件项目和初创公司,在科技领域有着广阔的发展历程。他一直在追求大规模联网计算机系统的愿景,这使他获得了智能合约。
Sara Pinto、Dean Tribble、Dimitar Bochvarovski、Pawan Sharma、Mónica Freitas 和 Limarc Ambalina 的这个 Slogging 线程出现在 slogging 的官方 #amas 频道中,为了便于阅读,已经过编辑。
嘿@channel,请和我一起欢迎我们的下一位 AMA 嘉宾, http: //agoric.com 的首席执行官 Dean Tribble。 Agoric 是一家开源开发公司,推出可互操作的权益证明链和经济。
请随时向 Dean 询问:
你好!谢谢你有我!
嘿,Dean Tribble,很高兴你能和我们在一起。我们可以先请您介绍一下您的背景吗?
我 15 岁时有了第一份计算机工作,17 岁时我的第一家创业公司(由 Atari 创始人 Nolan Bushnell 资助)。所以我从 80 年代就开始做软件和创业。其中大部分用于构建大型分布式系统。
几十年来,我一直在追求大规模联网计算机系统的愿景。我在 Xerox PARC(和我的几个同事在 Agoric)工作,研究早期的安全分布式编程语言和操作系统。 JavaScript 和 RUST 中的现代承诺源自这项工作。然后我去了 Xanadu 从事超文本(在网络之前)的工作。 1989 年的某个地方,我参与了第一个生产智能合约(是的,比 Vitalik 出生早 5 年🙂。
从那时起,我从事了许多大型系统的工作,从早期的 Java 经纪信息系统到我之前的数十亿美元支付工具的演出。通常是把新技术推向市场,让陌生人合作得更成功!
这就是让我首先进入智能合约的原因:“在多方之间执行类似合约安排的条款的软件”只会在世界上实现更多的合作。从 eBay 和 PayPal 到 AirBNB 和 Lyft 的所有业务都是这种业务。
这些都需要一个值得信赖的中介,而且我们知道它们并不总是值得信赖的🙂。但随后出现了区块链,它使不同司法管辖区的独立计算机能够运行相同的软件并验证彼此的工作,突然间你可以在没有受信任的中介的情况下运行智能合约业务。这就是让我为下一代区块链构建智能合约基础设施的原因。我们在这里🙂
这让我意识到我在那里跳过了 Sun 和 Microsoft。
在 90 年代的 Sun Labs,我们有一个项目来构建智能合约平台。这是导致 Agoric 的 JavaScript 智能合约平台元素的早期设计工作的重要组成部分。
在微软,我是 Midori(研究)操作系统的架构师,这是一个研究操作系统,使用与我们现在在 Agoric vm/kernel 中使用的相同的基于 aysnc 消息/ocap/promise 的架构方法。
什么职业🙂
为什么选择 JavaScript?我的意思是,我个人是一名 Web 开发人员,在我的日常生活中使用 JS,并且是我不会为其他任何事情而改变的语言,但是关于 JS 带来的问题有很多讨论,例如动态类型,以及内存管理容易出错...
值得一提的是,我是凯尔辛普森的忠实粉丝。他有关于 js 对象能力的有趣课程
我喜欢这个问题,因为它有令人惊讶和令人惊讶的答案。
不出所料的答案是“……是我不会为其他任何事情改变的语言……”。 1390 万开发者!我希望在世界上看到更多的合作,而智能合约是帮助实现这一目标的一个非常强大的工具。尽管如此,它必须可供世界上大多数程序员使用。如果要构建智能合约,您必须向 10k 昂贵的 Solidity 开发人员祈祷,这并没有多大帮助。找到一个好律师并以老式的方式更容易!因此,我们着手与开发人员会面,并授权他们构建智能合约。
令人惊讶的答案是 JavaScript 比大多数其他编程语言更安全,这在很大程度上要归功于我们的首席科学家 Mark Miller 的贡献。从一开始,他就一直在将我们早期的安全语言工作中所需的元素驱动到 JavaScript 中。他在 2015 年关于“基于能力的金融工具”的金融密码学论文展示了 E 编程语言的示例,您现在可以在 Agoric 上用 JavaScript 编写这些示例。
JS 更安全的部分原因也是历史的偶然:JS 语言是在 ECMA 中标准化的,而它的浏览器宿主环境是在 W3C 中标准化的。这对应于安全操作系统所需的用户模式/系统模式分离。您从未见过像委员会捍卫自己的地盘一样捍卫设计边界😄。因此,JS 程序/模块/任何东西获得系统中任何东西的权限的唯一方法是将其放入用于评估的全局对象中。在浏览器中,该全局包括
document
这样,而在节点中,全局包括fs
和process
之类的。 Mark 和其他人让 JS 保持在这条轨道上。还有一些附加功能(例如, freeze
) 我们能够评估 JS 代码(例如,在区块链或服务器中),它获得的唯一权限是我们提供的特定服务它无法访问文件系统、网络等。 这就是“强化的 JavaScript”。它是开源的,可在https://github.com/endojs/endo上用于 web2 和 web3,并且可以在任何标准 JS 环境中运行。它是 MetaMask 下一代钱包的支柱,用于 Salesforce 的 AppExchange,当然也用于我们的智能合约平台。
Dean Tribble,太不可思议了!你一路走好。我不得不问,以不太精通技术的人的名义,您能否详细说明区块链上的智能合约?你所说的可组合性是什么意思?
至于智能合约是什么:“在多方之间执行类似合约安排的条款的软件”。那它!因此 eBay 和 PayPal 以及 Lyft 和 StubHub 在很大程度上都是由“可信中介”部署的智能合约业务。因此,在区块链之前,智能合约的市值为 1T+ 美元。我们依靠中介来忠实地执行他们的软件,并且大多数交易都是在没有托管公司任何人为参与的情况下完成的。
一旦有了良好的库和平台,无需从头开始编写所有代码(例如,shopify、stripe 等,都提供了开发人员可以重用的组件),这些业务的起飞速度就会快得多。
为什么很难想出一个“可以在区块链上执行的代码”,这就是智能合约的一般意义(如果我错了,请纠正我),我们需要等待以太坊来解决方案?
但我最喜欢的组件模型示例是在 UI 领域(毕竟我曾在 PARC 的 Smalltalk 小组实习过 UI)。在 React/vue/etc. 之前,专家可以用 JavaScript 构建一些非常酷的东西。但是调试用原始 HTML/JS 编写的精美应用程序是一场噩梦(我仍然记得我上一轮尝试调试为什么当用户更改邮政编码时某些购买页面的税率没有改变)。 React 为用户界面组件提供了一个组件框架,它完全解决了构建精美 UI 的许多难题,并且使多方构建的组件能够非常好地协同工作。
结果是,在 React 出现后不久,与 React 前一年的专家相比,新开发人员可以构建更精美、更安全、响应更快、更有帮助的应用程序。这就是组件框架为您提供的。
我们的目标是一个提供相同类型支持的框架,但针对处理数字资产、定价等的智能合约(而不是用户点击和渲染)。在像以太坊这样的平台中,坦率地说,对于密码专家来说,安全隐患太高了,更不用说只是试图解决他们的业务问题的应用程序程序员了。我们的框架旨在保护开发人员免受这些危害。
因此,智能合约不是“可以在区块链上执行的代码”,因为在区块链之前的智能合约价值超过 1 万亿美元!
比特币本身就是一个智能合约;它是执行 BTC 转移规则的软件。这是第一个不需要可信中介的智能合约。
Eth 为运行其他人的软件带来了支持。对此有几个要求。区块链的黄金标准是
不同司法管辖区和不同管理领域的多台计算机都对数据、选择和计算达成共识。
我会打开它,然后谈谈为什么它很重要🙂。
嘿,Dean Tribble,您能否解释一下 Agoric 的报价安全性,它会退还原始资产加上交易费还是仅退还原始资产?
不同司法管辖区和不同管理领域的多台计算机都达成共识
意味着没有人、组织或政府可以单方面改变系统行为。他们将不得不同时破坏大多数机器(由其他方控制)以破坏计算的完整性。
关于数据、选择和计算。
数据:“Dean 账户里有 100 美元”
选择:“迪恩试图在拍卖结束前撤回他的报价。他是赢得拍卖并花掉了他的钱,还是拿回了他的钱?”
计算:“拍卖运行并确定迪恩将成为赢家”
新颖的硬技术部分是“全部达成共识”。如果您了解所有计算机(您不了解)并且您可以依靠它们不作弊(您不能),那么我们就知道如何计算选票并确保它是多数。拜占庭容错领域涵盖处理“如果他们作弊怎么办”。比特币最出色的见解是如何在您不了解所有参与计算机的情况下达成共识。
最后,为了让这些计算机都检查他们是否同意,他们必须真正同意!因此,同一个程序在多个地方多次使用相同的参数运行必须产生相同的答案(这称为“确定性”)。事实证明这很难!如果他们能看到时钟,他们的行为就会有所不同。如果他们可以看到任何内存地址,他们的行为就会有所不同。如果他们能看到垃圾收集发生的时间,……你就明白了。
所以 Solidity 有很多问题,而且是非常底层的,但它确实是确定性地执行的。我们强化的 JavaScript 让您可以确定地运行JavaScript !这将使更多开发人员可以访问所有这些
Pawan Sharma 在 Agoric 中询问“提供安全”。这是智能合约框架的关键属性之一。熟悉的安全属性是诸如内存安全和类型安全之类的东西,它们只是完全消除了一些大类错误。他们不能解决所有问题,但他们可以消除 80% 的错误。
提供安全是经济层面的安全属性。
首先是设置:在现有的区块链智能合约系统中,您通过向“随机数”(账户地址)汇款并希望有好事发生来执行交易。人们已经将资产发送(并丢失)到不是真实账户、错误账户的“地址”,然后发送到失败的合约等。这种模型既容易出错,又是可怕的用户交互。我想汇款给我的朋友约翰,而不是 0x234ag3453。
真正的生意涉及交换条件:“如果你给我演唱会门票 Y,我会给你 X 美元”。我们直接支持这一点。所以在我们的 API 中,客户端通过使
offer
s。每个报价都说明了他们want
, 他们会做什么give
他们在什么情况下可以exit
与他们的资产。然后,该报价中的付款进入框架本身,而不是智能合约。智能合约获得资产的唯一方法是提供要约所需的资产。 那么拍卖的安全报价是什么样的呢?
Zoe 持有所有资产,并通知了每个要约的合同。拍卖结束时,拍卖合约自动进行
reallocates
中标人的演唱会门票和中标人的钱给卖方。只有在中标对卖方来说足够并且音乐会门票确实是投标人出价的情况下,这种重新分配才会成功。这意味着拍卖的客户更安全。他们不需要阅读拍卖代码就知道他们得到了他们想要的票或他们的钱。
拍卖合约的创建者也很高兴:Solidity 中的许多危险都在于处理你不应该持有的钱。由于对从合同中返还的资金处理不力,实际上已经损失/被盗了 1B+ 美元。使用 Zoe 并提供安全性,您无需在合约中编写一行代码即可安全地处理该问题。
一个相关的属性是“支付活跃度”:记住每个关闭都有一个
exit
作为其条款的一部分。默认值(您不需要指定)是“只要我想;这是我的钱!好吧,它被称为“OnDemand”🙂 这只是意味着您可以随时退出,而且合约方面的任何错误或恶意行为都不会延迟您退出报价并取回您的资产。但是请注意,“您的资产”可能是在一些重新分配已经发生之后。如果您提供的是“我将为 X moola 购买最多 N 张门票”,那么它可能已经将其中的一些 N 重新分配给您并为那些收取了钱,这与want
你指定的。但是,一旦您的退出信号出现,Zoe 就会提取您的资产并将其归还给您,而无需合约进行干预。同样,如果合约崩溃、挂起等,Zoe 将退出您的报价。令人惊讶的是,有多少资金被无意中“锁定”在用户无法取回资金的合约中! Dean Tribble,非常感谢您的详细回答!那么智能合约的漏洞呢?如何减少它们?
院长 Tribble 很好的解释!!
对于减少智能合约漏洞的方法,我们讨论了
其他关键方法:
在以太坊和其他链(最近是 PolyNetwork)中,数十亿美元的损失来自“重入”。这就是如果有 2 个组件(或合约)A 计划调用 B 然后做某事 X,但 B 在到达 X 之前回调到 a(重新进入 A)。例如,A 是拍卖,一个B 要求投标退款。 B说“给我退款”,于是A查了一下,把退款发给了B,然后记录了它已经给B退款了。但是当B收到退款时,没有回复“谢谢”,它立即再次向 A 发送“给我退款”消息。由于 A 尚未记录 B 已收到退款,因此它继续并再次发送退款。再一次,B 用“给我退款”对此作出反应。 A 服务永远不会记录 B 已收到退款,因此 B 只会这样做,直到它耗尽 A 的帐户。这样说听起来很荒谬,但这正是 2017 年的错误,让人们想知道 Agoric 背后的技术是否可以帮助区块链。去年 6.6 亿美元的漏洞利用也是同样的基本问题。这是因为 Eth 的架构允许、支持,甚至需要重入。
Agoric 模型基本上是异步的,这意味着当 A 向 B 发送消息时,它不会坐在那里等待 B 做某事。它继续并完成记录它需要记录的内容。这意味着微不足道的例子并不那么微不足道,但这也意味着非微不足道的例子(如 DeFi)并不充满安全隐患。
嘿,迪恩特里布尔!很高兴有你和我们在一起!你认为在 DeFi 中建立经济的主要挑战是什么?
我懂了。感谢您的解释,院长 Tribble。重入会带来很多麻烦。有什么方法可以知道我们何时处理重入系统?
重新出租;它是系统架构的一部分,因此不能用不同的语言或帮助库覆盖。合约或合约组件之间的调用是调用返回(A 调用 B 并等待应答)的系统几乎总是可重入的。如果当 A 呼叫 B(“嘿,给我退款”)时,其他人可以呼叫 A,那么它很可能是可重入的。不使用异步消息传递(如agoric)或仅具有有限语义(如Kadena)的架构。
在 DeFi 中建立经济的挑战
Dean Tribble,通过 JavaScrip 开发人员扩展 web3 怎么样?你是什么意思? Agoric 正在做些什么?
这是我们工作的核心。很多人都在谈论扩展交易速度或块大小或延迟。但最难扩展的是开发人员基础。为了覆盖更大的开发者社区,我们不能指望他们会放弃当前的语言和工具,转而使用另一种编程语言。我们必须“在他们所在的地方与他们会面”。
所以用agoric:
细节很重要(例如,带有异步执行的 JavaScript 等),但优先级是让只想完成某事的开发人员成为可能也很重要。我们的平台应该像 JS 和 Node 一样成长:从头开始,因为它使程序员能够完成工作! :)
我的目标是“如果你可以为云构建一个 web2 应用程序,你就可以为 agoric 构建一个 web3 应用程序”。现在还早,所以我们还没有,但我们会的。
嗨 Dean Tribble 感谢您加入我们!我的问题是:为什么要开源?这种模式有什么好处和坏处,利弊如何?
开源的原因很多。
个人动机:我有机会参与一些了不起的项目。问题是一些最令人惊叹的作品并没有发布,所以我生活的那一部分有一些乐趣,有趣,但最终花费的宝贵时间要少得多。我们正在做的大部分工作最终是构建一个真正有用的技术的开源版本,我们已经在多个版本中构建了该技术,但无法轻松地将其推广到新项目中。
文化动机:JavaScript 是一个很大程度上开源的世界。我们需要大量可重用的组件。从历史上看,这种重用在开源环境中表现得最好:开发人员知道其他开发人员使用相同的组件技术堆栈,因此他们将在那里构建和贡献他们的组件。
最后:区块链的核心价值支柱是去中心化的高度完整性:智能合约在不同司法管辖区的独立运营商运行的多台计算机上执行。如果他们都在运行相同的闭源软件,那么我们基本上不会得到去中心化。实施者是失败的单一来源。它确实需要成长为社区拥有的代码。 Thatonly 真正适用于开源。
这是一个包装!非常感谢您在这里回答我们的问题,Dean Tribble。你有什么最后的想法,或者你有什么想要宣传的吗?
我们将启动我们的“mainnet1”,为跨链环境提供社区支持的稳定代币。快来参加http://agoric.com/discord的社区并注册新闻通讯和http://agoric.com/newsletter吧!如果您是 web2 开发人员,请查看 endojs。感谢您的款待!
当然还有我们的 Agoric 公告频道,
电报( https://t.me/agoric_ann )和推特( https://twitter.com/agoric )。