vite搭建的vue3项目中,使用web3进行以太坊转账

2 篇文章 0 订阅
1 篇文章 0 订阅

一、导入模块

  1. npm i web3
  2. 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”)
这是要转账的数量

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值