日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于React Native和Ethers.js的电子钱包(三):Ethers.js

發(fā)布時間:2025/4/16 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于React Native和Ethers.js的电子钱包(三):Ethers.js 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
之前在學(xué)Solidity的時候知道了以太坊提供了一個JavaScript API——Web3.js——對以太坊進行API調(diào)用的工具包。但最近做RN的時候又發(fā)現(xiàn)了另外一種API——Ethers.js


在Medium上找到了一篇文章或許能幫助理解

文章列出了六條Ethers.js的特點,但與Web3最主要的區(qū)別在于兩點:

1. ENS names are first-class citizens

2. Separation of concerns---key management and state

ENS是Ethereum Name Service的縮寫,通常我們在以太坊上進行交易的時候需要輸入對方的交易地址,這個地址是一串16進制的哈希值,又長又難記,毫無規(guī)律,但有了ENS就簡單多了,地址不再是冰冷的數(shù)字和字母,而是一個簡單的、可讀性強的字符串,類似jack.mywallet.eth,沒錯,jack.mywallet.eth就是一個實實在在以太坊地址

所以在Ethers.js中將ENS作為“一等公民”對待,對于實際用戶,目的是想弱化“地址”的概念;對于開發(fā)者來說,可以不管實際合約地址的更新,直接調(diào)用解析器獲取ENS地址

針對Ethers.js的第二個特點,簡單來說就是提供了跟賬戶和錢包相關(guān)的API


下面通過示例講講如何在React Native中使用Ethers.js

開始前,可以先在本地裝一個以太坊的錢包測試用,這里我選擇MetaMask


接著就是安裝Ethers.js

npm install -save ethers復(fù)制代碼


然后在需要使用Ethers.js的地方引入該模塊:

import { ethers } from 'ethers';復(fù)制代碼


1. 通過助記詞生成錢包地址

let newMnemonic = ethers.utils.HDNode.entropyToMnemonic(ethers.utils.randomBytes(16));復(fù)制代碼

ethers.utils.HDNode.entropyToMnemonic():

通過傳入一個隨機的16字節(jié)參數(shù)來生成一個隨機的、有效的助記詞

ethers.utils.randomBytes():

生成一個16字節(jié)的,即12個英文單詞長度的助記詞

Tip: 可以通過ehters.utils.HDNode.entropyToMnemonic(ethers.utils.randomBytes(16), ethers.wordlists.zh_ch)生成中文的助記詞哦

根據(jù)助記詞和BIP-039+BIP-044協(xié)議生成錢包對象:

let wallet = ethers.Wallet.fromMnemonic(newMnemonic, 'm/44\'/60\'/0\'/0/');復(fù)制代碼

獲取以太坊測試網(wǎng)絡(luò)ropsten,并將wallet連接到該網(wǎng)絡(luò):

provider = ethers.getDefaultProvider('ropsten'); let activeWallet = wallet.connect(this.provider);復(fù)制代碼


啟動RN,可以看到和MetaMask生成了相同地址的賬戶:




這說明連接以太坊測試網(wǎng)絡(luò)成功


2. 獲取賬戶余額以及發(fā)送交易

//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)}) }復(fù)制代碼


點擊Refresh獲取當(dāng)前賬戶的余額及交易次數(shù):



發(fā)送交易:



交易成功:



賬戶余額發(fā)生變化:



相關(guān)鏈接:

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…


轉(zhuǎn)載于:https://juejin.im/post/5cf385acf265da1bb003a7b7

總結(jié)

以上是生活随笔為你收集整理的基于React Native和Ethers.js的电子钱包(三):Ethers.js的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。