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

说明

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

如果你还没有创建好项目请先查看:《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.mzph.cn/bicheng/76164.shtml

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

相关文章

源代码保密解决方案

背景分析 随着各行各业业务数据信息化发展&#xff0c;各类产品研发及设计等行业&#xff0c;都有关乎自身发展的核心数据&#xff0c;包括业务数据、源代码保密数据、机密文档、用户数据等敏感信息&#xff0c;这些信息数据有以下共性&#xff1a; — 属于核心机密资料&…

dolphinscheduler单机部署链接oracle

部署成功请给小编一个赞或者收藏激励小编 1、安装准备 JDK版本:1.8或者1.8oracle版本&#xff1a;19Coracle驱动版本&#xff1a;8 2、安装jdk 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#java8 下载后上传到/tmp目录下。 然后执行下面命…

2025-04-08 NO.4 Quest3 交互教程

文章目录 1 环境准备2 新手指引&#xff1a;Building Blocks2.1 创建 OVR 相机2.2 创建交互功能2.3 创建交互物体 3 老手开发&#xff1a;Interaction SDK3.1 创建交互功能3.2 创建交互物体 4 UI 交互4.1 3D 按钮4.2 Unity UI ​ 新版 Meta SDK&#xff08;v74&#xff09;优化…

关于Spring MVC中@RequestMapping注解的详细解析,涵盖其核心功能、属性、使用场景及最佳实践

以下是关于Spring MVC中RequestMapping注解的详细解析&#xff0c;涵盖其核心功能、属性、使用场景及最佳实践&#xff1a; 1. 基础概念 RequestMapping是Spring MVC的核心注解&#xff0c;用于将HTTP请求映射到控制器&#xff08;Controller&#xff09;的方法上。它支持类级…

Scala 异常处理

Scala 异常处理 引言 Scala 是一门多范式编程语言,它结合了面向对象和函数式编程的特性。在软件开发过程中,异常处理是保证程序稳定性和可靠性的重要环节。本文将深入探讨 Scala 中的异常处理机制,包括异常的抛出、捕获和处理策略。 异常概述 什么是异常? 在计算机编程…

PyTorch:解锁AI新时代的钥匙

&#xff08;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff09;。 揭开PyTorch面纱 对于许多刚开始接触人工智能领域的朋友来说&#xff0c;PyTorch这个名字或许既熟悉又陌生。…

React-06React中refs属性(字符串refs,回调形式,React.createRef() )

1.React中refs属性 绑定到render输出的任何组件上&#xff0c;通过this.ref.绑定名直接操作DOM元素或获取子组件的实例。 2.绑定refs实例 2.1 字符串refs(已经过时参考官网API) 字符串(string)的ref存在一定的效率问题 <input refinput1 type"text" placehole…

五子棋游戏开发:静态资源的重要性与设计思路

以下是以CSDN博客的形式整理的关于五子棋游戏静态资源需求的文章&#xff0c;基于我们之前的讨论&#xff0c;内容结构清晰&#xff0c;适合开发者阅读和参考。我尽量保持技术性、实用性&#xff0c;同时加入一些吸引读者的亮点。 五子棋游戏开发&#xff1a;静态资源的重要性与…

c编译和c++编译有什么区别?

文章目录 c编译和c编译有什么区别多态函数重载虚函数表 vtable 输入输出同步类型检查模板和特化链接 C 标准库 C 能编译 C 的代码吗&#xff1f; c编译和c编译有什么区别 多态 函数重载 C 支持多个同名函数&#xff08;参数不同&#xff09;&#xff0c;这是编译期多态 编译…

无缝集成Docker与Maven:docker-maven-plugin实战指南

关于 docker-maven-plugin 的详细介绍和使用指南&#xff0c;帮助你在 Maven 项目中实现 Docker 镜像的自动化构建、推送和管理。 1. 插件的作用 docker-maven-plugin 是一个 Maven 插件&#xff0c;允许在 Maven 构建生命周期中直接集成 Docker 操作&#xff0c;例如&#xf…

智能仓储数字孪生Demo(Unity实现)

