NodeJs實現以太坊錢包keystore生成,匯入私鑰,匯出私鑰,匯入keystore,匯出Keystore,簽名,轉賬,轉賬確認
Keythereum是一個用於生成,匯入和匯出以太坊金鑰的JavaScript工具。 這提供了一種在本地和Web錢包中使用同一帳戶的簡單方法。 它可用於可驗證和儲存錢包。
Keythereum使用相同的金鑰派生函式(PBKDF2-SHA256或scrypt),對稱密碼(AES-128-CTR或AES-128-CBC)和訊息驗證程式碼作為geth。 您可以將生成的金鑰匯出到檔案,將其複製到資料目錄的金鑰庫,然後立即開始在您的本地以太坊客戶端中使用它。
從版本0.5.0開始,keythereum的加密和解密函式都返回Buffers而不是字串。 對於直接使用這些功能的人來說,這是一個重大改變。
1.1.使用keythereum生產keystore
在生產keystore之前,你必須有一個nodeJs的環境,並且安裝keythereum
npm install keythereum
或者使用壓縮的瀏覽器檔案dist/keythereum.min.js,以便在瀏覽器中使用。 使用一下程式碼引入
<script src="dist/keythereum.min.js" type="text/javascript"></script>
生成一個新的隨機私鑰(256位),以及金鑰派生函式使用的salt(256位),用於AES-128-CTR的初始化向量(128位)對金鑰進行加密。 如果傳遞迴調函式,則create是非同步的,否則是同步的。
下面是生成keystore的程式碼:
var keythereum = require("keythereum"); var params = { keyBytes: 32, ivBytes: 16 }; var dk = keythereum.create(params); keythereum.create(params, function (dk) { var password = "wheethereum"; var kdf = "pbkdf2"; var options = { kdf: "pbkdf2", cipher: "aes-128-ctr", kdfparams: { c: 262144, dklen: 32, prf: "hmac-sha256" } }; keythereum.dump(password, dk.privateKey, dk.salt, dk.iv, options, function (keyObject) { console.log(keyObject); }); });
下圖是執行結果:
.:
1.2.將keystore到檔案中儲存
dump建立一個物件而不是JSON字串。 在Node中,exportToFile方法提供了一種將此格式化的金鑰物件匯出到檔案的簡便方法。 它在keystore子目錄中建立一個JSON檔案,並使用geth的當前檔案命名約定(ISO時間戳與金鑰派生的以太坊地址連線)。
程式碼如下:
var keythereum = require("keythereum");
var params = { keyBytes: 32, ivBytes: 16 };
var dk = keythereum.create(params);
keythereum.create(params, function (dk) {
var password = "wheethereum";
var kdf = "pbkdf2";
var options = {
kdf: "pbkdf2",
cipher: "aes-128-ctr",
kdfparams: {
c: 262144,
dklen: 32,
prf: "hmac-sha256"
}
};
keythereum.dump(password, dk.privateKey, dk.salt, dk.iv, options, function (keyObject) {
keythereum.exportToFile(keyObject);
});
});
成功之後在你的keystor目錄下將看到下面這些資訊,如果出現錯誤,最可能的原因就是你的目錄下沒有keystore這個目錄,當然以上程式碼中你也可以指定keystore的儲存目錄
.:
1.3.keystore的匯入
從geth的金鑰庫匯入金鑰只能在Node上完成。 將JSON檔案解析為與上面的keyObject具有相同結構的物件。
var datadir = "/home/jack/.ethereum-test";
var keyObject = keythereum.importFromFile(address, datadir);
console.log(keyObject)
keythereum.importFromFile(address, datadir, function (keyObject) {
console.log(keyObject)
});
1.4.從keystore中恢復私鑰
這裡恢復出來的私鑰是buffer格式的,password是你設定的密碼,keyObject就是keystore
var privateKey = keythereum.recover(password, keyObject);
console.log(privateKey)
keythereum.recover(password, keyObject, function (privateKey) {
console.log(privateKey)
});
區塊鏈錢包技術指南GitHub:https://github.com/guoshijiang/blockchain-wallet/