【Web3】 Web3JS Pay Api

Web3Network.eth.sendSignedTransaction(serializedTx)

参数:

  • from- String|Number:发送帐户的地址。如果未指定,则使用web3.eth.defaultAccount属性。或web3.eth.accounts.wallet中本地的地址。

  • to- String:(可选)消息的目标地址,若未定义则为发送消息。

  • value- Number|String|BN|BigNumber:(可选)为wei中的交易转移的数量,如果是发送消息,则是捐赠给地址。

  • gas - Number:(可选,默认:待定)用于交易的gas(未使用的gas会退还)。

  • gasPrice- Number|String|BN|BigNumber:(可选)此交易的gas价格,以wei为单位,默认为web3.eth.gasPrice。

  • data- String:(可选)包含合同上函数调用数据的ABI字节字符串。

  • nonce- Number:(可选)随机数的整数。

EthPayApi

介绍:实现流程一共分为两部分,一完成Api参数、二完成privateKey加密发起Pay

初始化

npm install web3

<script setup name="EthPay">
import Web3 from 'web3'const Web3Network = new Web3(Web3.givenProvider || 'wss://goerli.infura.io/ws/v3/xxx'
)
</script>

'wss://goerli.infura.io/ws/v3/xxx' 网络节点需要替换为自己的网络节点,如果拿到自己网络节点查看:
【Web3】Web3连接到以太坊网络(测试网、主网)_春暖花开.,的博客-CSDN博客


一.Api参数

定义自己Eth账号

//钱包地址
const walletAddress = ref('你的ETh地址')
//钱包私钥
const walletPrivateKey = ref('你的Eth私钥'
)

参数一共分为

form //发送方地址    
nonce //发送方交易次数    
gasPric //预估手续费
to //接收方地址    
value //以wei单位数量   
data //转Token代币会用到的一个字段
gas //用于交易gas

1.nonce transaction次数

  //transaction次数const numberTransaction = await Web3Network.eth.getTransactionCount(walletAddress.value)

2.gasPric 获取预计手续费

  //获取预计手续费
const serviceCharge = await Web3Network.eth.getGasPrice()

3. value 数量

  //以wei为单位数量
const WeiMoney = Web3.utils.toWei('0.0001')

