Flutter是采用Dart语言的跨平台应用开发框架,目前已经支持ios、安卓和web等多个平台。本文将介绍如何在Flutter应用中生成以太坊地址,若是你要开发一个手机钱包,或者要对接以太坊区块链,相信这篇文章会对你所帮助。ios
做为一个新的框架,适合Flutter的以太坊开发包并无太多选择,web3dart算是相对完善一些的Dart实现,它包含了JSON RPC封装、离线签名、ABI编解码等重要的特性,其目标是提供dart版的web3.js,可以适应绝大多数Flutter应用对接以太坊区块链的需求。git
web3dart的安装方法很简单,首先在项目的pubspec.yaml中添加web3dart依赖项。例如:github
name: hubwiz_tutorial dependencies: web3dart: git: git://github.com/simolus3/web3dart.git
而后执行以下命令更新项目依赖:web
~/hubwiz_tutorial$ pub get
若是但愿快速掌握Flutter / Dart应用对接以太坊区块链的方法,推荐 汇智网的在线互动教程:数组
生成以太坊地址是绝大多数但愿支持以太坊区块链的Flutter应用所须要的功能特性。 web3dart开发包使得这一过程至关简单明了:web3dart的crypto库提供了三个API函数, 分别用于生成私钥、从私钥推导出公钥、以及从公钥推导出以太坊地址:安全
首先咱们引入必要的库:框架
import 'dart:math'; // Random import 'dart:typed_data'; // Uint8List import 'package:web3dart/crypto.dart';
为此咱们须要利用math
库中的安全随机数发生器,而后调用crypto库中的generateNewPrivateKey()
生成一个随机私钥:dom
Random rng = Random.secure(); //安全随机数发生器 BigInt privKey = generateNewPrivateKey(rng); //生成新的私钥
直接调用crypto库中privateKeyToPublic()
函数,便可从指定的私钥推导出公钥:函数
Uint8List pubKey = privateKeyToPublic(privKey); //从私钥推导出公钥 print('public Key => ${bytesToHex(pubKey)}'); //显示其16进制字符串表示
bytesToHex()
是crypto库提供的一个辅助API,用于将字节数组(Uint8List)转换为16进制表示的字符串。区块链
直接调用crypto库中publicKeyToAddress()
方法,从指定的公钥码流推导出地址码流:
Uint8List address = publicKeyToAddress(pubKey); //从公钥推导出地址 String addressHex = bytesToHex( address, //地址字节数组 include0x:true, //包含0x前缀 forcePadLength:40 //补齐到40字节 ); print('address => ${addressHex}'); //显示地址