一、导入模块
- npm i web3
- npm i buffer
二、创建一个Web3实例
//用来连接以太坊节点
const web3 = new Web3(Web3.givenProvider || "定义自己的以太坊节点")
如果Web3.givenProvider为空,即没有metamask插件或其他以太坊节点提供者,则使用后面的提供者
三、创建账户
const account = web3.eth.accounts.create(“123”);
参数作为随机数的种子生成私钥
创建好账户之后保存账户的地址和私钥,避免刷新时,重新创建多个账户
四、定义交易数据
// 交易次数
let nonce = await web3.eth.getBlockTransactionCount(address.value);
//预计转账gas费
let gasPrice = await web3.eth.getGasPrice()
// 转账金额以wei为单位
let value = web3.utils.toWei(“0.001”, “ether”)
//转账参数对象
let rawTx = {
from: address.value,
to: ‘0x5159e630Bfed1f268B6745F29EC15399cdD8B6C0’,
data: “0x0000”,
gasPrice, gasPrice,
value,
}
五、对交易进行签名,发送交易
// 对交易进行签名,私钥必须是字节类型
const signedTx = await web3.eth.accounts.signTransaction(rawTx, privateKey);
//发送已签名的交易
const sentTx = web3.eth.sendSignedTransaction(signedTx.raw || signedTx.rawTransaction)
以下是具体代码:
const web3 = new Web3(Web3.givenProvider || "定义自己的以太坊节点")
//创建账户
const account = web3.eth.accounts.create("123");
// 记录账户信息,从浏览器复制过来
const address = ref()
const password = ref()
//账户余额
let money = ref(0)
web3.eth.getBalance(address.value).then((res) => {
money.value = web3.utils.fromWei(res, 'ether')
})
const send = async () => {
// 构建转账参数
// 交易次数
let nonce = await web3.eth.getBlockTransactionCount(address.value);
//预计转账gas费
let gasPrice = await web3.eth.getGasPrice()
console.log(gasPrice);
// 转账金额以wei为单位
let value = web3.utils.toWei("0.001", "ether")
//转账参数对象
let rawTx = {
from: address.value,
to: '0x5159e630Bfed1f268B6745F29EC15399cdD8B6C0',
data: "0x0000",
gasPrice, gasPrice,
value,
}
// 把私钥转换成字节类型,需要去掉前面的0x
let privateKey = Buffer.from(password.value.slice(2), 'hex')
// 需要用到的gas数量
const gas = await web3.eth.estimateGas(rawTx)
rawTx.gas = gas
// 对交易进行签名,私钥必须是字节类型
const signedTx = await web3.eth.accounts.signTransaction(rawTx, privateKey);
//发送已签名的交易
const sentTx = web3.eth.sendSignedTransaction(signedTx.raw || signedTx.rawTransaction)
// 若交易成功,则触发该事件
sentTx.on("receipt", receipt => {
console.log(receipt);
})
// 交易哈希生成,触发此事件
sentTx.on("transactionHash", txid => {
console.log(txid);
})
sentTx.on("error", e => {
console.log(e);
}).catch(err => {
console.log(err);
})
交易成功
let value = web3.utils.toWei(“0.001”, “ether”)
这是要转账的数量