4.合并

 const rawTx = {form: walletAddress.value, //发送方地址nonce: numberTransaction, //发送方交易次数gasPrice: serviceCharge, //预估手续费to: 'xxx', //接收方地址value: WeiMoney, //以wei单位数字data: '0x00' //转Token代币会用到的一个字段}

5.gas 

  //把交易数据进行gas计算const gas = await Web3Network.eth.estimateGas(rawTx)rawTx.gas = gas

二.privateKey加密调用sendSignedTransaction函数

1.私钥转数组十六进制

为什么转换?: 因为 tx.sign() 要求长度必须在32位以内所以需要转换

npm install buffer

  import { Buffer } from 'buffer'//把privateKey转换 数组hexconst PrivatekeyHex = Buffer(walletPrivateKey.value, 'hex')console.log(`key:`, PrivatekeyHex)

2.ethereumjs-tx 库加密转换数组十六进制后Eth私钥
注意:tx.sign( ) 要求长度必须32位以内

npm install ethereumjs-tx@1.3.7

  import Tx from 'ethereumjs-tx' //privateKey加密const tx = new Tx(rawTx)tx.sign(PrivatekeyHex)//通过ethereumjs-tx加密并转为十六进制字符串const serializedTx = '0x' + tx.serialize().toString('hex')console.log(serializedTx)

3.如果出现这样报错

 error  in ./node_modules/cipher-base/index.js

Module not found: Error: Can't resolve 'stream' in 'C:\Users\ttatt\Desktop\前端\xxx\xxx\Web3\Web3实战\web3defivue\node_modules\cipher-base'

BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
        - add a fallback 'resolve.fallback: { "stream": require.resolve("stream-browserify") }'
        - install 'stream-browserify'
If you don't want to include a polyfill, you can use an empty module like this:
        resolve.fallback: { "stream": false }

ERROR in ./node_modules/cipher-base/index.js 3:16-43
Module not found: Error: Can't resolve 'stream' in 'C:\Users\ttatt\Desktop\xxx\xxx\85期\Web3\Web3实战\web3defivue\node_modules\cipher-base'

BREAKING CHANGE: webpack < 5 used to include polyfills for node.js core modules by default.
This is no longer the case. Verify if you need this module and configure a polyfill for it.

If you want to include a polyfill, you need to:
        - add a fallback 'resolve.fallback: { "stream": require.resolve("stream-browserify") }'
        - install 'stream-browserify'
If you don't want to include a polyfill, you can use an empty module like this:
        resolve.fallback: { "stream": false }
 @ ./node_modules/create-hash/browser.js 7:11-33
 @ ./node_modules/ethereumjs-util/dist/index.js 18:17-39
 @ ./node_modules/ethereumjs-tx/es5/index.js 9:14-40
 @ ./node_modules/babel-loader/lib/index.js??clonedRuleSet-40.use[0]!./node_modules/vue-loader/dist/index.js??ruleSet[0].use[0]!./src/App.vue?vue&type=script&setup=true&name=web3&lang=js 4:0-31 68:21-23 88:15-17
 @ ./src/App.vue?vue&type=script&setup=true&name=web3&lang=js 1:0-210 1:0-210 1:211-410 1:211-410
 @ ./src/App.vue 2:0-75 3:0-70 3:0-70 6:49-55
 @ ./src/main.js 2:0-28 6:22-25

webpack compiled with 1 error

要解决在 vue.config.js

npm install node-polyfill-webpack-plugin@2.0.1

const { defineConfig } = require('@vue/cli-service')
// 引入插件
const NodePolyfillWebpackPlugin = require('node-polyfill-webpack-plugin')module.exports = defineConfig({transpileDependencies: true,configureWebpack: {//使用插件plugins: [new NodePolyfillWebpackPlugin()]}
})

4.调用ETHPay函数sendSignedTransaction 开始EthPay是否成功

  //开始执行const Transfer = Web3Network.eth.sendSignedTransaction(serializedTx)// 监听是否成功 -- 加载中Transfer.on('transactionHash', txid => {console.log(`查看----https://goerli.etherscan.io/tx/${txid}`)})

代码

  //一.第一部分//transaction次数const numberTransaction = await Web3Network.eth.getTransactionCount(walletAddress.value)console.log(numberTransaction)//获取预计手续费const serviceCharge = await Web3Network.eth.getGasPrice()console.log(serviceCharge)//以wei为单位数量const WeiMoney = Web3.utils.toWei('0.0001')console.log(WeiMoney)//Api参数const rawTx = {form: walletAddress.value, //发送方地址nonce: numberTransaction, //发送方transaction次数gasPrice: serviceCharge, //预估手续费to: 'xxxx', //接收方地址value: WeiMoney, //以wei单位数量data: '0x00' //转Token会用到的一个字段}//把transaction数据进行gas计算const gas = await Web3Network.eth.estimateGas(rawTx)rawTx.gas = gas//二.第二部分//把privateKey转换 数组hex//因为 tx.sign() 要求长度必须在32位以内所以需要转换const PrivatekeyHex = Buffer(walletPrivateKey.value, 'hex')console.log(`key:`, PrivatekeyHex)//privateKey加密const tx = new Tx(rawTx)tx.sign(PrivatekeyHex)//通过ethereumjs-tx加密并转为十六进制字符串const serializedTx = '0x' + tx.serialize().toString('hex')//开始执行const Transfer = Web3Network.eth.sendSignedTransaction(serializedTx)// 监听是否成功 -- 加载中Transfer.on('transactionHash', txid => {console.log(txid)console.log(`查看----https://goerli.etherscan.io/tx/${txid}`)})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/36.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

宝塔Linux面板安装Composer依赖管理工具与PHP依赖包的方法

最近看见腾讯云有一个AI绘画还挺有意思&#xff0c;想搞来写个接口玩 但是Composer一直运行不成功 提示xdebug什么的 最后经过搜索 发现 需要删除你宝塔里所有php中禁用的putenv函数 然后重启php就可以了&#xff01; 然后就可以运行这个命令了 出现这种情况 还需要删除所有…

Linux常用命令——emacs命令

在线Linux命令查询工具 emacs 功能强大的全屏文本编辑器 补充说明 emacs命令是由GNU组织的创始人Richard Stallman开发的一个功能强大的全屏文本编辑器&#xff0c;它支持多种编程语言&#xff0c;具有很多优良的特性。有众多的系统管理员和软件开发者使用emacs。 语法 e…

ubuntu20.04上linux内核开发环境搭建(qemu+gdb+vscode)

qemugdbvscode环境搭建 1. 环境准备1.1 安装基础软件1.2 安装开发软件1.3 安装qemu 2. 制作rootfs2.1 buildroot制作rootfs2.2 busybox制作rootfs 3. kernel编译及运行3.1 编译内核3.2 启动内核3.3 qemu参数说明 4. vscode 图形化调试环境配置4.1 vscode配置4.2 qemu配置 1. 环…

服务器技术(三)--Nginx

Nginx介绍 Nginx是什么、适用场景 Nginx是一个高性能的HTTP和反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力确实在同类型的网页服务器中表现较好。 Nginx专为性能优化而开发&#xff0c;性能是其最重要的考量&#xf…

【Nginx】rewrite简单使用

前言 没有对正式的rewrite进行了解&#xff0c;为了能快速了解它是干嘛怎么用&#xff0c;找了一些有例子的博客进行简单学习了一下&#xff1b;由于每次看的间隔有点大&#xff0c;老忘记&#xff0c;这回专门写个超级快速理解的例子。 PS&#xff1a;下面的解释可能会不太对…

SMALE周报_20230714

目录标题 1. 上周回顾2. 本周计划3. 完成情况4. 存在的主要问题5. 下一步工作 1. 上周回顾 总结不确定性在神经网络中的运用。跳转链接 2. 本周计划 通过阅读论文《Semi-Supervised Deep Regression with Uncertainty Consistency and Variational Model Ensembling》&#…

LAXCUS分布式操作系统存在的意义和价值

总有一些新用户不能理解LAXCUS分布式操作系统&#xff0c;以及它存在的意义和价值&#xff0c;我这样说吧。 下图是一个图形桌面&#xff08;LAXCUS的图形桌面&#xff0c;不是Windows、也不是Macintosh&#xff09;&#xff0c;在它后面&#xff0c;连着一个计算机集群&#…

Scala集合 - Map;扩展元组类型

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 目录 一、不可变Map集合 1. 集合创建   2. 集合遍历   3. 获取Map中的value 二、可变Map集合 1. 创建可变Map集合   2. 添加元素   3. 删除元素   4. 修改Map中的元素 三、元组 1. 元组的创…

自然语言处理-文本表示: Embedding技术

目录 I. 引言 A. 文本表示介绍 B. 引入Embedding技术的重要性和应用领域 II. 传统文本表示方法 A. One-Hot编码 B. 词袋模型 C. TF-IDF III. 什么是文本表示-Embedding A. 定义和概念 B. Embedding的目标和作用 IV. 常见Embedding技术 A. Word2Vec 1. CBOW模型 2…

数据库技术与应用——目录篇

数据库技术与应用目录 文章目录 第1章 数据库基础知识数据库技术的概念数据管理的发展数据库的体系结构数据库管理系统常用的数据库管理系统介绍 第2章 信息得三种世界与数据模型信息的三种世界及其描述数据模型 第3章 关系模型关系模型的由来关系数据库的结构关系代数关系演算…

Flutter Notification (通知)

通知可以用来监听事件&#xff0c;用来刷新页面&#xff0c;先看通知的源码&#xff1a; class NotificationListener<T extends Notification> extends ProxyWidget {/// Creates a widget that listens for notifications.const NotificationListener({super.key,requ…

【代码】Python实现Excel数据合并

文章目录 概要整体架构流程代码小结 概要 通过遍历指定目录下的多个Excel文件&#xff0c;将它们的数据合并到一个新的Excel文件中&#xff0c;实现Excel数据合并的功能。 整体架构流程 代码的主要流程如下&#xff1a; 导入所需的库&#xff1a;os用于文件路径操作&#x…

pix2pix-gan医疗图像分割迁移

pix2pix-gan做医学图像合成的时候&#xff0c;如果把nii数据转成png格式会损失很多信息&#xff0c;以为png格式图像的灰度值有256阶&#xff0c;因此直接使用nii的医学图像做输入会更好一点。 但是Pythorch中的Dataloader是不能直接读取nii图像的&#xff0c;因此加一个Creat…

Linux命令----modprobe命令详解

【原文链接】Linux命令----modprobe命令详解 一、modprobe命令的作用 加载内核模块&#xff1a; 使用modprobe命令可以加载指定的内核模块到运行中的内核中。加载内核模块可以在运行时添加新的功能、驱动程序或修改内核行为。 解决模块依赖关系&#xff1a; modprobe命令可以…

excel的导出

excel的导出是开发常见的功能&#xff0c;但是excel得到处都是谁导出呢&#xff1f; 一般情况excel都是由后端导出生成blob格式返给前端&#xff0c;前端进行下载&#xff0c;当然前端也可以自己利用数据进行excel导出&#xff0c;这篇文章将介绍前端导出和后端导出的一些插件…

基于OpenCV的人脸对齐步骤详解及源码实现

目录 1. 前言2. 人脸对齐基本原理与步骤3. 人脸对齐代码实现 1. 前言 在做人脸识别的时候&#xff0c;前期的数据处理过程通常会遇到一个问题&#xff0c;需要将各种人脸从不同尺寸的图像中截取出来&#xff0c;再进行人脸对齐操作&#xff1a;即将人脸截取出来并将倾斜的人脸…

大数据是什么意思?现在学习还来得及么

数据的方向的切入是全方位的&#xff0c;基础语言的学习只是很小的一个方面&#xff0c;编程落实到最后到编程思想&#xff0c;有了指导思想学习起来就能方便很多。 随着互联网大潮走向低谷&#xff0c;同时传统企业纷纷进行数字化转型&#xff0c;基本各个公司都在考虑如何进…

QT学习之旅 - QThread多线程

文章目录 首先是主线程 其次是一个程序 通过一个QThread来放入程序 进阶一点: 手动开启关闭线程俩个线程 其实QT中的thread(线程)是很容易的 首先是主线程 #include "mainwindow.h" #include "ui_mainwindow.h"#include <QDebug>MainWindow::MainWin…

【图像处理】经营您的第一个U-Net以进行图像分割

一、说明 AI厨师们&#xff0c;今天您将学习如何准备计算机视觉中最重要的食谱之一&#xff1a;U-Net。本文将叙述&#xff1a;1语义与实例分割&#xff0c;2 图像分割中还使用了其他损失&#xff0c;例如Jaccard损失&#xff0c;焦点损失&#xff1b;3 如果2D图像分割对您来说…

spring 详解二 IOC(Bean xml配置及DI)

配置列表 Xml配置 功能描述 <bean id"" class""></bean> Bean的id&#xff0c;配置id会转为Bean名称和不配就是全限定类名 <bean name"" ></bean> Bean的别名配置&#xff0c;存储在Factory的aliasMap中通过别名也…