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://xiahunao.cn/news/3247555.html

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

相关文章

SCI一区级 | Matlab实现SSA-CNN-GRU-Multihead-Attention多变量时间序列预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实现SSA-CNN-GRU-Multihead-Attention麻雀算法优化卷积门控循环单元融合多头注意力机制多变量时间序列预测,要求Matlab2023版以上; 2.输入多个特征,输出单个…

数据结构之细说链表

1.1顺序表的问题以及思考 经过上一篇顺序表的学习,我们知道顺序表还是有很多缺点 顺序表的缺点: 1.中间/头部的插入删除,实际复杂度为O(N) 2.增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗 3.扩容一般…

R语言包AMORE安装报错问题以及RStudio与Rtools环境配置

在使用R语言进行AMORE安装时会遇到报错,这时候需要采用解决办法: AMORE包安装,需要离线官网下载安装包: Index of /src/contrib/Archive/AMORE (r-project.org)https://cran.r-project.org/src/contrib/Archive/AMORE/ 一、出现…

AI绘画入门实践|Midjourney 的模型版本

模型分类 Midjourney 的模型主要分为2大类: 默认模型:目前包括:V1, V2, V3, V4, V5.0, V5.1, V5.2, V6 NIJI模型:目前包括:NIJI V4, NIJI V5, NIJI V6 模型切换 你在服务器输入框中输入 /settings: 回车后…

DETR算法解读——Transformer在目标检测任务的首次应用

论文:End-to-End Object Detection with Transformers 作者:Nicolas Carion, Francisco Massa, Gabriel Synnaeve, Nicolas Usunier, Alexander Kirillov, Sergey Zagoruyko 机构:Facebook AI 链接:https://arxiv.org/abs/2005.12…

【STL详解 —— map和set的使用】

STL详解 —— map和set的使用 关联式容器键值对setset的介绍set的使用set的模板参数列表set的构造set的迭代器set的容量set的修改操作 mapmap的介绍map的使用map的模板参数列表map的构造map的迭代器map的容量与元素访问map中元素的修改 multisetmultimap 关联式容器 在初阶阶段…

Camera Raw:首选项

Camera Raw 首选项 Preferences提供了丰富的配置选项,通过合理设置,可以显著提升图像处理的效率和效果。根据个人需求调整这些选项,有助于创建理想的工作环境和输出质量。 ◆ ◆ ◆ 打开 Camera Raw 首选项 方法一:在 Adobe Bri…

纯硬件一键开关机电路的工作原理

这是一个一键开关机电路: 当按一下按键然后松开,MOS管导通,VOUT等于电源电压; 当再次按一下按键然后松开,MOS管关闭,VOUT等于0; 下面来分析一下这个电路的工作原理。上电后,输入电压通过R1和R2给电容充电,最…

微软GraphRAG +本地模型+Gradio 简单测试笔记

安装 pip install graphragmkdir -p ./ragtest/input#将文档拷贝至 ./ragtest/input/ 下python -m graphrag.index --init --root ./ragtest修改settings.yaml encoding_model: cl100k_base skip_workflows: [] llm:api_key: ${GRAPHRAG_API_KEY}type: openai_chat # or azu…

项目管理进阶之RACI矩阵

前言 项目管理进阶系列续新篇。 RACI?这个是什么矩阵,有什么用途? 在项目管理过程中,如Team规模超5以上时,则有必要采用科学的管理方式,满足工作需要。否则可能事倍功半。 Q:什么是RACI矩阵 …

分享 .NET EF6 查询并返回树形结构数据的 2 个思路和具体实现方法

前言 树形结构是一种很常见的数据结构,类似于现实生活中的树的结构,具有根节点、父子关系和层级结构。 所谓根节点,就是整个树的起始节点。 节点则是树中的元素,每个节点可以有零个或多个子节点,节点按照层级排列&a…

STM32 IAP 需要关注的一些事

1、首先要知道STM32的程序是如何分布在FLASH中的。 2、升级的时候涉及到两个程序,一个是bootloader,一个是user程序,这两个程序的功能分别的什么作用的? 3、编译的固件是怎么分布的?通过那个配置文件去指导编译器去排布…

内网对抗-隧道技术篇防火墙组策略ICMPDNSSMB协议出网判断C2上线解决方案

知识点: 1、隧道技术篇-网络层-ICMP协议-判断&封装&建立&穿透 2、隧道技术篇-传输层-DNS协议-判断&封装&建立&穿透 3、隧道技术篇-表示层-SMB协议-判断&封装&建立&穿透0、不是有互联网才叫出网 1、C2常见上线采用的协议 2、常…

IDEA 调试 Ja-Netfilter

首先本地需要有两款IDEA 可以是相同版本,也可以是不同版本。反正要有两个,一个用来调试代码,一个启动。 移除原有ja-netfiler 打开你的ja-netfiler的vmoptions目录,修改其中的idea.vmoptions文件。移除最后一行-javaagent ...参…

基于R语言BIOMOD2 及机器学习方法的物种分布模拟

BIOMOD2是一个R软件包,用于构建和评估物种分布模型(SDMs)。它集成了多种统计和机器学习方法,如GLM、GAM、SVM等,允许用户预测和分析物种在不同环境条件下的地理分布。通过这种方式,BIOMOD帮助研究者评估气候…

数据结构(Java):力扣 二叉树面试OJ题(二)【进阶】

目录 💎 1、题一:二叉树的层序遍历 🌟 1.1 思路1(递归求解) 🌟 1.1.1 思路1代码 🔆 1.2 思路2(队列求解) 🔆 1.2.1 思路2代码 💎 2、题二&…

基于Java中的SSM框架实现求职招聘网站系统项目【项目源码】

基于Java中的SSM框架实现线求职招聘网站系统演示 研究方法 本文的研究方法主要有: (1)调查法 调查法就是在系统的构思阶段,设计者对系统的功能和系统的现状有些不了解,需要去实地的去和本系统相关的区域进行调查&am…

制造运营管理系统(MOM系统),企业实现先进制造的关键一步

随着全球制造业的快速发展,企业对于生产效率和成本控制的要求日益增高。在这个背景下,制造运营管理系统(MOM系统)成为了企业提升竞争力的关键工具。盘古信息作为业内领先的智能制造解决方案提供商,其MOM系统更是以其卓…

django学习入门系列之第四点《BootStrap依赖》

文章目录 往期回顾 BootStrap依赖于JavaScript的类库,JQuery下载 下载JQuery,在界面上应用JQuery 在页面上应用BootStrap和avaScript的类库【JQuery是avaScript的类库】 JQuery的官网: jQuery 如果要应用JQuery 则要在body里面导入文件…

华为HCIP Datacom H12-821 卷42

42.填空题 如图所示,MSTP网络中SW1为总根,请将以下交换机与IST域根和主桥配对。 参考答案:主桥1468 既是IST域根又是主桥468 既不是又不是就是25 解析: 主桥1468 既是IST域根又是主桥468 既不是又不是就是25 43.填空题 网络有…