DAPP实战篇:使用web3.js连接合约

news2025/4/12 16:36:41

说明

本系列内容目录:专栏:区块链入门到放弃查看目录

如果你还没有创建好项目请先查看:《DApp实战篇:先用前端起个项目》,如果你还不知道web3.js是什么请先查看:《DApp实战篇:前端技术栈一览》。

安装

点此查看web3.js官方文档

打开项目根目录,并唤起终端:

键入web3.js安装命令:

npm install web3

之后回车安装即可。

再运行项目:

运行成功后会在浏览器中默认打开项目,如下:

开始开发

为了方便调试和可视化,我们先在页面上写一个连接合约按钮,代码如下:

<template>
  <q-page class="flex flex-center">
    <q-btn color="primary" label="点击连接合约"></q-btn>
  </q-page>
</template>

<script setup>
//
</script>

运行效果如下:

按钮思路

现在我们需要完成的是点击按钮就实现合约连接,如果报错则显示在按钮下面,如果连接成功则则按钮上面显示个连接成功。

修改UI

<template>
  <q-page class="flex flex-center">
    <q-card class="text-center main-card">
      <q-card-section class="text-positive">
        <q-icon name="check" size="4em"></q-icon>
        <h5 class="text-h5 font-weight-bold">连接成功</h5>
      </q-card-section>
      <q-card-section>
        <q-btn size="lg" glossy push color="primary" label="点击连接合约"></q-btn>
      </q-card-section>
      <q-card-section class="text-small text-negative"> 连接失败,错误原因: </q-card-section>
    </q-card>
  </q-page>
</template>

<script>
import { defineComponent } from 'vue'
export default defineComponent({
  name: 'IndexPage',
})
</script>
<style>
.main-card {
  width: 450px;
}
</style>

运行如图:

定义两个变量来控制显示

目前我们的所有元素都是全部显示的,我们要实现的应该是如果连接成功则显示连接成功和隐藏按钮,如果连接失败则显示连接失败以及错误原因,因此再改一下:

<template>
  <q-page class="flex flex-center">
    <q-card class="text-center main-card">
      <q-card-section class="text-positive" v-if="isConnected">
        <q-icon name="check" size="4em"></q-icon>
        <h5 class="text-h5 font-weight-bold">连接成功</h5>
      </q-card-section>
      <q-card-section v-if="!isConnected">
        <q-btn size="lg" glossy push color="primary" label="点击连接合约"></q-btn>
      </q-card-section>
      <q-card-section class="text-small text-negative" v-if="errorMessage !== ''">
        连接失败,错误原因:
      </q-card-section>
    </q-card>
  </q-page>
</template>

<script>
import { defineComponent } from 'vue'
export default defineComponent({
  name: 'IndexPage',
  data: function () {
    return {
      isConnected: false, //是否连接成功
      errorMessage: '', //是否报错
    }
  },
})
</script>
<style>
.main-card {
  width: 450px;
}
</style>

修改完成运行如图:

连接合约

我们先定义一个连接合约的函数,并将其绑定到按钮上:

<template>
  <q-page class="flex flex-center">
    <q-card class="text-center main-card">
      <q-card-section class="text-positive" v-if="isConnected">
        <q-icon name="check" size="4em"></q-icon>
        <h5 class="text-h5 font-weight-bold">连接成功</h5>
      </q-card-section>
      <q-card-section v-if="!isConnected">
        <!-- 点击连接 -->
        <q-btn @click="connect" size="lg" glossy push color="primary" label="点击连接合约"></q-btn>
      </q-card-section>
      <q-card-section class="text-small text-negative" v-if="errorMessage !== ''">
        连接失败,错误原因:
      </q-card-section>
    </q-card>
  </q-page>
</template>

<script>
import { defineComponent } from 'vue'
export default defineComponent({
  name: 'IndexPage',
  data: function () {
    return {
      isConnected: false, //是否连接成功
      errorMessage: '', //是否报错
    }
  },
  methods: {
    // 定义连接函数
    connect: function () {},
  },
})
</script>
<style>
.main-card {
  width: 450px;
}
</style>

之后开始编码连接:

web3方法:

