
前言
随着 Web3.0 概念的普及,区块链技术已从早期的极客玩具逐渐走向主流应用。无论是 DeFi(去中心化金融)、NFT(非同质化代币)还是 DAO(去中心化组织),都离不开与区块链网络的交互。
以太坊 (Ethereum) 作为目前最成熟的智能合约平台,其客户端通信协议 JSON-RPC 是行业标准。要在移动端(Flutter/OpenHarmony)与以太坊网络通信,我们不可能手动构造那些复杂的十六进制数据包。
web3dart 是 Dart 生态中唯一的、功能完备的 Web3 客户端库。它可以让你:
- 管理账户:生成私钥、助记词,导入 keystore。
- 发送交易:转账 ETH,部署合约。
- 调用合约:Read(查询状态)和 Write(改变状态)。
- 订阅事件:监听链上事件(如 Transfer)。
对于 OpenHarmony 开发者来说,web3dart 的纯 Dart 实现意味着你可以无视底层 OS 差异,直接在鸿蒙设备上开发冷钱包或 DApp。
一、核心原理与密码学基础
1.1 JSON-RPC 与 Infura
以太坊节点通过 JSON-RPC 接口暴露服务。但要在移动端运行全节点(Full Node,几百 GB 数据)是不现实的。
通常我们会连接 Infura 或 Alchemy 这样的远程节点服务商。web3dart 底层封装了 http 和 web_socket_channel 来与这些节点通信。
1.2 账户与签名 (ECDSA)
以太坊使用 椭圆曲线数字签名算法 (ECDSA, secp256k1)。
- 私钥 (Private Key):256 位随机数,绝对不能泄露。
- 公钥 (Public Key):由私钥生成。
- 地址 (Address):公钥的哈希值(Keccak-256)的后 20 字节。
交易必须用私钥签名。web3dart 可能会在设备本地完成签名过程,只将签名后的数据(Raw Transaction)发送给节点,确保私钥永远不离开设备。
- 发起交易
- 构建交易对象
- 请求签名
- 返回签名数据 (Raw Tx)
- 发送 JSON-RPC 请求
- 广播交易
- 矿工打包
- 推送回执/事件
用户操作 → Flutter DApp → web3dart 客户端 → 本地钱包/私钥 → 远程节点 (Infura/Alchemy) → 以太坊网络 → 区块链
二、核心 API 详解
2.1 初始化客户端
import 'package:http/http.dart';
import 'package:web3dart/web3dart.dart';
void main() {
final rpcUrl = "https://mainnet.infura.io/v3/YOUR_API_KEY";
final httpClient = Client();
final ethClient = Web3Client(rpcUrl, httpClient);
}








