基于React Native和Ethers.js的电子钱包(三):Ethers.js
在Medium上找到了一篇文章或許能幫助理解
文章列出了六條Ethers.js的特點,但與Web3最主要的區別在于兩點:
1. ENS names are first-class citizens
2. Separation of concerns---key management and state
ENS是Ethereum Name Service的縮寫,通常我們在以太坊上進行交易的時候需要輸入對方的交易地址,這個地址是一串16進制的哈希值,又長又難記,毫無規律,但有了ENS就簡單多了,地址不再是冰冷的數字和字母,而是一個簡單的、可讀性強的字符串,類似jack.mywallet.eth,沒錯,jack.mywallet.eth就是一個實實在在以太坊地址
所以在Ethers.js中將ENS作為“一等公民”對待,對于實際用戶,目的是想弱化“地址”的概念;對于開發者來說,可以不管實際合約地址的更新,直接調用解析器獲取ENS地址
針對Ethers.js的第二個特點,簡單來說就是提供了跟賬戶和錢包相關的API
下面通過示例講講如何在React Native中使用Ethers.js
開始前,可以先在本地裝一個以太坊的錢包測試用,這里我選擇MetaMask
接著就是安裝Ethers.js
npm install -save ethers復制代碼然后在需要使用Ethers.js的地方引入該模塊:
import { ethers } from 'ethers';復制代碼1. 通過助記詞生成錢包地址
let newMnemonic = ethers.utils.HDNode.entropyToMnemonic(ethers.utils.randomBytes(16));復制代碼ethers.utils.HDNode.entropyToMnemonic():
通過傳入一個隨機的16字節參數來生成一個隨機的、有效的助記詞
ethers.utils.randomBytes():
生成一個16字節的,即12個英文單詞長度的助記詞
Tip: 可以通過ehters.utils.HDNode.entropyToMnemonic(ethers.utils.randomBytes(16), ethers.wordlists.zh_ch)生成中文的助記詞哦
根據助記詞和BIP-039+BIP-044協議生成錢包對象:
let wallet = ethers.Wallet.fromMnemonic(newMnemonic, 'm/44\'/60\'/0\'/0/');復制代碼獲取以太坊測試網絡ropsten,并將wallet連接到該網絡:
provider = ethers.getDefaultProvider('ropsten'); let activeWallet = wallet.connect(this.provider);復制代碼啟動RN,可以看到和MetaMask生成了相同地址的賬戶:
這說明連接以太坊測試網絡成功
2. 獲取賬戶余額以及發送交易
//get address balance activeWallet.getBalance('pending').then((balance) => {this.setState({etherString: ethers.utils.formatEther(balance, {commify: true})}) }, (error) => {console.log(error) });//get address transaction count activeWallet.getTransactionCount('pending').then((transactionCount) => {this.setState({transaction: transactionCount.toString()}) }, (error) => {console.log(error) });emitTransaction(wallet) {let activeWallet = wallet.connect(this.provider)activeWallet.sendTransaction({to: ethers.utils.getAddress(this.props.addresses[this.state.pickerValue]),value: ethers.utils.parseEther(this.state.etherVal)}).then((tx) => {console.log(tx)}, (error) => {console.log(error)}) }復制代碼點擊Refresh獲取當前賬戶的余額及交易次數:
發送交易:
交易成功:
賬戶余額發生變化:
相關鏈接:
Ether Scan is here: ropsten.etherscan.io/address/0x2…
Here are the links:
Ethers.js: docs.ethers.io/ethers.js/h…
ENS: docs.ens.domains/en/latest/i…
Announcing ethers.js --- a web3 alternative: medium.com/l4-media/an…
轉載于:https://juejin.im/post/5cf385acf265da1bb003a7b7
總結
以上是生活随笔為你收集整理的基于React Native和Ethers.js的电子钱包(三):Ethers.js的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: if,elif,else的关系 inpu
- 下一篇: Android初级开发笔记-- acti