不好意思,我不只是智能合约!

区块链安全 3年前 (2021) admin
821 0 0
不好意思,我不只是智能合约!

“互联网计算机(Internet Computer)上的DAPP可以以Web速度运行, 并且能够去信任化的调用彼此公开的API。这得益于Canister(容器), 部署到互联网计算机上且可以通过互联网访问的智能合约。”


不好意思,我不只是智能合约!

Canister
综述

Canister(容器)是互联网计算机的基础设施, 也是核心之一。

关于Canister究竟是什么?不同的人有不同的看法:

  • 以太坊开发者可能认为Canister是个智能合约

  • 博士生可能认为Canister是actor模型

  • 系统工程师可能认为Caniser是一个系统进程, 像在操作系统中一样

  • 虚拟机专家可能认为Cansiter是一个WebAssembly模块

不好意思,我不只是智能合约!

图为4只爱吵架的可爱小鸟

这些观点并不完整,但是将他们结合起来, 就可以得到 “Canister是什么” 这个问题的答案。
Canister
是智能合约

1. Canister中存储数据状态,数据状态只能通过区块链中的消息改变, 区块链遵守ICP协议。

2. Canister中代码的执行结果是确定性的, 可以通过审计区块链中消息的方式来审查Canister中的数据状态正确与否。

3. Canister拥有所有传统智能合约的特性, 并且与传统智能合约相比, Canister在构建软件服务的能力上更为出色。

不好意思,我不只是智能合约!


Canister
是Actor模型

Actor模型是并行计算领域中的数学模型:在响应消息时,actor可以维护自身状态并响应消息,创建更多的actor。由Dfinity主导开发的motoko语言就受到了actor模型的启发。

不好意思,我不只是智能合约!

Actor模型

不好意思,我不只是智能合约!
Canister与Actor模型的相似之处
1. 私有状态 :仅由Canister本身维护的数据状态;
2. 单独线程 :一个单独执行的线程, 无需基于锁的同步;
3. 通信 :与其他Canister进行异步通信;
4. 动态创建 :可以创建新的Canister;
5. 消息邮箱 :在Actor模型中, 每个actor都有一个邮箱地址来接受消息。Canister同样也有一个邮箱地址来接受消息, 这个地址看起来像一个IPV6的地址。
不好意思,我不只是智能合约!
Canister与Actor模型不同的是
1. Canister具有双向的消息传递。在Canister中,消息被分为请求消息与响应消息,请求消息可以被回复。
2. 一个独立的Canister只有一个执行线程用于升级数据状态,但是互联网计算机可以并行执行大量的Canister。这也是互联网计算机在性能上比大多数公链更好的原因。
不好意思,我不只是智能合约!
请求消息划分

互联网计算机对请求的消息进行进一步区分, 分为Update数据改变请求和Query数据访问请求。

  • 数据访问请求不改变数据状态。Canister可以同时处理成千上万的数据访问请求, 数据访问请求的响应速度可以达到毫秒级。

  • 数据改变请求会改变数据状态,需要节点达成共识。Canister对数据改变请求的处理速度受到区块链和单线程执行的限制。

Canister
是进程

不好意思,我不只是智能合约!
Canister与进程的相似之处
1. 内存边界:操作系统跟踪一个进程的有效内存范围,Canister的内存边界也受到互联网计算机控制。
2. 行任务当有任务需要执行时,操作系统的调度器开启一个进程来执行任务,互联网计算机则开启一个Canister来执行任务。
3. 数据状态操作系统维护进程的数据状态,互联网计算机则是维护Canister的数据状态,比如Canister的token,cycles余额,未完成的反馈,权限等等。

4. 功能支持:操作系统为进程提供功能支持,互联网计算机也提供了一些API给Canister:

  • 支付功能支持

  • Canister间通信与调用支持

  • 创建和管理Canister支持

  • 获取系统时间

不好意思,我不只是智能合约!
Canister与进程不同的是

1. 机数互联网计算机的特性是它提供了随机性来源。在未来, Canister将有能力通过API来对比特币/以太坊智能合约进行签名。

2. 崩溃容错一个Canister将被下载到一个子网的所有节点, 由这些节点共同维护。一个进程出现故障时, 它会崩溃, 而Canister遇到故障时则不会崩溃, 而是会回滚数据状态到故障前, 并且处理新的消息。
3. 中止Canister不能像进程一样中止, 它没有像exit()或者abort()这样的函数。Canister只能被它的控制者通过命令行或者其他管理工具移除(Canister控制者是一个用户或者具有管理权限的Canister)。Canister可以控制其他的Canister是在互联网计算机上建立自治服务的基础。
Canister
是WASM模块

Canister与一个WebAssembly模块实例十分相似, 因为互联网计算机就是使用WebAssembly来实现Canister的。

从技术上讲, Canister的代码部分就是一个引入系统API的WebAssembly模块。并且Canister可以暴露自己的API,其他Canister可以调用这些API。

根据WebAssembly规范 :一个模块实例是一个模块的动态表现, 通过它自身的状态和执行栈来完成。因此,一个Canister是一个WebAssembly实例, 而不仅仅是一个WebAssembly模块,这是一个重要的区别。

Canister使用正交持久性让数据状态永久保存,正交的意思是开发者无需主动保留,维护数据状态不被改变。

所有写入Canister线性内存的的数据都会被追踪:

  • 为了可以让崩溃的WebAssembly模块回滚数据;

  • 当Canister从故障中恢复时, 它将从别的canister中获取数据状态来恢复自己的数据状态。

使用WebAssembly给互联网计算机带来了许多好处:

  • Canister可以用任意可以编译为WebAssembly的语言编写(Motoko,Rust等),且可以互操作;

  • WebAssembly是确定性的(除了少数易排除的边缘情况);
  • WebAssembly拥有形式化的语义。

官方表示,未来将WebAssembly规范一起发展,在新特性足够成熟时添加对他们的支持。

不好意思,我不只是智能合约!

Canister
结语

软件Canister是互联网计算机的组成部分,互联网计算机的服务将由许多合作的Canister实现,未来一项拥有10亿用户的服务将可能需要数千个Canister来存储用户数据。

但这不是问题,Canister是为了拓展而设计的,随机时间的推移,Canister将随着拓展变得越来越强大,可以使用大量的Canister来实现服务。

不好意思,我不只是智能合约!

原文始发于微信公众号(ICPLabs):不好意思,我不只是智能合约!

版权声明:admin 发表于 2021年8月18日 上午10:20。
转载请注明:不好意思,我不只是智能合约! | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...