Internet Computer「Warped 黑客松「正在火热进行中,「DFINITY 技术入门系列」活动拉开帷幕,2021 年 11 月 25 日,ICP League 联合创始人 blockpunk 受邀作为首场嘉宾,进行《进入无缝的开发世界,快速入门 ICP》的主题演讲,查看视频:https://b23.tv/NpcgIUE
认识 DFINITY
互联网计算机是世界上第一个不受限制的、以 Web 速度运行的区块链。同时,它代表了除比特币和以太坊外的第三项重大的区块链创新。互联网计算机的网络可以做到无限扩展,并能以互联网的速度运行智能合约计算和数据,有效地处理和存储数据,并为开发者提供强大的软件框架。
通过使这一切成为可能,互联网计算机实现了对软件的彻底重新构想,提供了一种构建代币化的金融系统,乃至于传统的企业系统和网站的革命性的新方式。
DFINITY 将之前无法达到去中心化或者说运行不了的通用计算能力,赋能到了区块链领域,这是一个非常大的创新。
DFINITY 的开发团队
DFINITY 的创新能力吸引了很多强大的开发者加入,BLS 算法创始人之一、谷歌高级工程师 Ben Lynn,WebAssembly 虚拟机设计者之一、谷歌高级工程师 Andreas,最早的比特币 Asic 挖矿算法发明者 Timo ,身份验证加盟协议 Identity Mixer 发明人、IBM 首席研究员 Jan 等优秀开发者都加入了 DFINITY。
值得一提的是,目前众多公有链如以太坊、波卡等都考虑转换到 WASM 虚拟机,而 DFINITY 基金会工程师 Andreas 作为其发明者,参与了大部分 WASM 虚拟机相关的标准制定,目前正在推进的就是由 32 位 WASM 虚拟机扩展到到 64 位 WASM 虚拟机。
DFINITY 运行机制
首先 DFINITY 运行的基础是分布在世界各地的数据中心,独立的数据中心,或者是第三方搭建的节点站。
数据中心会通过客户端虚拟化产出很多的节点机器,然后这些节点会在一个随机数的选择下组成不同的子网,Canister 会在这些子网上运行。
Canister 是 DFINITY 体系里升级版的智能合约。子网可以理解成区块链的分片。
Canister – 智能合约
节点通过 ICP 协议组成了多个子网,子网上运行着众多 Canister。Canister 是一种升级版的智能合约,与以太坊智能合约的最大区别在于:以太坊上的状态都是在区块上公开可见,所以以太坊上的智能合约实际是状态更新机上的一串代码,其本身不包含状态的;但 DFINITY 架构下,每一个智能合约分配了一定的内存(目前 4 GB),如果你可以把 ICP 看成一台超级计算机,那么 Canister 就是计算机中的进程,而每一个 Canister 进程都包含了自己的运行内存,因此你可以把一些跟智能合约相关的数据封装在一个容器里面,这也是 DFINITY 上特有的存储方式。
ICP 中 Canister 的内存功能允许你把智能合约的状态、数据库甚至是前端数据,如游戏的资产等全部放在这个存储里。这就是 DFINITY 与以太坊最大的不同。
核心科技创新
链锁密码学技术(ChainKey)通过聚合签名,让子网节点产生一个唯一的公钥签名。这是 DFINITY 扩展多个子网,从而无限扩展性能的基础技术。
以太坊中是很多个节点竞相出块,每个节点将以自己的私钥去签名,因此,以太坊上就会产出大量的签名数据。而 DFINITY 上也由多个节点达成共识进行出块,每一个节点会对区块签名,但所有的节点的签名私钥来自一个子网的总私钥,一旦网络中收集的节点签名达到一个阈值,比如 51% ,就可以聚合出一个完整的子网签名,这条链从而获得了共识后的区块,这个过程就叫做 ChainKey 技术。
此外,DFINITY 正在研究通过该技术向比特币网络发送交易,此后,实现 ICP 上的智能合约甚至可以直接发送比特币乃至以太坊网络的交易。
网络神经系统是 DFINITY 提出的又一项创新,作为 DFINITY 的开放的算法治理系统,在这之上其实可以做很多金融的尝试。
第三大创新也就是之前提到的 Canister 智能合约,使 DFINITY 能够托管前端、后端、中间件的全栈。
最后,DFINITY 尝试用更先进和更安全的加密身份验证方法取代传统模式(用户名和密码),从而消除服务商窃取用户数据或跟踪用户活动的可能。
公链架构的新范式
以太坊 2.0 采用了分片技术,但其分片还是需要通过信标链进行交互,由于信标链的性能存在上限,那么其能支持的信息量有限,分片的链的数量也会有限,所以说以太坊 2.0 是解决阶段性问题的解决方案,并不是终极方案。还比如波卡的中继设计,等等。
只要存在总线、主链或者中继这类设计,都无法足够彻底地解决扩容问题,那么众多高价值应用如社交、流媒体、游戏等就难以实现。
DFINITY 是一种多子网架构,子网和子网之间没有从属关系的,没有一条总链去管理所有的子网,子网是一个平行关系。
而子网和子网之间的通讯是通过 ChainKey 技术对共识后的交易进行签名。因为子网内会有一个子网的共识,通过共识产出签名后的子网间交易,子网之间互相检查其他子网的签名来判断其是否合法,而每个子网的公钥是唯一的。只要通过 ChainKey 发送的消息,就默认为已经经过了子网的共识。在该模式下,子网的数据不再受限,唯一的上限是网络带宽,无限制扩容是可以实现的。
DFINITY 上线到现在已经 6 个月,从最初的 5 个子网,现在扩展到了 27 个子网,有 300 多个节点正在运行这 27 个子网,27 个子网上面已经托管了近 1 万多个智能合约 Canister。
对智能合约、中间件以及前端的托管
传统以太坊上开发合约需要将跟资产有关的代码部署到链上,但是由于用户不可能直接通过命令行去访问你的合约,也不可能或者通过手机、电脑直连一个以太坊主网的节点,所以必须在中间再做两层:一个前端,方便用户去使用程序;另一个是中间件,或者某一个钱包的服务,或者是 infura 这种标准化的服务,让用户能够实现快速读取。
遗留问题是,前端和中间件的部分依然是高度中心化。此外,如果想做一些复杂的逻辑,比如游戏的一些打金产出的逻辑,这些逻辑放到链上去的话,gas 费成本会非常高。此外,EVM 的虚拟机对一些运算产生限制,虽然以太坊是图灵完备的,实际上很多业务还是会选择在中心化服务器中实现,这样的话很难做到业务的可验证。以上就是在以太坊上做开发出现的问题。
而 DFINITY 里,可以把服务的前端、后端,甚至数据库,包括数据库相关的增删查该的操作全部都放到一个 DFINITY 智能合约中运行。通常我们可以把一个 Canister 作为前端,把另一个 Canister 作为后端,和前端的交互,用户直接通过他的终端,直接访问前端 Canister 进行交互。
开发者可以将前后端、中间件等全部都放到 DFINITY 上,实现无缝的网络,也不用担心成本问题。5GB 的数据在以太坊上存储的话大概需要付出 2.7 亿美金,在 SOL 上存储 5 GB 的数据至少需要 500 万美元。而在 DFINITY 上存储的成本只有不到 5 美金。
给开发者超能力
对于传统互联网的开发者来说,90% 的时间是在处理如服务器、文件系统数据库等组件之间的冲突,也就是我们常说的 dirty work。以太坊开发也有类似问题,实际上写合约代码、做业务逻辑的时间并不长,更多的是在前端与调用接等问题上。
但在 DFINITY 中可以全身心去做开发,你可以直接将代码部署到 ICP 的链上,就像在 github 上传代码一样,而一切都将在直接在链上永不宕机的运行。
Internet Computer 开发实操
创建 IC Motoko 标准项目
- 安装 rust:
curl --proto '=https' --tlsv1.2 -sSf [ https://sh.rustup.rs ]( https://sh.rustup.rs/ ) | sh (Windows Subsystem for Linux)
- 安装 dfx:
sh -ci "$(curl -fsSL [ https://smartcontracts.org/install.sh ]( https://smartcontracts.org/install.sh ))"
- vscode + motoko 插件
- Motoko 标准项目结构
IC Dapp 开发特性介绍
- Canister 数据存储有两种: 持久化存储与运行时存储
- Canister 也是一个 actor, 可以理解为典型的事件驱动模型,actor 也是一个状态机, 每个 canister 接收消息并保存到邮箱中, 然后串行处理邮箱中的信息,canister 某一时刻只处理一条信息, 没有并发问题
- 其中消息分两类, 一类是修改状态的 update 类消息,update 消息需要通 ICP 协议共识确定顺序, 处理消息的结果需要所有 canister 实例共识验证,canister 的状态也是确定的;
- 另一类消息是只读查询的 query 消息, 此类消息执行的结果不需要共识, 执行 query 消息的某个 canister 实例直接返回结果, 处理 query 消息的响应时间为毫秒级
- 处理 update 消息的响应时间约为秒级, 即使 query 消息有修改状态的代码, 消息处理完后状变化会丢弃掉
本地部署;–mode upgrade 参数
Dapp 部署到主网
水龙头网址: https://faucet.dfinity.org
部署主网命令: dfx deploy –network ic
部署主网命令: dfx deploy –network ic –no-wallet
不会自动生成 canister_ids.json,
需要登录 nns.ic0.app 并创建 canister,
同时把本地环境的 principal 加到新创建 canister 的 controller 列表中, 然后执行部署命令.
在项目目录上创建 canister_ids.json 文件写入 nns 上创建的 cainster id;
资源
DFINITY 开发文档: https://smartcontracts.org/
DFINITY 官方论坛: https://forum.dfinity.org/
DFINITY 中文社区 ICPL: https://www.icpleague.com/
DFINITY 官方代码仓库: https://github.com/dfinity
Motoko SDK 代码仓库: https://github.com/dfinity/motoko-base
Rust SDK 代码仓库: https://github.com/dfinity/cdk-rs
Awesome DFINITY: https://github.com/dfinity/awesome-dfinity
DFINITY 样例代码仓库: https://github.com/dfinity/examples
封面图片:DFINITY
免责声明:作为区块链信息平台,本站所发布文章仅代表作者个人观点,与 Web3Caff 立场无关。文章内的信息均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。