web3以太坊前端开发,如何调用链上的接口

其实做web3开发,最大的障碍莫过于这帮人说的一些生僻的词。我们之前就是调个接口,人家说你发一笔交易,我们之前传入的一个参数,一个配置变量,人家说你得加一个合约地址。反正就是听娃娃哭的多了,你就差不多知道他是饿了,还是拉了。

目录

1 链上的接口

2 abi又是什么? 


1 链上的接口

做链的同事,把代码写好以后,部署到链上的服务器,他们也许会说自己的服务部署好了,也许会说自己的应用部署上去了,也许会说自己的合约弄上去了,反正都差不多。这个时候,他们会给你文档,告诉你哪一步该调用哪个方法。

这就好像,我们做java前后端交互的时候,人家说,你调这个接口,传这些参数。而headers请求头里的东西是我们最初就该做的代码准备。而与链交互的时候,一些合约地址,web3服务端交互地址,这些也是我们该准备好的。前面的章节我们已经说过了。

比如链上有个获取某个详细信息的接口该怎么调用呢?看代码:

const Web3 = require('web3');// 连接到以太坊节点
const web3 = new Web3('http://localhost:8545'); // 这里的地址需要替换成你的以太坊节点地址// 合约地址和ABI
const contractAddress = '0x123456789abcdef'; // 合约地址
const abi = [/* 合约的ABI */]; // 合约的ABI// 创建合约实例
const contract = new web3.eth.Contract(abi, contractAddress);// 调用合约方法
contract.methods.methodName(param1, param2, ...) // 方法名和参数.send({  }) // 发送交易.then((receipt) => {console.log('Transaction receipt:', receipt);}).catch((error) => {console.error('Error:', error);});

上面的send方法里,我置空了,里面有几个参数需要注意:

  1. from:当前钱包用户的钱包地址,这个可以获得到
  2. gas:手续费,这个可以加,也可以不加,真正钱包交互的时候,为了让自己的这个行为快点被旷工处理,可以把手续费自己加高一些,不过这里可以写入一个最低费率
  3. type:‘0x0’ 尝试过,不加大多数时候会报错

2 abi又是什么? 

如果遇到链也不是很懂的但还要做链开发的同事,他们就会问你要abi,你就会问,啥是abi,他就说你就给吧,你就看着他,最后默默无言。

ABI(Application Binary Interface)是一种描述智能合约接口的规范,它定义了合约的方法、参数和返回值的数据类型。在与智能合约进行交互时,ABI告诉你如何与合约进行通信,包括调用合约的方法以及如何解析方法的返回值。

ABI通常以JSON格式表示,它描述了合约中每个方法的名称、参数列表和返回值。通过提供ABI,你可以在客户端(如JavaScript应用程序)中编程地调用合约的方法,而无需了解合约的实现细节。

一个ABI的简单示例可能如下所示:

[{"constant": true,"inputs": [],"name": "getValue","outputs": [{"name": "","type": "uint256"}],"payable": false,"stateMutability": "view","type": "function"},{"constant": false,"inputs": [{"name": "newValue","type": "uint256"}],"name": "setValue","outputs": [],"payable": false,"stateMutability": "nonpayable","type": "function"}
]

其实倒也不用担心,正常情况下,如果业务不太复杂很简单那种,链同事会给你一套abi,写死的,如果业务复杂,可能是多个abi,每种场景用一个。重点是,这个东西就像一个配置参数,他得给你,就是他给你的,你也别想着去哪里要。除非你的业务复杂,有专门的一个接口,你还需要去调用一下,获取一下abi,但翻来覆去,abi是死的,你当前做项目不会变的,上了线也几乎是这个。如果变了,他会再给你。

真正项目的abi会比这个又臭又长的多,几十Kb都有可能。

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

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

相关文章

如果insightface/instantID安装失败怎么办(关于InsightFaceLoader_Zho节点的报错)

可能性有很多,但是今天帮朋友解决问题的时候又收集了一种新的思路。 首先,可以先按照这篇文章里边提到的方法去安装: 【全网最详细】ComfyUI下,Insightface安装指南-聚梦小课堂_insightface如何安装-CSDN博客 其次,…

Java面试题:解释volatile关键字的作用,以及它如何保证内存的可见性

在编程中,特别是在并发编程和多线程环境中,volatile 关键字是一个用于声明变量的特殊关键字,它主要有以下几个作用: 可见性:volatile 保证了在一个线程中对一个变量的修改对于其他线程是可见的。也就是说,当…

消息队列使用常见问题

一、消息丢失的时机? 生产端消息丢失 问题:因为网络异常导致消息发送失败,此时可能会产生消息丢失的情况,重试后可能产生消息重复生产的情况。 解决:超时重试,并在消费端保证幂等性。 消息队列中消息丢失 …

使用IIS部署Vue项目

前提 使用IIS部署Vue项目,后端必须跨域,不要在Vue中用proxy跨域,那个只在dev环境中有用! IIS安装,不用全部打勾,有些他默认就是方块 ■ 选择性安装的,就维持原样就可以。 添加网站配置 右键…

Springboot项目学习之各组件的用法和逻辑结构

1.Controller层(Controller): 也称为前端控制器或请求处理器,它是项目与用户交互的入口。Controller接收HTTP请求,解析请求参数,调用Service层处理业务逻辑,并返回响应给客户端。 Controller通…