new web3.eth.Contract(jsonInterface[, address][, options])

1.jsonInterface

ABI对象:至于什么是abi可以查看《基础知识补充篇:认识智能合约的ABI》。

2.address

合约地址。

3.options

其他参数,目前用不到。

连接USDT合约

点此前往区块链浏览器查看合约

这里我们连接eth链的usdt合约,参数如下:

address:0xdac17f958d2ee523a2206206994597c13d831ec7

abi json 如下:

[
    {
        "constant": true,
        "inputs": [],
        "name": "name",
        "outputs": [
            {
                "name": "",
                "type": "string"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "_upgradedAddress",
                "type": "address"
            }
        ],
        "name": "deprecate",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {

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

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

相关文章

K8S-证书过期更新

K8S证书过期问题 K8S证书过期处理方法 Unable to connect to the server: x509: certificate has expired or is not yet valid 1、查看证书有效期&#xff1a; # kubeadm certs check-expiration2、备份证书 # cp -rp /etc/kubernetes /etc/kubernetes.bak3、直接重建证书 …

蓝桥杯第十五届真题——握手问题

#include<bits/stdc.h> using namespace std; int main() {ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int sum0;for(int i7;i<49;i){sumi;}cout<<sum;return 0; }

5G_WiFi_CE_DFS

目录 一、规范要求 1、法规目录 2、定义 3、运行模式 4、主/从设备相关的运行行为及具体的动态频率选择&#xff08;DFS&#xff09;要求 5、产品角色确定测试项目 6、测试项目 测试项1&#xff1a;信道可用性检查&#xff08;Channel Availability Check&#xff09; …

springboot 处理编码的格式为opus的音频数据解决方案【java8】

opus编码的格式概念&#xff1a; Opus是一个有损声音编码的格式&#xff0c;由Xiph.Org基金会开发&#xff0c;之后由IETF&#xff08;互联网工程任务组&#xff09;进行标准化&#xff0c;目标是希望用单一格式包含声音和语音&#xff0c;取代Speex和Vorbis&#xff0c;且适用…

RK3568 基于Gstreamer的多媒体调试记录

文章目录 1、环境介绍2、概念理清3、提前准备4、GStreamer编译5、GStreamer基础介绍6、视频播放初体验7、视频硬编码7.1、h2647.2、h265 8、视频硬解码8.1、解码视频并播放8.2、解码视频并播放带音频 1、环境介绍 硬件&#xff1a;飞凌ok3568-c开发板 软件&#xff1a;原厂rk…

VS Code 的 .S 汇编文件里面的注释不显示绿色

1. 确认文件语言模式 打开 .S 文件后&#xff0c;查看 VS Code 右下角的状态栏&#xff0c;确认当前文件的识别模式&#xff08;如 Assembly、Plain Text 等&#xff09;。如果显示为 Plain Text 或其他非汇编模式&#xff1a; 点击状态栏中的语言模式&#xff08;如 Plain Te…

5分钟读懂ArgoCD:在Kubernetes中实现持续部署

Kubernetes中的Argo CD介绍 Argo CD是用于Kubernetes的声明式GitOps持续交付工具。它遵循GitOps模式&#xff0c;以Git仓库作为定义所需应用程序状态的唯一真实来源&#xff0c;能在指定的目标环境中自动部署应用程序&#xff0c;并持续监控应用程序的运行状态&#xff0c;确保…

cs224w课程学习笔记-第10课

cs224w课程学习笔记-第10课 异构图 前言一、异构图1、异构图定义2、异构图与同构图 二、异构图下的GNN1、GCN扩展至RGCN1.1 RGCN原理1.2 异构图的任务预测特点1.3 异构图任务预测基础案例 2、完整的异构图GCN三、异构图下的Transformer 前言 异构图的定义是节点内部存在类型不…

OpenCV 图形API(26)图像滤波-----方框滤波函数boxFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 使用方框滤波器模糊图像。 该函数使用以下内核来平滑图像&#xff1a; K α [ 1 1 … 1 1 1 … 1 ⋮ ⋮ ⋱ ⋮ 1 1 … 1 ] K \alpha \begin{b…

大模型上下文协议MCP详解(2)—核心功能

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. 标准化上下文交互技术 1.1 实时数据接入能力 MCP(Model Context Protocol)通过标准化的接口,为 AI 模型提供了强大的实时数据接入能力,使其能够快速获取和处理来自不同数据源的实时信息。…

剑指Offer(数据结构与算法面试题精讲)C++版——day8

剑指Offer&#xff08;数据结构与算法面试题精讲&#xff09;C版——day8 题目一&#xff1a;链表中环的入口节点题目二&#xff1a;两个链表的第1个重合节点题目三&#xff1a;反转链表附录&#xff1a;源码gitee仓库 题目一&#xff1a;链表中环的入口节点 这道题的有如下三个…

【Qt】QxOrm:下载、安装、使用

1、下载源码 github地址:https://github.com/QxOrm/QxOrm 稳定版本下载:https://github.com/QxOrm/QxOrm/releases/tag/1.5.0 2、编译源码 QxOrm支持cmake编译(CMakeLists.txt)、Qt pro工程编译(QxOrm.pro) 以 QxOrm.pro 为例,编译生成的库,没有在 build-QxOrm-1.5…

CISCO组建RIP V2路由网络

1.实验准备&#xff1a; 2.具体配置&#xff1a; 2.1根据分配好的IP地址配置静态IP&#xff1a; 2.1.1PC配置&#xff1a; PC0&#xff1a; PC1&#xff1a; PC2&#xff1a; 2.1.2路由器配置&#xff1a; R0&#xff1a; Router>en Router#conf t Enter configuration…

【数学建模】(智能优化算法)鲸鱼优化算法(Whale Optimization Algorithm)详解与应用

鲸鱼优化算法(Whale Optimization Algorithm)详解与应用 文章目录 鲸鱼优化算法(Whale Optimization Algorithm)详解与应用1. 引言2. 算法原理2.1 生物学基础2.2 数学模型[^3]1. 包围猎物阶段2. 气泡网攻击&#xff08;螺旋更新&#xff09;3. 随机搜索猎物&#xff08;全局探索…

【深度洞察】解码饮料行业破局点:场景革命

当东鹏特饮以 “大瓶装 防尘盖” 精准解决货车司机的场景化需求&#xff0c;当农夫山泉通过 “冷藏版东方树叶” 打开年轻白领的早餐场景 —— 这些现象级案例背后&#xff0c;是饮料行业底层逻辑的深刻变革&#xff1a;真正的市场增量&#xff0c;藏在对消费场景的极致拆解中…

工业科学级天文相机:跨界融合的高精密成像解决方案

随着国内科技的快速发展&#xff0c;工业相机领域正悄然兴起一场"天文级"的技术革命。这类兼具工业设备可靠性与天文观测精度的特殊相机&#xff0c;正在半导体制造、天文观测、空间探测等领域开辟新的应用疆域。其核心技术突破不仅体现在传感器性能的提升&#xff0…

回文日期2

#include <bits/stdc.h> using namespace std; bool huiwen(int date) {int tempdate;int r0;while(temp>0){rr*10temp%10;temp/10;}return dater; }int main() {// 请在此输入您的代码int n,m;cin>>n>>m;int tempfn/100,tempem/100;int yearfn/10000,mon…

Ubuntu搭建Pytorch环境

Ubuntu搭建Pytorch环境 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Ubuntu搭建Pytorch环境前言一、Anaconda二、Cuda1.安装流程2、环境变量&#…

图书管理系统(Python)

运行结果&#xff1a; 源代码&#xff1a; # 定义一个图书类 class Book: def __init__(self, title, author, isbn): self.title title self.author author self.isbn isbn def show_info(self): print(f"{self.title},{self.author},{self.isbn}") # 图书列表…

大模型本地部署系列(3) Ollama部署QwQ[阿里云通义千问]

大家好&#xff0c;我是AI研究者&#xff0c; 今天教大家部署 一个阿里云通义千问大模型。 QwQ大模型简介 QwQ是由阿里云通义千问&#xff08;Qwen&#xff09;团队推出的开源推理大模型&#xff0c;专注于提升AI在数学、编程和复杂逻辑推理方面的能力。其核心特点包括&#x…