注册infura账号,获取项目工程IDhttps://infura.io/
- 创建一个项目
- 安装node.js,新建一个工程目录
mkdir web3 && cd web3 && echo {} > package.json
使用npm安装web3.js以及ethereumjs-tx:npm install web3 ethereumjs-tx
- 对于未知的东西都喜欢先从简单的测试开始一步步去了解,先进行个测试操作:
$ node
Welcome to Node.js v12.13.0.
Type ".help" for more information.
> var Web3 = require('web3')
undefined
> if (typeof web3 !== 'undefined') {
... web3 = new Web3(web3.currentProvider);
... } else {
... web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/19ccd12995a34b9ba3cb71f43473d3f3"));
... }
- 连接成功打印的内容
Web3 {
currentProvider: [Getter/Setter],
_requestManager: RequestManager {
provider: HttpProvider {
host: 'https://mainnet.infura.io/v3/19ccd12995a34b9ba3cb71f43473d3f3',
httpsAgent: [Agent],
withCredentials: false,
timeout: 0,
headers: undefined,
connected: false
},
providers: {
WebsocketProvider: [Function: WebsocketProvider],
HttpProvider: [Function: HttpProvider],
IpcProvider: [Function: IpcProvider]
},
subscriptions: {}
},
givenProvider: null,
providers: {
WebsocketProvider: [Function: WebsocketProvider],
HttpProvider: [Function: HttpProvider],
IpcProvider: [Function: IpcProvider]
},
_provider: HttpProvider {
host: 'https://mainnet.infura.io/v3/19ccd12995a34b9ba3cb71f43473d3f3',
.....
}
- 获取最新块号
> web3.eth.getBlockNumber().then(console.log)
Promise { <pending> }
> 9075364
- 返回链上指定地址的账户余额
> web3.eth.getBalance('0x26107fd2d10faeb14bc795664152f873d822746f').then(console.log);
Promise { <pending> }
> 2767424000000000
- 获取当前的gas价格
> web3.eth.getGasPrice().then(console.log)
Promise { <pending> }
> 2000000000
- 根据文档以及测试操作基本了解了一些函数的使用,开始编写转账代码进行以太坊转账操作
touch transfer.js
// 合约地址
var fromAddr = "0x26107fd2d10faeb14bc795664152f873d822746f";
var fromPrivateKey = "0x00000000000xxxx000x00x00x00x0x0x0x00000";
var toAddr = "0xf3f6A64A203EC45fda1bea0397A749736D4FCF9C";
var Web3 = require("web3");
var fs = require('fs');
var Tx = require('ethereumjs-tx').Transaction;
// 创建web3对象
if (typeof web3 !== 'undefined') {
web3 = new Web3(web3.currentProvider);
} else {
web3 = new Web3(new Web3.providers.HttpProvider("https://mainnet.infura.io/v3/19ccd12995a34b9ba3cb71f43473d3f3"));
}
web3.eth.getTransactionCount(fromAddr).then( function(nonce){
var rawTx = {
"from": fromAddr,
"nonce": web3.utils.numberToHex(parseInt(nonce)),
"gasPrice": web3.utils.numberToHex('2000000000'),
"gasLimit": web3.utils.numberToHex(50000),
"to": toAddr,
"value": web3.utils.numberToHex('2000000000000000'),
"chainId": 0x01 // mainnet chain
};
var privateKey = new Buffer.from(fromPrivateKey, 'hex');
var tx = new Tx(rawTx);
tx.sign(privateKey);
var serializedTx = tx.serialize();
console.log(serializedTx.toString('hex'));
web3.eth.sendSignedTransaction('0x' + serializedTx.toString('hex')).on('transactionHash', function(hash){
console.log('Txn:' + hash);
}).on('receipt', function(receipt){
console.log('Receipt:' + receipt);
});
});
- 执行代码进行转账
node transfer.js
成功会正常打印交易信息
f86a03847735940082c35094f3f6a64a203ec45fda1bea0397a749736d4fcf9c8711c37937e080008025a0a0203906c61cdb47c4cc5c112c9f839f1d8e817f039eb2b484c162982bf5ab4ba067ff5acc8e6dcffe2e13ce2f7a4f5b9acccf7271b1628547c3bb998a7dbebbc8
Txn:0x65a274191d95b57a19fdbe5db59ea6975c36a2a065c41731e03a215906a90987
Receipt:[object Object]
- https://etherscan.io/查询交易的情况
- 转账成功,中间百度、google了好多网络文章,都没有可以能够使用的案例,基本上都是过时的案例,最后拼凑完成功转账了,才发现跟文档写的一模一样,没有好好看文档就会走好多弯路
来源:CSDN
作者:harry.bao
链接:https://blog.csdn.net/weixin_41960571/article/details/103464155