在以太坊的錢包開發(fā)1中荸镊,我們介紹了node環(huán)境搭建、本地區(qū)塊鏈節(jié)點(diǎn)的搭建與啟動(dòng)阅束,下面開始實(shí)現(xiàn)錢包轉(zhuǎn)賬呼胚。
在app.js中,
var Web3 = require('web3');
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
} else {
// set the provider you want from Web3.providers
web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
var version = web3.version.api;
console.log(version);
我們實(shí)例化了web3的對象息裸,使用這個(gè)對象可以實(shí)現(xiàn)我們要的所有功能蝇更。
查看余額
web3.eth.getBalance('錢包地址', function(err,result) {
if (err == null) {
console.log('~balance:'+result);
}else {
console.log('~error:'+err);
}
});
查看交易
web3.eth.getTransaction('交易hash碼',function (err, result) {
if (err == null) {
console.log('transaction:'+result);
} else {
console.log('error:'+err);
}
});
轉(zhuǎn)賬
此處需要載入ethereumjs-tx模塊:
cd wallet
npm install ethereumjs-tx --save
var Tx = require('ethereumjs-tx');
var privateKey = new Buffer('錢包賬戶私鑰', 'hex');
var rawTx = {
nonce: nonce,
gasPrice: '0x3b9aca00',
gasLimit: '0x493e0',
to: '收錢地址',
value: '金額數(shù)',
data: ''
};
var tx = new Tx(rawTx);
tx.sign(privateKey);
var serializedTx = tx.serialize();
web3.eth.sendRawTransaction('0x' + serializedTx.toString('hex'), function(err, hash) {
console.log('交易結(jié)果:'+hash);
if (callback && typeof(callback) === "function") {
if (!err)
callback(null, hash);
else
callback(err, null);
}
});
node app.js //執(zhí)行
這里要注意nonce的使用,nonce是指同一個(gè)賬號在同一個(gè)節(jié)點(diǎn)下呼盆,發(fā)起的交易排序號年扩。nonce從0開始算起,每次加一访圃。如果你的賬號當(dāng)前nonce是10常遂,你發(fā)起了nonce為12的交易A,那么只有nonce為10、11的交易完成了克胳,才輪到nonce為12的交易A平绩。中間如果這個(gè)節(jié)點(diǎn)重啟了,那么這個(gè)交易A就會被取消掉漠另。建議用web3.eth.getTransactionCount(‘你的錢包地址’) 來獲取當(dāng)前nonce捏雌,每次加一。
后續(xù)笆搓,使用NodeJS開發(fā)接口給前端性湿、移動(dòng)端使用。满败。
參考:https://github.com/ethereum/wiki/wiki/JavaScript-API#web3ethgettransactioncount