给以太坊开发者介绍互联网计算机
本期概要
对很多开发者而言,第一次接触 IC 时,会因为 IC 的运作机制与传统区块链技术栈有所不同而产生许多误解,本文将解释大多数开发人员遇到的疑问,并介绍互联网计算机的差异化功能。
✦
IC 对比以太坊的差异化功能
✦
对很多开发者而言,他们第一次接触智能合约平台是通过以太坊。因此,当开发人员接触互联网计算机(IC) 后,也会保留在传统区块链技术栈的惯性,会先入为主地理解 IC 区块链,但实际上 IC 的运作机制和我们想象的有些差异。
本文将解释大多数开发人员遇到的疑问,并介绍互联网计算机的差异化功能。由于以太坊和 IC 的属于略有不同,这里先给以太坊的开发者一个对照:
合约 → 容器
gas → cycles
分片 → 子网(不完全正确,因为以太坊目前只考虑数据分片)
验证者节点 → 副本
✦
互联网计算机的简单介绍
✦
在深入了解具体差异之前,首先得简要介绍整个 IC。IC 是一个由多个独立子网区块链组成的网络,但合约可以跨子网无感地交互。这允许通过不断添加子网来水平扩展 IC。
子网由网络神经系统 (NNS)管理,该系统本质上是在初始子网(也称为 NNS)上运行的去中心化自治组织 (DAO)。
IC 有一个主要的实用代币:ICP,可以质押在 NNS 中以参与治理,可以转换为 cycles 才支付 IC 上的资源消耗。
IC 上的合约称为容器,包含WebAssembly (Wasm)字节码。这允许开发人员使用多种编程语言创建合约。此外 Motoko 是一种专门设计用于在 IC 的 actor 模型中编写容器的编程语言。
如果您想深入了解互联网计算机的机制,请查看以下资源:
互联网计算机技术白皮书
“工作原理”系列(包含许多深入的文章和视频)
开发者文档
互联网计算机百科
ICPL 的开发者入门页面
开发者论坛和Discord
✦
以太坊和互联网计算机的区别
✦
事不宜迟,我们将深入探讨以太坊和 IC 之间的一些显著差异。我们根据以下类别阐述这些差异:
用户体验
开发者体验
可扩展性和成本
隐私
差异化能力
用户体验
外部帐户不必支付gas费
IC 实施了一种“反向gas”模型,其中合约必须周期性地为其资源支付费用。因此,dapp 的用户不需要钱包或代币来与 dapp 交互。尽管如此,仍然可以使用 Internet Identity 对用户进行强身份验证,这是一种基于Web 身份验证标准的加密身份验证系统。
每个容器都有一个cycles余额,并且余额可以由任何其他容器补足。当然,你也可以要求用户在 ICP 中支付费用,然后让你的容器将 ICP 转换为 cycles,本质上与以太坊的正向 gas 模型一致。因此,IC 在这方面更加灵活。
用户可以通过浏览器与 IC 交互
用户与以太坊上的应用程序之间的交互通常如下所示:
用户将浏览器指向应用程序的域名。
应用程序的前端由传统的中心化服务商提供托管。
来自区块链的动态数据通常由应用程序自己或 Infura 等服务提供商提供的中心化后端代理。
用户使用其钱包连接到应用程序。
前端起草交易并要求钱包签署并提交交易,即使在非金融应用的情况下,用户的钱包中也需要有 ETH 来支付 gas 费用。
用户批准使用钱包,钱包提交签名的交易。
用户等待(取决于网络的当前使用情况和提供的费用)从 10 秒到几分钟不等,直到交易被确认。
一些核心创新的互相结合,使用户可以安全地与 IC 上的应用程序交互,而无需设置钱包,无需购买加密货币,也无需依赖任何中介:
chainkey技术和子网允许以更低的成本,更轻量级地验证。
反向 gas 模型允许合约预加载 gas 以降低用户进入门槛。
Internet Identity 允许使用 WebAuthen 和授权机制,在隐私保护下,对 IC 上的服务进行身份验证。加密过的秘密由安全硬件管理。
边界节点和 certified asset 合约,允许直接在合约中部署前端,提供服务。
那么与 IC 上的 dapp 交互是什么样的呢?
用户将他的浏览器指向应用程序的域名,该域名或者直接是合约地址+ic0.app 的域名,浏览器将被重定向到 ic0.app 域。
用户将看到安装了一个 service worker ,它使用Java Script 代理来验证源自 IC 合约的 certified asset。在浏览器通过本地下载或者扩展原生支持 IC 前,service worker 机制是一种解决方法。
要求用户使用 Internet Identity 或其他身份验证方法登录。
用户无需支付任何费用,即可与 dapp 进行交互。状态变化的更新需要几秒钟的时间,并且可以通过使用默认更新的 UI 模式对用户隐藏。
可以从 IC 的生态库中尝试一些 IC 上流行的 dapp,自己试一试。
开发者体验
合约默认可升级
在以太坊上,合约是不可变的。如果合约存在错误,开发人员几乎无能为力。这导致了像代理合约这样的变通办法,但也给用户带来了额外的复杂性和风险。
在 IC 上,合约默认是可变的。每个合约都有一个关联的控制器列表,这些控制器被授权可升级合约。通过将控制器设置为空或黑洞地址,这个合约将无法再被修改。
在 IC 社区中更提倡,将大多数合约将由去中心化自治组织 (DAO) 管理,就像 IC 本身一样。因此,DFINITY 基金会正在开发一个服务神经系统(SNS),一种可定制的组合解决方案,用于管理 IC 上的服务,灵感来自管理 IC 的网络神经系统(NNS)。
合约间调用是异步的,不是原子性的
以太坊虚拟机 (EVM) 是同步的,事务是原子性的。这意味着如果用户发送交易,则交易要么完全执行;要么状态完全回滚,不发生任何更改,但会消耗交易的 gas。这与交易中涉及的合约数量无关。这一特性带来了一些有趣的创新,例如闪电贷。但由于整个以太坊网络作为一个单一进程,因此严重限制了可扩展性。
在 IC 上,合约间调用是异步的。每次await在合约中使用时,状态都会被提交。万一函数陷入困境,状态只会回滚到最后一次出现的 await。可以在此处(https://internetcomputer.org/docs/current/developer-docs/build/languages/motoko/actors-async/#traps-and-commit-points)阅读更多信息,还有一篇很棒的论坛帖子,介绍了有关 DeFi 的不同模型。
合约用尽 gas 时将被删除
在以太坊上,合约是永久的。虽然这有一些优点(让开发人员和用户放心),但它也有相当大的缺点(可扩展性有限)。以太坊的状态正在无限增长,开发人员几乎没有动力在状态中释放空间。因此,尽管许多项目早已被放弃,但以太坊的状态中仍然存在 2017 年以来的所有 ICO 代币数据。
在 IC 上,合约根据其实际资源消耗来消耗周期。即使不会调用合约,它们也会消耗一些 cycles,尽管很少。这对于平台的可持续性很重要。从以太坊到 IC,开发者需要考虑到 cycles 地消耗,不然合约会被删除。但是,IC 中内置了两种有效的保护措施。
有一个inspect_message功能可以让合约自动检查传入的消息(即来自 IC 外部的消息)并决定他们是否要处理该消息,这种自动检查是不收费的。
IC 可以冻结容器,使其自动拒绝所有调用,并且只需支付基本维护费用。每个容器都有一个freezing_threshold,开发者可以以秒为单位设置冻结的期限。默认freezing_threshold大约为 30 天,这让开发人员或用户有足够的时间在容器被垃圾收集之前进行充值。
尽管如此,如果你想在 IC 上实现自主服务,你必须考虑它的经济可行性,否则它会在冻结周期之后被抹去。
gas 费是可以测算
在 EVM 中,具体操作(操作码)具有以 gas 衡量的明确成本,但 ETH 与 gas 之间的汇率完全由市场定义。用户可以定义愿意在交易中支付的 maxFeePerGas ,并且单个矿工决定它是否认为这个提议可以接受。由于以太坊的吞吐量非常有限,gas 的价格会随着需求而剧烈波动。此外,由于 ETH 的当前市场价格,对法币的实际价格更加难以预测。这导致服务的运营成本无法预测,一些智能合约钱包服务一直很受这个问题困扰。
与以太坊中的 gas 类似(但比以太坊更广泛),IC 对各种资源有一套固定的cycles价格。然而,主要区别在于周期价格与特别提款权挂钩,特别提款权基于一篮子世界主要货币。
1 SDR = 1 万亿个 cycles
SDR 和 ICP 之间的汇率由 NNS 管理。因此,运行合约的实际成本是相对稳定和可预测的,并且独立于 ICP 的当前市场价格。
ICP 不是系统底层 token,而是上层合约实现
ICP 在 IC 中有两个重要作用:
它可以被燃烧以创建支付 IC 资源所需的 cycles。
它可以锁定在 NNS 神经元中,参与治理。
但是,ICP 不会出现在系统状态中,而是构建为运行在 NNS 子网上的合约。可以在此处(https://internetcomputer.org/docs/current/references/ledger/)和此处(https://www.youtube.com/watch?v=im5HBRd3mqo)找到有关 ICP 账本合约的更多信息。
可扩展性和成本
48 字节足以验证 IC 链的状态
验证 EVM 状态是一个资源密集型过程,节点必须通过该过程验证整个区块链的源头。除了当前状态的相关部分之外,还可以有轻节点仅验证头链(尽管它会永远增长),但基础设施尚未建立。因此,大多数用户依赖中心化 API 来访问以太坊状态,例如 Infura。
相比之下,IC 允许客户端(用户手机上的浏览器)使用恒定的 48 字节公钥来验证状态。这个公钥可以被硬编码到浏览器等软件中,甚至是物联网设备等硬件中,让它们与 IC 上的合约安全地交互。
IC 可以水平扩展
IC 是一个多子网网络,合约可以在其中无感地跨子网交互。随着互联网计算机需求的增加,可以通过向 NNS 发起提案来添加额外的子网,从而提高性能。
合约存储便宜几个数量级
以太坊尚未实现分片(特别是存储分片),网络中的每个节点都需要存储和执行每个合约和每个交易。
在 IC 上,只有特定子网中的节点才会复制执行和状态。虽然与以太坊相比,这可能会降低安全性,但它仍然比具有可比成本的传统 Web 服务更安全。在以太坊上存储 1 GB 大约数亿美元,在 IC 上存储 1 GB 每年只有需要花费几美元。这允许在 IC 上运行整个 Web 应用程序、音乐甚至视频,而不仅仅是一些后端逻辑。
有关 IC 常见成本的概述,请查看计算和存储成本文档。
通常不需要检查旧区块
Chainkey 技术允许新的验证者节点使用非交互式分布式密钥重新共享快速同步状态并加入验证者组,而不是从创世开始同步和验证区块。因此,节点可以每隔几分钟安全地剪除旧链。
然而,对于某些应用程序,仅确保所有状态转换已由至少 2/3 的节点授权是不够的,还需要审计跟踪。例如 ICP 账本和 NNS。在这种情况下,审计跟踪是在应用程序上实现的,即智能合约层。
因此,与以太坊相比,合约可以访问审计跟踪,而不仅仅是外部观察者。
但是,将来会有两种类型的子网:私有子网和公共子网。对于公共子网,观察者可以获取原始块数据。第一个公共子网将是神经网络系统子网本身。
隐 私
外部帐户不是全局状态的一部分
以太坊的世界状态由外部账户(用户)和内部账户(合约)组成。每个账户都有一个关联的以太坊余额。
在 IC 上,只有容器是全局状态的一部分。每个容器的 principal 都有一个关联的 cycles 余额,默认情况下不公开。这在隐私层面具备优势,因为用户可以以经过身份验证的方式与 IC 上的容器交互,而无需在公共状态下披露其 principal ID。缺点是用户不能直接持有 cycles,而是需要像 cycles 钱包这样的容器代持有。
全局状态只有部分公开
在以太坊上,每个人都可以运行一个完整的节点,因此一切状态都是公开的。隐私只能通过将数据保持在链外或使用密码学来实现。
在 IC 上,节点由 NNS 授权,只有部分状态是公开的。除了合约开发者为合约本身定义的 API 外,以下数据是公开的:
合约所在的子网
合约的名称
合约 WASM 模块的哈希
合约的控制者
特别是,合约的实际字节码和 cycles 余额都不是公开的。但是,如前所述,IC 将来会支持公共子网。这些子网将使原始 IC 的区块数据可用。
差异化能力
合约可以自己触发
在以太坊上,每个状态变化都必须由外部账户触发。然而,在 IC 上,容器可以使用由 IC 触发的心跳功能。这开辟了许多新的可能性,一个简单的示例是 cron 服务。
合约可以访问随机数
IC 独特的共识算法可以作为随机数的来源,这种随机性可供合约使用,并可用于彩票或游戏等应用程序。
合约可以持有签名
在以太坊上,每个合约都是公开的。这意味着合约不能保存私人信息,因此不能签署消息,因为没有办法安全地存储私钥。
IC 的共识机制使用称为阈值签名,验证者节点协作创建(BLS)签名,而整个私钥本身根本不存在。
在即将推出的功能中,合约将提供类似的机制,请求 IC 网络为其生成阈值 ECDSA 签名。这些签名将像常规 ECDSA 签名一样在 IC 之外进行验证。这意味着您可以使用 IC 上的合约签署以太坊或比特币交易,或者您可以创建 JWT、verifiable credentials 或 x.509 证书。
合约可以调用 Web 服务
如果你需要以太坊上来自外部世界的数据,你需要将这些信息输入以太坊合约的预言机。在 IC 上,很快就可以从合约内部直接调用 Web 服务,而无需第三方预言机。可以在论坛(https://forum.dfinity.org/t/enable-canisters-to-make-http-s-requests/9670)上阅读有关此功能的更多信息,或者查看社区对话(https://www.youtube.com/watch?v=n_LFCc0ws6o)的视频。
原文作者:Dominic Wörner
原文链接:https://medium.com/dfinity/the-internet-computer-for-ethereum-developers-3331b50db31b
小助手微信号
入群请添加
联系我们
ICPL 官网
https://icpl.app
ICPL Twitter
https://twitter.com/icpleague_com
ICPL Medium
https://medium.com/icp-league
ICPL Telegram
https://t.me/ICPL_en
ICPL 论坛
https://icpleague.com