FinClip小程序+Rust(三):一个加密钱包

本文介绍如何使用Rust实现一个加密货币钱包,包括密钥对生成、公钥地址创建,并展示了项目目录结构和关键代码实现。通过Rust的FFI将功能输出为C接口,为FinClip小程序调用做准备。最后,提到了构建iOS二进制库的步骤。
摘要由CSDN通过智能技术生成

前言

在之前的内容我们介绍了整个端到端开发环境的搭建。

其中,我们用 Xcode 开发一个 iOS native App 的“壳”,并集成了FinClip SDK让这个“壳应用”具备运行小程序的能力,我们并采用 FinClip.com 的线上企业端、运营端生成 SDK 使用时所需的 App ID 和 Secret;想自己拥有本地小程序中心的朋友,则可以安装 FinClip 服务器端的 docker 镜像,并以本地的企业端、运营端生成 SDK 使用时所需的 App ID 和 Secret - 一切都在你自己的电脑本地发生。

我们又介绍了 Rust 的编译环境针对 iOS 进行编译构建代码所需要安装的相关工具。要端到端开发一个完整的应用,确实涉及到比较多的东西,有学习了解技术工具的学习成本,有时其繁琐性让人却步。但只要搭建起来,就一劳永逸,我们可以开始聚焦应用逻辑本身。

万事俱备,开搞开搞

万事俱备,那就让我们开干吧。作为一个范例,我们需要找一个逻辑比较简单又确实适合用 Rust 来实现的场景。在这里,我们选择实现一个加密钱包。设想是这样的:

  • 用 Rust 来实现密钥对的生成、加密存储、交易签名。加密算法,背后都是数学逻辑,显然在什么硬件、操作系统上实现,都应该是一样通用的对吧?
  • 用小程序来实现各种 dApp 的前端,可以是账户余额、交易历史、支付转账之类的账户管理小程序,也可以是各种 DeFi、GameFi 应用,也可以是 NFT 相关工具... 在 Web3 世界里,限制我们的只是想象力

当然,本文焦点不在于这些内容的具体实现,简单起见我们只象征性的实现一个密钥对的生成,其他剩余的事情,有待感兴趣的朋友去发掘。

特别提醒:加密货币钱包是 Web3 技术的基础,没有了它你什么 Web3 技术都试验不了,了解 Web3,从加密技术常识开始。

项目目录结构

我们姑且把这个项目称之为 finclip-rust,它的目录结构包含了以下内容:

finclip-rust
    |---- ios  (ios相关代码子目录、xcodeproj子目录,生成项目的iOS Wrapper App)
    |---- android (Android版的 wrapper app,本文不覆盖。有兴趣的同学自行尝试)
    |---- desktop (Mac/Linux/Windows版wrapper app,可能是一个Qt或者Electron应用。本文阙如,有时间再继续探讨)
    |---- mini-app (一个FinClip小程序,主要负责设备端的人机交互)
    |---- rust (Rust部分的代码,编译构建出来的应该是目标架构下的静态库,输出".a"文件)

不忙于手工创建所有这些子目录,我们先从 Rust 部分开始:

mkdir finclip-rust
cd flinclip-rust
cargo new --lib rust

Cargo 将创建一个 rust 目录,里面非常简单,仅包含以下内容:

rust
  |-- src
  |    |-- lib.rs
  |-- Cargo.toml

我们就用这个目录去写一个只有密钥对生成功能的“钱包”。

加密货币钱包的 Rust 实现

什么是加密钱包?在开发之前我们总得了解一下它的基本特征。

什么是加密货币钱包

在一般的电子钱包中,我们习惯于看到一些信息例如一某种货币单位为度量的账户余额、交易历史、持有的资产与价值等等,以及支持一些操作如支付、转账等。

加密货币钱包的最核心功能,相比之下就极其简单了,它本质上就是安全存储密钥,以便于持有者通过密钥去访问其链上的加密数字资产 - 资产在某条区块链上,并不在钱包中,除了密钥,钱包里什么都不存储。

在本项目中,简单起见我们仅实现以下两个钱包属性:

  • 一对公私钥:public key 和 private key。私钥是钱包的“命根子”,私钥被盗了(或者自己弄丢了),在链上的资产也就不再是你的。一个公私钥对的例子:公钥是“03fc56c8fa9233a9db9a57b47973058e5cdd7707233619719c604cb11a03dd46d6”,私钥是“721d468dfd4584e88702da69e8e25ebe79bf338ac268413dae3cf73475f5a870”
  • 一个从 public key 产生的 public address。这是便于他人转账、支付给你的账户地址。不同类型的加密数字货币,有不同的地址格式。例如光 Bitcoin 就有 P2PKH、P2SH、Bech32 三种不同格式标准。以太坊的地址格式则是以“0x”起头的 40 位 16 进制字母,例如“0x6400f8fb4953e50ca072e44ddd5fef4c995371a6”

怎样生成密钥

生成密钥对通常基于 ECC&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值