IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

文章为直播讲演的文字稿,若想观看直播回放可访问B站:Dtalk#5 | 圆桌评论:高校开发者们的逐梦 Web3

Hello 各位,感谢咱们参加到本次的技能共享活动,我是来自 AstroX 的 Alex,一起也是 Flutter 开发者专家和 Flutter 中文社区的核心成员。 今日我将从 Flutter 跨渠道开发工程师的视点,给咱们共享一下,在 IC 上进行移动开发,开发依据 IC 的移动端跨渠道设备及运用的一些细节。

IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

此次共享主要包含以下的内容:

  • 移动渠道的开发关于 IC 的重要性
  • 在 IC 上的团队以及咱们 AstroX 是怎么挑选移动端的技能完结的?
  • AstroX 在移动端完结了些什么?包含咱们的产品 demo 的展示
  • 以及咱们还能在 IC 和 Web3 范畴做一些什么?

移动开发关于IC的重要性

IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

首先咱们来浅聊移动开发关于 IC 的重要性,我主要会从三个因素进行剖析:

  • 需求移动开发的原因
  • 移动开发的特色
  • 以及咱们在移动渠道想到达的方针

IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

首先咱们都知道 IC 是高功能链上的跨渠道项目,其衍生项目的运用场景不仅限于 Web 和 Mobile,咱们能够在任意一个 unix 和 node 环境下自动构建自己成为一个节点,也便是 IC 上的 canister。这样大大拓宽了集成的限制。

别的由于一些项目的部分概念触及了去中心化,导致用户在运用时也要接收到去中心化的学习本钱,会让整个 App 的体会变得异常杂乱,而且用户还常常需求运用 PC 与浏览器配合来完结特定的操作,比方我今日出门参加一场宣发会,成果现场空投的 NFT 需求用电脑领取,整个人处于一个溃散的情况。

那么 在当下的世界,移动端也便是咱们说的手机,现已人不离手了,每天醒来你的身边没有手机,或许你就没办法敞开你一天的生活,这样的趋势在长期内都不会发生太大的改变。

可是,咱们都知道每天手机上继续运用的运用一般不会超过 20 个,你的 App 怎么锋芒毕露成为二十分之一?首先就要 在速度和体会上都能到达上乘,而且让用户有实际的需求,才干继续坚持和提高你的获客水平。当然轻量也是其间一个重要因素,比方 2017 年发布的微信小程序,你会想到它 5 年后的用户群体有当今的规划吗? 综合以上的这些条件,咱们的方针就逐渐浮现了,咱们的 App 要 在移动端上统筹速度和体会

说了以上内容,咱们先来看看现在 IC 上一般 DApp 端到端的交互形式。

IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

这是一张简略的 IC 上开发 DApp 的端到端结构图。左边是传统意义上的后端,在 IC 上是一个 canister,也能够了解为容器和罐子。Canister 能够布置智能合约,合约能够用 Mokoto、Rust 或许其他言语编写,也能够在 Asset canister 上布置前端内容。

如果咱们在这儿布置的是合约 canister,那么咱们所写的合约会供给一个界说的 Candid IDL (interface description language) 规范文件,也便是咱们通常所说的接口文档。而最终经过端侧的 agent 署理,注册相关的 IDL service,供给给端侧直接调用合约办法。这个端侧能够有十分多的端渠道,比方 Dfinity 官方供给的 JS Agent,比方咱们团队为 Flutter 技能栈上开发而完结的 Dart Agent。当然除此之外还或许有给服务端侧运用的 Go Agent 或许我前面嘉宾说到的 Python Agent,只要完结了这个署理 Agent,一切的端侧都能够很方便地调用 canister call。

介绍完这个 E2E 的结构,相信各位同学也对 IC 的交互模型有了一丢丢更深入的了解。

怎么挑选移动端的技能完结?

IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

接下来咱们就来聊聊,怎么挑选移动端的技能完结。因为 AstroX 团队现已开始了一段时间的移动端开发,所以现在咱们的技能栈现已选定了 Flutter,那么它究竟在 IC 上有什么优势和才能呢?

IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

回顾一下咱们刚刚提出的方针:在移动端上统筹速度和体会。Flutter 是否能够做到统筹?现在经过几个月的经历积累,咱们得出的答案是 完全能够

Flutter 在跨渠道特别是移动端的功能是十分杰出的,契合咱们 Mobile First 的方针。其依赖的 Skia 自绘也在这几年不断地被「借鉴」而成为主流,这几年曾经出过许多的跨渠道结构比方 Kraken 和 Weex 2.0 都借鉴了 Flutter 的烘托 pipeline 和 engine 思路。别的 Dart FFI 的引进也为运用层调用底层渠道才能供给了十分大的切入口,运用层能够直接享受底层接口的功能。

Flutter 背靠的 Dart 运用的是 Pub 软件包办理,Pub 上现在现已有 26000+ 的 Flutter 插件。虽然咱们知道 Flutter 本质上是一个 UI 结构,可是能够经过这些插件来补齐这些方针渠道的设备需求,那么咱们在 IC 上开发 Flutter 运用也能够扩展咱们合约的运用场景。比方咱们团队在前段时间的 Supernova 黑客松大会上就提交了 依据人脸辨认的身份验证场景运用 Proof of Personhood,充沛证明了架构+事务的可行性。

