1-2、truffle与webjs亲密接触(truffle智能合约项目实战)

1-2、truffle与webjs亲密接触(truffle智能合约项目实战)

  • 5,web3调用智能合约
  • 6,Ganache

5,web3调用智能合约

在前面已经完成简单的合约编写
在这里插入图片描述

使用web3调用此函数

Web端的代码使用web3进行智能合约的访问

首先在cmd以管理员身份进入项目
Truffle develop(进入开发模式)
在这里插入图片描述

对合约编译部署,再使用web3js进行实例化调用合约

Compile
Deploy

在这里插入图片描述

回到web3中文文档
http://cw.hubwiz.com/card/c/web3.js-1.0/1/2/14/

在这里插入图片描述

其下方有个智能合约模块

进入到部署合约的地方
注意此部署方法和之前的将合约部署到链上是不同的
在这里插入图片描述

之前的deploy是truffle的一个命令

而这个的deploy是web3提供的一个函数
此方法仅仅是合约部署的,部署成功后,可以返回一个合约的示例

想要调用合约的前提就是要new一个合约的对象,在上一个视频remix本身部署合约实例

实际此处的方式用的不多,而比较常见的方式在本文档未做收录

实际也比较简单

首先声明变量(名称无所谓主要存智能合约)
在这里插入图片描述

通过合约的名称有then的回调函数,一旦部署成功,instance就是实例化成功的合约,前提合约已经成功部署到区块链上,可以将其交给变量

在这里插入图片描述

 MathContract.deployed().then(function(instance){myContract=instance})

在这里插入图片描述

 myContract.mulAtoB(3,4)

此时可以通过此调用合约的方法,说明合约已经创建成功实例,并且已经调用了

这是第一种方式,此方式适合智能合约内部进行相互调用

这节课会讲两种方式,都要记住

下一章节都会用到

第二种方式
在这里插入图片描述

这两种方法都是创建合约的实例也就是合约的对象,只有创建了对象,才能调用其函数

上方的ABI接口就是下方的

在这里插入图片描述

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

需要合约的ABI和其地址

这里如果有两个一模一样的合约其部署后的ABI是一样的,但是合约地址时唯一的

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

中括号是可选的,建议加上,后续再加入比较麻烦
在这里插入图片描述
在这里插入图片描述

第一个参数输入ABI

此时复制ABI,将中括号及其内容复制
在这里插入图片描述

注意不能直接复制(有换行),在百度搜索json压缩为一行,将其压缩后作为第一个参数
在这里插入图片描述

