如何建立BTC/ETH/TRX等主流錢包並離線簽名

買賣虛擬貨幣

什麼是區塊鏈錢包?

我們通常所說的區塊鏈錢包其實是一種確定性錢包,也稱為去中心化錢包,例如 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 具備基礎的節點資料查詢功能之外,還提供離線簽名和交易上鍊的資料介面,極大減少了錢包的開發時間。而且郵箱就可以免費註冊使用,是進行區塊鏈應用開發的首選平臺!


免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读