查看原文
其他

来自IC生态早期原住民的构建旅程

DfinitySZ DfinitySZ 2022-03-21



文章来自于|DBOX

投稿、转载请联系|DfinitySZ小助手


从Web诞生之际/Web1.0的静态文本和图像到Web2.0的兴起,历时30年发展,迎来了当下人人可交互的互联网时代,在这个时代互操作性产出了广泛的应用场景和商业化价值,但却以大型互联网公司/中心化主导。每一个大型互联网公司都在无所不用其极的建立数据护城河,作为用户的我们仅拥有了产品的使用体验,我们所产生的数据足迹在本质上从来都不归我们所有。Web3.0的到来虽然在一定程度上打破了数据孤岛问题,但要彻底贯彻Web3.0愿景还有很长的一条路要走。


 

在贯彻Web3.0愿景这条道路上,Internet Computer选择了一条创新的道路|重新构想区块链架构奠定Web3.0的基础,包括为智能合约提供无限可扩展的架构;用户在使用Web3.0服务时无需Gas的反向Gas模型;前端到后端上链的在线服务;完整的全栈底层服务等。截止目前,于2021年5月份上线的IC主网共处理了5.6亿个区块、达到每秒处理31.84个区块的速度、扩展了30个子网/分片链、点亮417个节点、托管了34123个容器/智能合约等。



IC早期原住民的构建之旅


2月11日,DBOX创始人/IC早期原住民撰写了一份在IC上的构建旅程,以帮助IC新开发者入门。



DBOX是一个建立在IC上的去中心化收件箱,其基于IC底层技术构建了Web3.0的身份解决方案/实现用户与网站无缝通信方案。此外,DBOX也是首批获得开发者Grant资助的60名受助者之一,本文皆在帮助刚接触IC开发的开发者。


以当下网络速度驱动的区块链


由DFINITY打造的Internet Computer与任何其他L1区块链都不同,IC不仅可以超强性价比快速的处理、存储任意大小的的数据,还实现了以当下网络速度运行智能合约容器。


与其它L1区块链的速度、可扩展性对比


如上图所示,与其它L1区块链相比,IC提供了更高效的运行速度。


 DFINITY开发者Grant计划


DFINITY开发者Grant资助计划是一项在加速IC生态系统发展,且使IC更容易为世界各地的开发者所用计划。DFINITY将这笔总额超过2.2亿美元的Grant资金资助给在IC上构建产品的团队,截止目前已有166受助者获得了来自基金会的资助。

 

该Grant计划的重点领域分别为:开发者工具(IDE、调试器、日志库等)、技术设施(预言机、跨链桥等)、集成设施或API(聊天、电子邮件、地图等)、Dapp和开放互联网服务、容器CDK和Agents。


资助级别分为:5000美元、25000美元、100000美元。

 


如果您有一个在IC上构建的好想法/idea,并拥有一个优秀的团队,可通过下方链接申请对早期项目发展的Grant资助。如果您在构建项目或撰写Grant申请时遇到问题可通过下方二维码添加DfinitySZ小助手微信,我们将全程为您提供帮助:

 

  • https://dfinity.org/grants

  • 如何编写完美的开发者Grant申请:

    https://medium.com/dfinity/how-to-write-the-perfect-developer-grant-application-8d1c53e6477c



建立在IC


以下是DBOX建立在IC上的Demo版本,打开DBOX的官网你会发现,DBOX的后端不仅部署在链上,前端也是部署在IC链上。


DBOX官网:

https://2cxfj-yyaaa-aaaai-aa32q-cai.ic0.app/


在本文中DBOX将构建旅程分为了以下7个步骤


1、后端原型


在IC上进行开发,可使用Motoko或Rust来构建后端,DBOX选择的是Motoko,因为它是专门为IC创建的编程语言,且容易上手,目前大多数关于IC上开发的文档也有较多的注释。


Motoko文档:

https://smartcontracts.org/docs/language-guide/motoko.html

 

上图所述的是一个在Motoko Playground中实现的“Hello World”示例


DBOX在构建后端前,使用了一个名为Motoko Playground的工具构建代码原型设计。Motoko Playground是一个适用在IC上快速部署和测试代码的开发工具,在Motoko Playground中包含一个Motoko编译器和一些方便功能,例如语法突出显示、容器管理和调用dapp方法的用户界面。目前,在Motoko Playground部署的容器可持续20分钟的测试时间。

 

Motoko Playground使用:

https://m7sm4-2iaaa-aaaab-qabra-cai.raw.ic0.app/


2、本地部署


在Motoko Playground中完成代码原型设计后,下一步是在本地部署它,以便链接前端。DFINITY提供了一个名为dfx的CLI,用于管理dapp,以及在IC上设置本地智能合约容器的执行环境。简单来说dfx允许在本地设备上部署IC应用程序,并通过运行在 NodeJS上的Web服务器访问。