别的在运用 Flutter 开发的过程中,针对结构和 IC 根底设备的东西链相对比较完善,咱们能够比较快速地开发新的东西。比方咱们团队在 前几个月开源公测了 candid_dart,运用 dart 的 build_runner 将 did 文件生成 dart classes、合约类型以及 IDL 模板代码,运用侧直接能够经过 agent 进行注册而且调用 canister。

当然说到 Flutter 就得说一下咱们平时会评论的人效问题,一般咱们说一个 Flutter 开发工程师在事务才能上能够顶 1.8 个左右的不同端原生开发工程师,一个中级的 Flutter 工程师能够独自完结 60% 左右的事务,这样会给团队带来很不错的人效比。可是以一敌多有优点也有害处,便是这个一是否能撑起一片天。团队组成招募 Flutter 开发人员时需求做一定量的准备作业,要对新言语和结构体系进行学习,而且把握深度的不同或许会对后续的事务展开带来不一样的影响。

咱们在移动端完结了什么?

IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

接下来咱们会给咱们共享一下 AstroX 在移动渠道的一些成果,即咱们在移动端完结了什么。

IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

这儿展示的是咱们现在的移动端主要根底构建的架构图,一共分为四大部分,分别是刚刚说到的 Dart Agent、用于解析 did 文件的 Candid Parser、依据 IC 事务的 Flutter SDK,以及运用层 App。在这儿我分开给咱们介绍一下:

Agent 在先前有说到过,是作为调用 canister 合约办法的署理。现在 agent 依据 FFI 调用 Rust 产品进行交互,执行一些密码学的运算,一起支持异步及高功能的调用操作。Dart Agent 的内容根本与官方的 JS Agent 平齐,其间还加入了一些方便于 Dart/Flutter 开发的扩展办法,还有咱们在开发中遇到常见问题的优化。

Candid parser 会解析 did 文件,将界说的合约办法转化成已知的 IDL 界说,App 运用这些转化出来的内容后经过咱们笼统的 Service 将 IDL 绑定到 agent 与 canister 的连接上,进行详细的合约调用。

最终咱们依据 Agent 开发了一些 SDK,包含与 Web 进行互调的 Bridge 和以及给 Flutter 项目运用的 SDK,包含 AuthenticationsTransactions,项目接入后能够直接在咱们的根底设备上依据自己 IC 的事务进行开发。

三个根底构建最终统一服务于咱们的 App,AstroX 现在主推的移动端项目是 ME App,其他 IC 生态上运用咱们 Dart Agent 的运用还有 Distrikt,它是一个去中心化的社交运用。

以上咱们团队沉淀的与移动端有关的根底构建中有两个现已开源,有兴趣的同学能够访问左上角咱们的 GitHub 进一步研讨咱们的代码。

IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

说了很久,马上来带咱们看看一个简略的 IC 合约交互流程是怎么用 Flutter 写出来的。

(详细 demo 展示请检查视频回放。)

还能在范畴内做些什么?

IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

最终咱们来说说在 IC 和 Web3 这两个范畴,咱们在技能上和时机上,还能做些什么?

IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

现在 IC 范畴或许咱们说 Web3 是一个什么样的情况呢?

首先便是近段时间不断地有高功能的公链诞生,咱们来看一张图,这些都是高功能公链。新公链的增加,就会带来需求的猛增,咱们都能够在这些公链上进行布道、探究和开发。

IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

根底设备的扩宽就会带来更多专业的职业从业者不断地向职业界涌入,这些从业者挑选了他们看到的时机,许多人来自于各大传统头部互联网企业,会带动整个职业进入快速发展期。

当然除了从业人员增多以外,功能提高带来的优势还有各端的开发本钱和门槛的下降,其间就包含移动端。例如 StepN 这样的标杆运用为用户的移动端带来了十分杰出的体会,不再让 Web3 的用户局限于 PC 可是,在 IC 上进行的跨渠道开发关于开发人员来说依然有较高的准入规范。举个比如,虽然咱们刚刚演示的比如中现已打通了相关流程的一切难点,可是在规划这些办法和服务时,依然需求花费开发者的大量时间去了解其间的运作形式,才干很好地进行事务笼统。所以为 IC 上的开发者做好 DevTools 依然是一件十分重要的事情,它会大大下降一般开发者在集成 IC 时的难度,从而让更多的产品在 IC 上大放异彩。

而在 Web 以外的渠道,现在存在的 SDK 仍是比较少,刚刚咱们有聊到在不同的渠道会有对应的 agent 进行交互,其实大部分渠道现在也只有 agent 作为 IC SDK 能够运用,整体量级并没有到达开发者随意就能找到的程度。 AstroX 作为 IC 上的团队,作为 provider,也在以上说的两件事中继续尽力中,咱们也希望未来能为开发者们供给更好用的 DevTools 和 SDK,所以~

IC 上的移动开发 | TinTinLand & DFINITY DTalk#5

所以咱们团队也欢迎各位有兴趣的同学与咱们一起探究,包含“五师两理”,期待在 Web3 和 IC 上发光发热。咱们一切的作业都是长途弹性作业,希望咱们来撩~