谷歌插件开发(四)

所谓会者不难,难者不会。

因为没有经验,加之相关文档不多的缘故,今天确实遇到一个糟心事情。

首先是插件,钱包转账需要用到一个插件:ethereumjs-tx

使用这个插件,把转账的相关数据进行处理,然后通过web3相关的api来进行转账的操作。

let tx = new EthereumTx(details)
//使用的时候控制台一直报错

这很让人恼火,找了资料才发现有两个版本:

2.0版本的写法变掉了,但是web3js的api里面没有更新这个写法,所以会一直报错,要么使用新写法要么回退。

我觉得2.0版本写法繁琐,就给回退了。

数据处理问题解决了,那么下面就是转账功能啦。

根据网上一众大佬的文章,得出了如下的文档:

let details = {
    "to": '0x4445Bbd1f0942857741EEbA3B36970390E9cb887',// 接收方地址                                                              
    "value": self.$web3.utils.toHex(self.$web3.utils.toWei('0.01', 'ether')),// 转账 0.1wei  
    gasLimit: self.$web3.utils.toHex(99000),   
     gasPrice: self.$web3.utils.toHex(10e9),
    "nonce": self.$web3.utils.toHex(res++), // 序号ID, 重要, 需要一个账号的交易序号,可以通过web3.eth.getTransactionCount(web3.eth.defaultAccount)获得
	"chainId": self.walltContent.CHAIN_ID//主网ID
}

接下来是重点:

//先把这个数据转buffer
let privateKey = Buffer(‘0x66b3fd79a49dafe44507763e9b6739aa0810de2c15590ac22b5e2f0a3f502073’, 'hex') 
//然后使用上面提到的插件把数据转换掉
let tx = new EthereumTx(details)
//继续按照官方api处理数据
tx.sign(privateKey)
var serializedTx = tx.serialize();
let raw = '0x'+serializedTx.toString('hex');
//调用sendSignedTransaction方法转账
self.$web3.eth.sendSignedTransaction(raw).on('receipt',(res)=>{ })

我使用的是bsc测试网,上面的写法对比了好几次后发现跟官方还有其他大佬文章一样阿达,但是可就是死活各种问题,要么是gas费不够要么就是账户钱不够,翻来覆去的,gas费改了无数遍就是不行。

后来在web3教程中才发现buffer的那个数据是私钥,我当时还纳闷怎么都不要私钥就能转账了呢?

然后我就修改了我的buffer,但是还是不行,控制台依旧报错。

因为tx.sign操作私钥的时候,要把私钥前面的'0x'去掉才行。

一切准备就绪后,运行,一分钟不到就转账成功啦!

下面是完整代码:

self.$web3.eth.defaultAccount = walltAddress;
self.$web3.eth.getTransactionCount(self.$web3.eth.defaultAccount).then(res=>{
let details = {
	"to": '0x4445Bbd1f0942857741EEbA3B36970390E9cb887',// 接收方地址                                                              
	"value": self.$web3.utils.toHex(self.$web3.utils.toWei('0.01', 'ether')),// 转账 0.1wei  
	gasLimit: self.$web3.utils.toHex(99000),   
	gasPrice: self.$web3.utils.toHex(10e9),
	"nonce": self.$web3.utils.toHex(res++), // 序号ID, 重要, 需要一个账号的交易序号,可以通过web3.eth.getTransactionCount(web3.eth.defaultAccount)获得
	"chainId": self.walltContent.CHAIN_ID
}
let privateKey = Buffer(data.privateKey.substr(2), 'hex')
let tx = new EthereumTx(details)
tx.sign(privateKey)
var serializedTx = tx.serialize();
let raw = '0x'+serializedTx.toString('hex');
self.$web3.eth.sendSignedTransaction(raw).on('receipt',(res)=>{});

  

 因为老板成为了老赖,工资也不给,这一款插件开发也就到此为止了。

公司名叫:以宙科技有限公司,大家多多避坑吧!

posted @ 2022-12-06 22:13  骚年上天不?  阅读(125)  评论(0编辑  收藏  举报