以下是安装dfx的教程和在本地开发的示例教程:


  • dfx安装:

    https://smartcontracts.org/

  • 本地开发示例:

    https://smartcontracts.org/docs/quickstart/local-quickstart.html


Windows系统安装dfx最新版本方法:


 

1、在Win系统上下载dfx安装包

下载地址:

https://sdk.dfinity.org/downloads/dfx/0.9.0/x86_64-linux/dfx-0.9.0.tar.gz

 

2、将文件拷贝到wsl系统目录下

win下直接访问 

\\wsl.localhost\Ubuntu-20.04

就可以直接访问wsl下的目录

 

3、解压dfx-0.9.0.tar.gz压缩包为dfx文件

1)在wsl的home下新建一个dfx的目录

2)使用tar -xf dfx-0.9.0.tar.gz -0 >

dfx/dfx解压为dfx文件


4、安装到系统目录里

1)修改dfx的访问权限:chmod u+x dfx/dfx

2)拷贝到系统目录里:sudo mv dfx/dfx /usr/local/bin

安装完成


3测试


在开发任何区块链应用程序时,尤为重要的是消除代码中可能被恶意行为者利用的错误。目前,使用Motoko编写的单元测试不存在首选方式,DBOX采用的是ic-repl工具以测试容器安全性。


ic-repl:

https://github.com/chenyan2002/ic-repl


4、前端


DBOX的前端是以React和TypeScript为基础构建。dfx所包含的一个简洁功能是提供了自动生成的TypeScript定义,可以在开发应用程序时可为提供正确的输入。

 

 由 dfx 生成的TypeScript 定义可提供更好的开体验

 

有关如何将 React 应用程序连接到后端的指南如下:

https://smartcontracts.org/docs/developers-guide/tutorials/custom-frontend.html


5认证


部署前端与IC之间的所有通信都通过JavaScript Agent进行,默认情况下,除非向Agent提供正确的身份验证信息,否则所有调用都不会经过身份验证。如果您希望区分用户,这需要进行身份验证。在IC上拥有几种不同的身份验证系统。常见的包括:


  • DFINITY的Internet Identity:

    https://dfinity.org/howitworks/web-authentication-identity

  • Psychedelic的PlugWallet

    Plugwallet.ooo

  • ToniaLabs的StoicWallet

    https://www.stoicwallet.com/

 

这三个身份验证系统都很容易集成到前端中,PlugWallet、StoicWallet、ii/Internet Identuty的集成文档如下所示:


  • PlugWallet:

    https://docs.plugwallet.ooo/getting-started/connect-to-plug/#requestconnectrequestconnectparams

  • Ii/Internet Identity:

    https://kyle-peacock.com/blog/dfinity/integrating-internet-identity/

  • StoicWallet:

    https://github.com/Toniq-Labs/stoic-identity

 

6主网部署


一旦前端部署完成后,最后一步是将它们链接并推送到IC的主网上,构建在IC上的Dapps的一大优点是不仅后端托管在链上,前端也托管在链上。对于其他区块链来说,Dapp仅后端上链,前端托管在云服务上的架构来说,IC有效消除了额外的信任假设风险和中心化。


 使用 dfx部署容器示例

 

提示:为了让开发者更容易参与IC,DFINITY基金会提供了一个水龙头,可免费获得价值20美元的Cycles。



Cycle水龙头:

https://faucet.dfinity.org/deposit


 7升级


最后,DBOX创始人向我们概述了有关有于已部署容器上更新代码的事宜,这对新手开发者来说可能会有点棘手。


注意:升级Canister一定程度上拥有难度,由于Candid界面更改和稳定声明的更改,它可能会破坏客户端或丢弃Motoko的稳定状态。此类问题目前已发起提案改善。


为了在容器升级之间持久化数据,需要将数据存储在稳定变量中。但并非所有变量类型在 Motoko中都是稳定的。非稳定(灵活)类型的一个示例是 HashMap,开发者会经常用到它。使用非稳定类型时要持久化数据,升级过程中需要将所有非稳定变量中的数据临时映射,并存储在一个稳定变量中。


在Motoko中,有两种特殊的方法:preupgrade和postupgrade,临时映射和存储非稳定变量。


请参阅下面的示例,了解在 HashMap 中持久化数据时代码的示例。在这个例子中,名为 nonS tableData 的 HashMap被转换并临时存储在一个稳定的数组stableData中。


Motoko 代码的一个简单示例,说明如何在升级期间保留非稳定数据。



必看周刊


生态精选


寻宝回顾


精彩活动


联系我们

 电报 

        t.me/DfinitySZ

 官方网站

        dfisz.com

 英文推特 

        twitter.com/DfinitySZ

 中文推特 

        twitter.com/DfinitySZCN

 英文论坛 

        reddit.com/user/DfinityShenZhen


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存