摘要:錢包功能一個錢包通常主要包含的功能有賬號管理主要是私鑰的管理創建賬號賬號導入導出賬號信息展示如以太幣余額代幣余額。
本文首發于深入淺出區塊鏈社區
原文鏈接:[使用 ethers.js 開發以太坊 Web 錢包 1 - 創建錢包賬號)
](https://learnblockchain.cn/20...,請讀者前往原文閱讀
以太坊去中心化網頁錢包開發系列,將從零開始開發出一個可以實際使用的錢包,本系列文章是理論與實戰相結合,一共有四篇:創建錢包賬號、賬號Keystore文件導入導出、展示錢包信息及發起簽名交易、發送Token(代幣),這是第一篇,主要介紹錢包將實現哪些功能及怎么創建錢包賬號,本錢包是基于ethers.js 進行開發。
去中心化網頁錢包先明確一下定義,什么是去中心化錢包,賬號秘鑰的管理,交易的簽名,都是在客戶端完成, 即私鑰相關的信息都是在用戶手中,錢包的開發者接觸不到私鑰信息。
對應的中心化錢包則是私鑰由中心服務器托管,如交易所的錢包就是這種。
網頁錢包,或者叫web錢包,是指錢包以網頁的形式展現,去中心化網頁錢包則交易的簽名等操作是在瀏覽器里完成。
其他形式的錢包,如Android錢包或iOS錢包其開發思路和web錢包一樣,因此文本對開發其他平臺的錢包也有參考意義,不過本系列文章主要側重在錢包功能的實現,并未過多考慮用戶體驗。
一個錢包通常主要包含的功能有:
賬號管理(主要是私鑰的管理):創建賬號、賬號導入導出
賬號信息展示:如以太幣余額、Token(代幣)余額。
轉賬功能:發送以太幣及發送Token(代幣)
這些功能將基于 ethers.js 進行開發, ethers.js 和web3.js 一樣,也是一套和以太坊區塊鏈進行交互的庫,不僅如此,ethers.js 還對BIP 39等相關的提案進行了實現,可以在這個鏈接閱讀其文檔。
這些功能主要表現為錢包的兩個界面,一個界面是:賬號管理,一個界面是進行賬號信息展示及轉賬。下面逐個進行介紹
創建錢包賬號讀過上一篇文章理解開發HD 錢包涉及的 BIP32、BIP44、BIP39的同學,會知道創建賬號,可以有兩種方式:
直接生成32個字節的數當成私鑰
通過助記詞進行確定性推導出私鑰
使用隨機數作為私鑰創建錢包賬號即方式一,可以使用ethers.utils.randomBytes生成一個隨機數,然后使用這個隨機數來創建錢包,如代碼:
var privateKey = ethers.utils.randomBytes(32); var wallet = new ethers.Wallet(privateKey); console.log("賬號地址: " + wallet.address);
上面代碼的 wallet 是 ethers 中的一個錢包對象,它除了有代碼中出現的.address 屬性之外,還有如 獲取余額、發送交易等方法,在后面的文章會進行介紹。
注意ethers.utils.randomBytes 生成的是一個字節數組,如果想用十六進制數顯示出來表示,需要轉化為BigNumber代碼如下:
let keyNumber = ethers.utils.bigNumberify(privateKey); console.log(randomNumber._hex);
現在我們結合界面,完整的實現創建賬號,其效果圖如下,加載私鑰時創建賬號。
界面代碼(HTML)代碼如下(主要是在表格中定義個一個輸入框及一個按鈕):
私鑰: | |
---|---|
加載私鑰
|
對應的邏輯代碼(JavaScript)如下:
// 使用JQuery獲取兩個UI標簽 var inputPrivatekey = $("#select-privatekey"); var submit = $("#select-submit-privatekey"); // 生成一個默認的私鑰 let randomNumber = ethers.utils.bigNumberify(ethers.utils.randomBytes(32)); inputPrivatekey.val(randomNumber._hex); // 點擊“加載私鑰”時, 創建對應的錢包 submit.click(function() { var privateKey = inputPrivatekey.val(); if (privateKey.substring(0, 2) !== "0x") { privateKey = "0x" + privateKey; } var wallet = new ethers.Wallet(privateKey)); });
如果用戶提供一個已有賬號的私鑰,則會導入其原有賬號。
通過助記詞方式創建錢包賬號這是目前主流常見錢包的方式,關于助記詞推導過程請閱讀理解開發HD 錢包涉及的 BIP32、BIP44、BIP39。
我們需要先生成一個隨機數,然后用隨機數生成助記詞,隨后用助記詞創建錢包賬號,設計到的API有:
var rand = ethers.utils.randomBytes(16); // 生成助記詞 var mnemonic = ethers.utils.HDNode.entropyToMnemonic(rand); var path = "m/44"/60"/0"/0/0"; // 通過助記詞創建錢包 ethers.Wallet.fromMnemonic(mnemonic, path);
現在我們結合界面來實現一下通過助記詞方式創建錢包賬號,其效果圖如下:
界面代碼(HTML)代碼如下(主要是在表格中定義個兩個輸入框及一個按鈕):
助記詞: | |
---|---|
Path: | |
推倒
|
對應的邏輯代碼(JavaScript)如下:
var inputPhrase = $("#select-mnemonic-phrase"); var inputPath = $("#select-mnemonic-path"); var submit = $("#select-submit-mnemonic"); // 生成助記詞 var mnemonic = ethers.utils.HDNode.entropyToMnemonic(ethers.utils.randomBytes(16)); inputPhrase.val(mnemonic); submit.click(function() { // 檢查助記詞是否有效。 if (!ethers.utils.HDNode.isValidMnemonic(inputPhrase.val())) { return; } // 通過助記詞創建錢包對象 var wallet = ethers.Wallet.fromMnemonic(inputPhrase.val(), inputPath.val()); });
同樣用戶可以提供一個其保存的助記詞來導入其錢包,有一些遺憾的是,ethers.js 暫時不支持通過添加密碼作為Salt來保護種子(也可能是我沒有找到,如果知道的同學,希望反饋下),如果需要此功能可以引入bip39 和 ethereumjs-wallet 庫來實現,代碼可參考理解開發HD 錢包涉及的 BIP32、BIP44、BIP39。
小結其實 ethers 還提供了一個更簡單的方法來創建錢包:
// 直接創建一個隨機錢包 ethers.Wallet.createRandom();
完整源碼請訂閱深入淺出區塊鏈技術小專欄查看, 哈哈,是不是有一點雞賊,創作不易呀。
戳鏈接收看詳細的視頻課程講解。
參考文檔:
ethers.js
深入淺出區塊鏈 - 系統學習區塊鏈,打造最好的區塊鏈技術博客。
深入淺出區塊鏈知識星球最專業技術問答社區,加入社區還可以在微信群里和300多位區塊鏈技術愛好者一起交流。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/24366.html
摘要:本文首發于深入淺出區塊鏈社區原文鏈接以太坊安卓錢包系列通過助記詞創建賬號原文已更新,請讀者前往原文閱讀上周我開源了一款錢包,反映很好,一周時間不到已經快到。的功能和類似,它是比特幣協議的實現,他實現了及相關協議。 本文首發于深入淺出區塊鏈社區原文鏈接:以太坊(安卓)錢包系列1 - 通過助記詞創建賬號原文已更新,請讀者前往原文閱讀 上周我開源了一款錢包,反映很好,一周時間不到已經快到10...
摘要:本文首發于深入淺出區塊鏈社區原文鏈接以太坊安卓錢包系列通過助記詞創建賬號原文已更新,請讀者前往原文閱讀上周我開源了一款錢包,反映很好,一周時間不到已經快到。的功能和類似,它是比特幣協議的實現,他實現了及相關協議。 本文首發于深入淺出區塊鏈社區原文鏈接:以太坊(安卓)錢包系列1 - 通過助記詞創建賬號原文已更新,請讀者前往原文閱讀 上周我開源了一款錢包,反映很好,一周時間不到已經快到10...
摘要:本文首發于深入淺出區塊鏈社區原文鏈接以太坊安卓錢包系列導入賬號及賬號管理原文已更新,請讀者前往原文閱讀這是如何開發一款以太坊安卓錢包系列第篇,如何導入賬號。提示大家閱讀本文時,最好把代碼庫克隆到本地對照閱讀。 本文首發于深入淺出區塊鏈社區原文鏈接:以太坊(安卓)錢包系列2 - 導入賬號及賬號管理原文已更新,請讀者前往原文閱讀 這是如何開發一款以太坊(安卓)錢包系列第2篇,如何導入賬號。...
本文首發于深入淺出區塊鏈社區原文鏈接:[使用 ethers.js 開發以太坊 Web 錢包 3 - 展示錢包信息及發起簽名交易)](https://learnblockchain.cn/20...,請讀者前往原文閱讀 以太坊去中心化網頁錢包開發系列,將從零開始開發出一個可以實際使用的錢包,本系列文章是理論與實戰相結合,一共有四篇:創建錢包賬號、賬號Keystore文件導入導出、展示錢包信息及發起簽...
閱讀 1868·2021-11-22 09:34
閱讀 1141·2021-10-09 09:44
閱讀 3001·2021-09-29 09:35
閱讀 3617·2021-09-14 18:01
閱讀 1465·2021-08-16 10:49
閱讀 1084·2019-08-29 14:11
閱讀 849·2019-08-29 12:47
閱讀 3068·2019-08-26 13:47