什麼是區塊鏈錢包?
我們通常所說的區塊鏈錢包其實是一種確定性錢包,也稱為去中心化錢包,例如 viewtoken, mytoken等。
什麼是確定性錢包呢?確定性錢包就是所有的金鑰都是從一個主金鑰派生出來,這個主金鑰即為種子(seed)。該型別錢包中所有金鑰都相互關聯,如果有原始種子,則可以再次生成全部金鑰。但是由於種子是一串隨機數,不便於記憶,所以我們用演算法將種子轉化為一串助記詞(mnemonic),方便儲存記錄,我們只要儲存了助記詞,就可以儲存自己的資產。
如何建立錢包?
區塊鏈錢包即確定性錢包的主要功能是交易。錢包儲存著我們的數字貨幣資訊,包括地址和私鑰。建立錢包,獲取私鑰,生成地址,賦予錢包交易功能即可完成一個基本的錢包。
一、fork錢包原始碼
tokenview github (https://github.com/tokenview/api-demo) 有全面的開源專案供開發者建立錢包。該開源專案包含了各種主流幣的地址生成規則,以及離線簽名的過程,交易廣播及查詢等。具體操作步驟如下:
1. 從tokenview github 頁面下載專案程式碼,並新建專案。
2. 匯入下載的 module,該專案依賴了 maven 庫。
二、獲取私鑰(和私鑰助記詞)
私鑰是由隨機種子生成的,公鑰是將私鑰透過演算法推匯出來的。由於公鑰太長,為了簡便實用,就出現了“地址”,地址是公鑰推匯出來的。這些推導過程是單向不可逆的。也就是地址不能推出公鑰,公鑰不能推出私鑰。種子是一串隨機數。透過演算法,可以將種子轉化為助記詞。
1. 種子生成
我們知道了確定性錢包是由種子(隨機數生成器生成的隨機數)是進行單向雜湊運算生成的。我們可以選擇種子的長度,分別有128,160,192,224,256位的生成方式。種子長度不同對應的助記詞的個數也不同,128,160,192,224,256位的生成方式分別對應的助記詞個數為12,15,18,21,24。我們通常見到的錢包生成的助記詞個數為12個。種子的生成過程如下:
long creationtimeseconds = system.currenttimemillis() /1000;
deterministicseed ds =new deterministicseed(securerandom, 128, creationtimeseconds);
2. 種子轉化成助記詞
生成的種子可以轉換成助記詞,轉換程式碼如下:
list mnemoniclist = ds.getmnemoniccode();
3. 派生對應的公私鑰對
透過確定性錢包,根據不同的幣種和地址索引由種子派生出相對應的公私鑰對。具體操作如下,這樣我們就得到了私鑰和助記詞,同時也獲取到了公鑰。
三、獲取錢包地址
地址是透過公鑰進行了一系列的轉換而獲得的,其中主要的是進行了多重的雜湊運算。根據上面派生出的公鑰獲取錢包地址。
1. 生成地址
不同公鏈生成地址的規則不同,由此得到不同鏈對應的錢包地址。可透過該網站https://iancoleman.io/bip39/驗證生成的地址是否正確。
透過以上步驟我們就獲取到了錢包的地址。接下來我們還需要一些步驟,使得錢包能夠具備轉賬交易的功能。
四、錢包交易
錢包交易之前,需要獲取地址的 nonce,最佳手續費和餘額資訊。
1. 獲取地址的 nonce
什麼是地址的 nonce? nonce是一個非常關鍵的引數。nonce在交易中主要目的是為了防止雙花,即防止同一地址的一筆錢被花兩次。例如在以太坊節點中,要求每筆交易必須有一個nonce數值。每一個賬戶從同一個節點發起交易時,這個 nonce 值從0開始計數,傳送一筆交易nonce 對應加 1。當前面的 nonce 處理完成之後才會處理後面的 nonce。
tokenview api可以幫助使用者直接獲取到地址的nonce。可以到tokenview api節點服務系統獲取 tokenview apikey,便可透過api介面獲取 eth 地址的 nonce。
以獲取以太坊 eth 地址的 nonce 為例:https://services.tokenview.com/vipapi/onchainwallet/eth?apikey={your_apikey}
2. 獲取最佳手續費
在區塊鏈數字貨幣交易時,交易者需要付一筆手續費給礦工,請礦工幫忙打包交易。當手續費不足時會導致交易失敗,手續費過低會導致交易長時間處於未確認狀態。
如何獲取最佳交易手續費呢?tokenview api 同時提供了獲取最佳手續費的介面。https://services.tokenview.com/vipapi/pendingstat/{幣簡稱小寫}?apikey={apikey}。
3. 獲取地址餘額
錢包轉賬交易前,需要檢視該地址是否有餘額。若餘額不足,也無法轉賬。獲取地址餘額api:https://services.tokenview.com/vipapi/addr/b/{公鏈簡稱小寫}/{地址}?apikey={apikey}
五、離線簽名並上鏈
1. 離線簽名
離線簽名就是在不聯網的情況進行簽名,隨後將簽名後的原始資料放在網路上進行廣播,從而達到交易的目的。最主要的原因在於保護使用者的私鑰安全。
推薦使用 tokenview sdk 提供的簽名方法進行簽名。具體操作步驟如下:
2. 廣播交易
我們獲取到對應簽完名的交易資料,最後廣播交易到鏈上。這個步驟可以透過 tokenview api 來實現 。https://services.tokenview.com/vipapi/onchainwallet/{幣種簡稱小寫}?apikey={apikey}
到此我們就完成了整個去中心化錢包的開發過程,一個簡單的錢包就可以生成了。
tokenview api 具備基礎的節點資料查詢功能之外,還提供離線簽名和交易上鍊的資料介面,極大減少了錢包的開發時間。而且郵箱就可以免費註冊使用,是進行區塊鏈應用開發的首選平臺!