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}'); //顯示地址