告别杂乱桌面,开启纯净视界!DeskCover Pro,Mac用户的桌面神器!

DeskCover Pro for Mac是一款专为macOS设计的桌面图标隐藏软件,其主要功能和特点包括: 桌面图标隐藏:通过单击鼠标或按全局热键,可以快速隐藏桌面上的所有图标,为您提供一个干净整洁的工作环境。窗口聚焦:…

第十四届蓝桥杯大赛软件赛省赛(Python大学A组)

2023年蓝桥杯 省赛真题Python大学A组 试题A:特殊日期 试题B:分糖果 试题C:三国游戏 试题D:平均 试题E:翻转 试题F:子矩阵 试题G:阶乘的和 …

关于2024年东北教育装备展示会(沈阳)参展通知

2024年东北教育装备展示会 邀请函 数字赋能新时代 共创教育新未来 时间:2024年6月28-30日 地点:沈阳国际展览中心(沈阳市苏家屯-会展路9号) 展览面积:30000平方米 参展商数:260家 预计观众&#xff1…

第8篇:创建Nios II工程之读取Switch的值<一>

Q:本期我们再添加一个PIO组件设为输入,创建Nios II工程读取输入值显示在LED上。 A:在前2期创建的控制LED工程的Platform Designer系统基础上再添加一个PIO核,参数设置为18位和单向输入模式,表示DE2-115开发板上的18个…

爬虫Python库BeautifulSoup

一、介绍 BeautifulSoup 是一个用于解析 HTML 和 XML 文档的 Python 库。它可以帮助开发人员快速而方便地从网页中提取所需的数据。 BeautifulSoup 提供了一些方法来遍历树状结构的文档,以及搜索和修改文档。 二、应用步骤 使用 BeautifulSoup,可以通过以下步骤进行爬取网…

做题速度太慢了,面不上

没办法,之前练了一个月的sql。两个月不写,现在差不多忘干净了。工作空窗期,或者休息期不能太久,不然学再多的内容都可能会忘完的。 sql题,腾讯四道sql题,限时45分钟完成。我只做了一道,还没做完…

Linux中的md5应用

md5是一种加密技术,用于校验码比对操作,通过对比md5码的区别可以唯一确定文件身份。 Md5的常用场景包括库的新版本发布,和版本提交,文件的更新等,如果更新了库则通过md5校验码作为身份,可以区别更新前后的不…

uni-app选择图片进行覆盖然后分享或打印

需求&#xff1a;APP上传手机原有的图片&#xff0c;进行覆盖指定的部分&#xff0c;覆盖完成后&#xff0c;唤起原生系统的分享面板&#xff0c;面板上有分享给其他人&#xff0c;还有打印选项 准备一个canvas和button标签 <canvas canvas-id"myCanvas" :style…

vivado刷题笔记46

题目&#xff1a; Design a 1-12 counter with the following inputs and outputs: Reset Synchronous active-high reset that forces the counter to 1 Enable Set high for the counter to run Clk Positive edge-triggered clock input Q[3:0] The output of the counter c…

从零开始的软件测试学习之旅(六)测试网络基础知识

测试网络基础知识 HTTP和HTMLURLDNS客户端和服务器请求方法和状态码面试高频Fiddler抓包工具教学弱网 HTTP和HTML 概念 html: HyperText Markup Language 超文本标记语言 http: HyperText Transfer Protocol 超文本传输协议 超文本: 图片, 音频, 视频 关系:http 可以对 html 的…

ffmpeg音视频裁剪

音视频裁剪&#xff0c;通常会依据时间轴为基准&#xff0c;从某个起始点到终止点的音视频截取出来&#xff0c;当然音视频文件中存在多路流&#xff0c;所对每一组流进行裁剪 基础概念&#xff1a; 编码帧的分类&#xff1a; I帧(Intra coded frames): 关键帧&#xff0c;…

【智能算法】人类进化优化算法(HEOA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;J Lian受到人类进化启发&#xff0c;提出了人类进化优化算法&#xff08;Human Evolutionary Optimization Algorithm, HEOA&#xff09;。 2.算法原理 2.1算法思想 …

算法学习笔记(差分约束系统)

前置&#xff1a;spfa 从例题入手&#xff1a; 【模板】差分约束系统 | StarryCoding 题目描述 给定 n n n未知量和一个大小为 m m m的不等式&#xff08;或等式&#xff09;组&#xff0c;请你判断这个不等式&#xff08;或等式&#xff09;组是否有解。 1 1 1 i i i j …

【Linux 命令操作】如何在 Linux 中使用多行注释呢?

文章目录 1. 给代码进行多行注释2. 给代码取消多行注释 1. 给代码进行多行注释 &#x1f427;① 首先用 vim 打开代码&#xff0c;按 Esc进入命令模式(Normal mode)&#xff1b; &#x1f427;② 然后按住 ctrl v 进入列模式&#xff1b; &#x1f427;③ 再通过按 h(左)、j(…

Yarn:下一代JavaScript包管理器的安装与实战指南

当然&#xff0c;让我们深入探讨Yarn——一个高效、可靠的JavaScript包管理器&#xff0c;它为前端开发带来了新的速度和便利。Yarn由Facebook、Google、Exponent和Tilde公司共同推出&#xff0c;旨在解决npm&#xff08;Node.js包管理器&#xff09;存在的问题&#xff0c;如依…