你好,我是 TokenCore

347 阅读3分钟

这是一个跨平台实现加密数字货币钱包的开源库。

2019 年中立项开发,第四季度紧锣密鼓开发,2020 年的第一天已经悄然上线并在 GitHub 开源,同时已集成在 2.5.0 版本的 imToken。

这次重写想解决什么问题

移动平台双端(iOS & Android)开发调试成本高,每次新的改动都需要在两端付出双倍成本,所以我们期盼可以用一个语言能在两个平台运行起来。每个平台上的生态不一样,使用的加密库及区块链基础库也不一致,比如 iOS 上的 CoreBitcoin 和 Android 上的 BitcoinJ,即使是同一个开发人员,实现过程仍需抹平不同依赖提供的接口设计差异。

目前 TokenCore 开发成果只能在移动端发挥作用。同样的钱包管理功能需要扩展到更多平台,比如桌面端和服务端,需要保证多个平台能共享代码和使用同样的依赖库,做到真正的一次编写,到处执行。

上一版本 TokenCore 虽然开源已超过一年,但接口设计仍然沿用 imToken 最早版本业务设计。本次重写也为了扔掉包袱,重新设计更加通用的接口,适用更多业务场景。期望设计更优雅的业务无关接口,让更多需求通过基础能力组合实现,无须对功能内核做改动。

为什么选择 Rust

我们对现有可以跨平台开发的编程语言做了对比,要么如 Swift, Kotlin 跨平台能力还未成熟,要么如 Golang 不适合嵌入到移动端平台。

剩下合适的选择是,C++ 和 Rust,前者我们团队里的同学都不想写,所以最后结果很显然只有一个。

再来看看 Rust 的特性中有哪些特别适合用来写 TokenCore

  • 内存安全,杜绝出现内存越界等情况

  • 无运行时无垃圾回收,适合嵌入到移动端执行,不会对运行环境增加依赖

  • 现代的语言特性支持,开发效率更高

  • 区块链生态相对较好,领域开发新宠,加密库齐全

区块链社区不少新项目也是用的 Rust 开发,如 Polkadot,Grin,Nervos,Solana,Near 等。越多项目采用 Rust 开发,意味着生态支持越丰富,接入新区块链成本越低,可以直接引用或参考的越多。

后续计划

发挥 Rust 的跨平台能力

  • 硬件钱包支持上,例如使用 Rust 重写 imKey 的 sdk 功能,通过设计接口实现底层无关的私钥签名

  • 服务端能力,管理服务端私钥签名,接入软硬件签名(硬件包含 HSM)

支持更多区块链的钱包功能,在 2020 年还有很多带着众人希望的新区块链会上线主网。

安全与漏洞奖励

TokenCore 最重要的职责是,保障钱包业务的资产安全,在这方面我们在代码层面做足了工作,从单元测试,到集成测试,最后到由 react-native 构建的示例程序的 E2E 测试。此外,还做了一个 fuzzy testing 程序对私钥处理部分持续进行随机测试。

开源的目的还在于希望能得到更多开发者的检视,更多眼睛提早发现可能的问题。对此我们也有一个漏洞奖励计划,奖励帮助我们发现问题的人,具体可以查看 GitHub 上的说明 :github.com/consenlabs/…

最后,欢迎加入我们

我们的业务正在快速发展,研发团队也在持续扩展,需要更多强力的小伙伴加入,现在比较紧缺的岗位有资深前端,Golang 后端工程师,SRE 运维,具体请查看官网:token.im/careers