一、项目背景与行业痛点 医药流通行业仓储管理面临三大核心挑战&#xff1a; 合规性风险&#xff1a;GSP&#xff08;药品经营质量管理规范&#xff09;对温湿度、药品批次追溯的严苛要求&#xff0c;传统人工记录易出错效率瓶颈&#xff1a;库区布局复杂&#xff0c;人工巡检…

详解 Go 的常见环境变量及其在 zshrc 中的配置

Go 语言作为一门现代化的编程语言&#xff0c;其编译、构建和包管理等环节都依赖于一系列环境变量的配置。正确理解和设置这些环境变量&#xff0c;对于 Go 开发至关重要。本文将详细介绍 Go 的常见环境变量&#xff0c;并解释如何将其配置到 zshrc 文件中&#xff0c;以方便日…

【NLP 55、强化学习与NLP】

万事开头难&#xff0c;苦尽便是甜 —— 25.4.8 一、什么是强化学习 强化学习和有监督学习是机器学习中的两种不同的学习范式 强化学习&#xff1a;目标是让智能体通过与环境的交互&#xff0c;学习到一个最优策略以最大化长期累积奖励。 不告诉具体路线&#xff0c;首先去做…

Java 面试系列:Java 中的运算符和流程控制 + 面试题

算术运算符 Java 中的算术运算符&#xff0c;包括以下几种&#xff1a; 算术运算符名称举例加法123-减法2-11*乘法2*36/除法24/83%求余24%73自增1int i1;i--自减1int i1;i-- 我们本讲要重点讲的是 “” 和 “--”&#xff0c;其他的算术运算符相对比较简单直观&#xff0c;本讲…

硅谷甄选项目笔记

硅谷甄选运营平台 此次教学课程为硅谷甄选运营平台项目,包含运营平台项目模板从0到1开发&#xff0c;以及数据大屏幕、权限等业务。 此次教学课程涉及到技术栈包含***:vue3TypeScriptvue-routerpiniaelement-plusaxiosecharts***等技术栈。 一、vue3组件通信方式 通信仓库地…

zk基础—zk实现分布式功能

1.zk实现数据发布订阅 (1)发布订阅系统一般有推模式和拉模式 推模式&#xff1a;服务端主动将更新的数据发送给所有订阅的客户端。 拉模式&#xff1a;客户端主动发起请求来获取最新数据(定时轮询拉取)。 (2)zk采用了推拉相结合来实现发布订阅 首先客户端需要向服务端注册自己关…

大坑!GaussDB数据库批量插入数据变只读

大坑!GaussDB数据库批量插入数据变只读 GaussDB插入数据时变只读df和du为什么不一致GaussDB磁盘空间使用阈值GaussDB变只读怎么办正确删除表的姿势GaussDB插入数据时变只读 涉及的数据库版本为:GaussDB Kernel 505.1.0 build da28c417。 GuassDB TPCC灌数报错DML失败,数据…

动态规划算法深度解析:0-1背包问题(含完整流程)

简介&#xff1a; 0-1背包问题是经典的组合优化问题&#xff1a;给定一组物品&#xff08;每个物品有重量和价值&#xff09;&#xff0c;在背包容量限制下选择物品装入背包&#xff0c;要求总价值最大化且每个物品不可重复选取。 动态规划核心思想 通过构建二维状态表dp[i]…

ABAP,PDF,ADS,FORM,PRINT

ABAP怎么直接打印PDF文件? https://faskomyabap.blogspot.com/2017/10/how-to-print-pdf-file-content-from-abap.html 里面的程序可以直接将本地文件打印出来,读一下过程,这个程序是把本地PDF文件使用upload函数到ABAP中,先是二进制,然后转成XSTRING,然后使用 连招 ADS…

C++Cherno 学习笔记day17 [66]-[70] 类型双关、联合体、虚析构函数、类型转换、条件与操作断点

b站Cherno的课[66]-[70] 一、C的类型双关二、C的union&#xff08;联合体、共用体&#xff09;三、C的虚析构函数四、C的类型转换五、条件与操作断点——VisualStudio小技巧 一、C的类型双关 作用&#xff1a;在C中绕过类型系统 C是强类型语言 有一个类型系统&#xff0c;不…