[{"constant":true,"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"mulAtoB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"}]

第二个参数是当前以及部署成功的合约地址
在这里插入图片描述

myContract = new web3.eth.Contract([{"constant":true,"inputs":[{"internalType":"uint256","name":"a","type":"uint256"},{"internalType":"uint256","name":"b","type":"uint256"}],"name":"mulAtoB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"}],'0x316b5270F33d597121003449cF7632E8658f08b0')

在这里插入图片描述

实际返回的是json结果
说明智能合约已经创建成功了

如何调用,不能直接调用
在这里插入图片描述

在method方法中找到我们要调用的函数名称如下,
在这里插入图片描述

此时调用如下

 myContract.methods.mulAtoB(3,4).call()

在这里插入图片描述
在这里插入图片描述

使用call()说明此方法为只读方法,此函数的执行不会影响到合约的写的操作,不会更改合约的状态
但是send()方法以后会修改合约的状态
在这里插入图片描述

完整的调用方式

两种使用web3js调用合约的方法已经讲完
而第二种方式更为常见,因为合约地址是唯一的,也适合项目外的合约的调用,如另外的账户想给此合约转账,就需要用到此合约的地址

搞定此后

在整个项目中有truffle-config,js文件
此文件
在这里插入图片描述

此文件的配置相当重要

Truffle默认关联的本地端口和ip
‘http://127.0.0.1:9545/’

当我们合约要部署到公有链时,就要配置指定的端口和id

在这里插入图片描述

想要将编码设置Wie0.6版本,但设置报错,可以配置完成
在这里插入图片描述

trufflesuite.com/docs/advanced/configuration

官方给了网站可以通过此查看一些相关的配置

在这里插入图片描述

指定truffle默认私有链端口和ip

Truffle的缺陷都是使用命令操作,下一讲为界面方式,而truffle需要链接到界面的区块链
需要更改端口ip

修改配置

在这里插入图片描述
在这里插入图片描述

测试一下将版本改一下
在这里插入图片描述

退出开发模式,打开发现端口没有变,

在这里插入图片描述

但重新的部署可以重新编译部署

Deploy --reset

编译成功

奇怪配置文件应该加载成功了,但端口号并没有改变
这里端口改变了为什么没有加载成功

这里是个bug,发现truffle进来的是develop
在这里插入图片描述

故需要

在这里插入图片描述
在这里插入图片描述

此时成功了端口改变了

下一节进行区块可视化等

6,Ganache

在上节课对智能合约进行了调用操作,但此方法有缺点,后续查看信息需要web3提供的命令,命令容易忘记

在快速入门truffle

使用

需要链接以太坊网络
https://learnblockchain.cn/docs/truffle/quickstart.html

Truffle提供测试区块链即开发者模式,是本地系统不会和以太坊
在这里插入图片描述

可以通过ganache,桌面应用同样会创建一个个人区块链

所有信息界面
在这里插入图片描述

下载对应的电脑系统版本

在这里插入图片描述

Quickstart快速创建一个私有链

在这里插入图片描述

区块信息,通过此软件我们也可以部署合约

一般不会这么做,通过truffle链接此,作为显示的终端来的

在这里插入图片描述

Truffle端口为7545
要记住networkid5777 及端口

更改上节课的truffle项目的配置端口号为7545,而network_id设置为“*”也行,设置为5777也是可以的,这里不涉及版本就不用调了
在这里插入图片描述

truffle develop

在这里插入图片描述

进行转账,使用ganache提供的账户而不是控制台中的
在这里插入图片描述

truffle(develop)> web3.currentProvider

在这里插入图片描述

前面已经执行的端口是7545,而web3是内置truffle中的,所以其链接的网络也是7545

实现账户转账,对ganache中的两个账户

web3.eth.sendTransaction({from:'0xC356655708A4Af3374A9240f803B584cbCa54D6c',to:'0x5637bE68d44aE6E2c83D9f92b7E8211f846ce076',value:web3.utils.toWei('10','ether')})

在这里插入图片描述

查看如下

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这里有新的区块,区块中有一笔交易,交易后面7919结尾的是交易的hash

在这里插入图片描述

想将前面的合约部署到ganache提供的私有链如何做

控制台本身链接到了7545直接deploy --reset
在这里插入图片描述

这里有两个合约
在这里插入图片描述

有很多交易信息
在这里插入图片描述

区块也多了4个

这些交易信息也部署到了区块中,真实场景可能交易部署到一个区块上

要根据合约的地址查看
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

有些区块的交易是没有的,看到有两笔交易,实际不止两笔交易,合约在部署时要调用合约的构造方法,若没有默认有构造方法,构造方法的调用也会产生交易
在这里插入图片描述
在这里插入图片描述

转账合约部署等都可以在ganache展示,基本的truffle,web3调用就完成了

下节讲基于web开发的智能合约,开发调试部署整个流程

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

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

相关文章

使用9种方法隐藏和显示元素

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>使用9种方法隐藏和显示元素</title><sty…

火影评论词云图

背景介绍 词云图(Word cloud)又称文字云,是一种文本数据的图片视觉表达方式,一般是由词汇组成类似云的图形,用于展示大量文本数据。 我收集了豆瓣网站上火影博人传下方的网友评论&#xff0c;以评论为数据基础制作了词云图。 准备工作 安装两个模块&#xff1a;词云模块和结…

verilog行为建模(四):过程赋值

目录 1.两类过程赋值2.阻塞与非阻塞赋值语句行为差别举例13.阻塞与非阻塞赋值语句行为差别举例24.阻塞与非阻塞赋值语句行为差别举例35.举例4&#xff1a;非阻塞赋值语句中延时在左边和右边的差别 微信公众号获取更多FPGA相关源码&#xff1a; 1.两类过程赋值 阻塞过程赋值执…

HTML零基础自学笔记(上)-7.18

HTML零基础自学笔记&#xff08;上&#xff09; 参考&#xff1a;pink老师一、HTML, Javascript, CSS的关系是什么?二、什么是HTML?1、网页&#xff0c;网站的概念2、THML的基本概念3、THML的骨架标签/基本结构标签 三、HTML标签1、THML标签介绍2、常用标签图像标签&#xff…

网易易盾图标点选验证码识别代码

简介 网易图标点选一直都是一个大难题&#xff0c;如上图所示。难点之一是图标变幻莫测&#xff0c;很难刷出有重复的图标&#xff0c;所以使用传统等等方式去标注、识别具有较大的难度。 经过我们大量的数据标注&#xff0c;终于完成了这款验证码的识别。 目前我们提供两种识…

Shell程序设计

各位看官&#xff0c;从今天开始&#xff0c;我们进入新的专栏Shell学习&#xff0c;Shell 是操作系统的命令行界面&#xff0c;它允许用户通过输入命令与操作系统交互。常见的 Shell 有 Bash 和 Zsh&#xff0c;它们可以执行用户输入的命令或运行脚本文件。Shell 广泛应用于系…

昇思25天学习打卡营第5天 | 数据集

在探索MindSpore深度学习框架中的数据集处理过程&#xff0c;我对其数据加载和处理流程有了深入的了解。MindSpore提供了一套功能强大的工具&#xff0c;可以有效地处理和转换数据&#xff0c;确保了数据预处理的效率和质量。以下是我从本次学习中得到的几点主要心得&#xff1…

[算法题]重排字符串

题目链接: 重排字符串 首先找出出现次数最多的字符和其出现次数, 如果该字符的出现次数大于 (字符串的长度 1) / 2, 那么该字符串必然不能重排, 如果该字符的出现次数小于等于 (字符串的长度 1) / 2, 是可以重排的, 重排方式如下图所示: 先以间隔的方式将出现次数最多的字符…

MRD、BRD、PRD

MRD、BRD、PRD是产品开发过程中不同的文档类型&#xff0c;‌它们各自具有特定的目的和内容&#xff0c;‌以支持产品从概念到实现的各个阶段。‌ MRD&#xff08;‌Market Requirement Document&#xff09;‌&#xff0c;‌即市场需求文档&#xff0c;‌侧重于市场和用户需求…

宇航人今年部分瓶装饮料铅浓度超标,采购成本连年大增

《港湾商业观察》廖紫雯 日前&#xff0c;内蒙古宇航人沙产业股份有限公司&#xff08;以下简称&#xff1a;宇航人&#xff09;递表港交所&#xff0c;保荐机构为中银国际&#xff0c;宇航人国内运营主体为内蒙古宇航人高技术产业有限责任公司、内蒙古宇航人沙产业股份有限公…

【SASS/SCSS(三)】样式的复用与动态计算(@mixin和@function)

目录 一、mixin 1、定义复用的样式代码&#xff0c;接受传参&#xff0c;搭配include使用。 位置传参 关键词传参 ...语法糖接受传入的任意参数 2、在mixin中使用content&#xff0c;获取外部对mixin的追加内容 二、function 三、字符串——值得注意的点 很多时候&#…

Python酷库之旅-第三方库Pandas(037)

目录 一、用法精讲 116、pandas.Series.div方法 116-1、语法 116-2、参数 116-3、功能 116-4、返回值 116-5、说明 116-6、用法 116-6-1、数据准备 116-6-2、代码示例 116-6-3、结果输出 117、pandas.Series.truediv方法 117-1、语法 117-2、参数 117-3、功能 …

【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理

初阶数据结构相关知识点可以通过点击以下链接进行学习一起加油&#xff01;时间与空间复杂度的深度剖析深入解析顺序表:探索底层逻辑深入解析单链表:探索底层逻辑深入解析带头双向循环链表:探索底层逻辑深入解析栈:探索底层逻辑深入解析队列:探索底层逻辑深入解析循环队列:探索…

原来隐藏一个DOM元素可以有这么多种方式,最后一种你肯定不知道

我们在日常编码的时候&#xff0c;隐藏一个 dom 元素有很多种方式&#xff0c;今天我们来盘点一下隐藏 dom 元素有哪些方式&#xff0c;最后一种&#xff0c;你绝对没有用过。 display: none 作为经常用来隐藏元素的 css 属性&#xff0c;display: none 相信大家并不陌生&…

【常见开源库的二次开发】基于openssl的加密与解密——MD5算法源码解析(五)

一、MD5算法分析 &#xff1a; 1.1 关于MD5 “消息摘要”是指MD5&#xff08;Message Digest Algorithm 5&#xff09;算法。MD5是一种广泛使用的密码散列函数&#xff0c;它可以生成一个128位&#xff08;16字节&#xff09;的散列值。 RFC 1321: MD5由Ronald Rivest在1992…

云计算核心算法(一)

目录 一、Paxos算法&#xff08;一&#xff09;Paxos算法背景知识&#xff08;二&#xff09;Paxos算法详解&#xff08;三&#xff09;Paxos算法举例 云计算的基础技术是集群技术&#xff0c;支撑集群高效协同工作需要一系列资源和任务调度算法&#xff0c;良好的调度算法可以…

【python】Numpy运行报错详细分析:IndexError: too many indices for array

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

创建vue3项目并配置PC端屏幕适配

一、创建vue3项目 1.使用vue cli创建 vue created 项目名2.选择自定义方式创建vue3项目 3.选择项目所需要的依赖项(刚学习vue的同学建议选择安装&#xff08;Linter / Formatter 支持代码风格检查和格式化&#xff09; 对于每一项的功能&#xff0c;做了一个简单的描述&a…

Web开发:一个可拖拽的模态框(HTML、CSS、JavaScript)

目录 一、需求描述 二、实现效果 三、完整代码 四、实现过程 1、HTML 页面结构 2、CSS 元素样式 3、JavaScript动态控制 &#xff08;1&#xff09;获取元素 &#xff08;2&#xff09;显示\隐藏遮罩层与模态框 &#xff08;3&#xff09;实现模态框拖动效果 一、需求…

增长新引擎,构建基于 CDP 的用户运营竞争力

本文将围绕“企业如何通过构建基于 CDP 的用户运营体系提升业务增长”这一核心&#xff0c;详细介绍企业数据化运营现状&#xff0c;拆解用户运营目标&#xff0c;展示神策 CDP 的关键能力以及用户运营策略落地的完整路径。 一、洞察&#xff1a;企业数据化运营面临的挑战 当前…