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

news2024/9/22 19:41:26

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.coloradmin.cn/o/1932767.html

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

相关文章

Burp安全扫描Web应用

一、浏览器设置代理 如下图所示,点击火狐浏览器的“扩展和主题”,搜索“代理”。 如下图所示,选择搜索到的第一个代理(选择任何一个都可以)。 如上图所示,第一个点击后,进入如下页面&#xff0…

ubuntu22.04 配置grpc(优化官方教程)

优化了官方教程,2024.7.17顺利打通。 一:添加环境变量 打开root文件夹下的 .bashrc 文件 编辑文件:滚动到文件的底部,然后添加以下行: export MY_INSTALL_DIR$HOME/.local mkdir -p "$MY_INSTALL_DIR" exp…

web安全之跨站脚本攻击xss

定义: 后果 比如黑客可以通过恶意代码,拿到用户的cookie就可以去登陆了 分类 存储型 攻击者把恶意脚本存储在目标网站的数据库中(没有过滤直接保存),当用户访问这个页面时,恶意脚本会从数据库中被读取并在用户浏览器中执行。比如在那些允许用户评论的…

BiLSTM 实现股票多变量时间序列预测(PyTorch版)

前言 系列专栏:【深度学习:算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域,讨论了各种复杂的深度神经网络思想,如卷积神经网络、循环神经网络、生成对…

首个WebAgent在线评测框架和流程数据管理平台来了,GPT-4、Qwen登顶闭源和开源榜首!

在当今科技迅速发展的时代,大型语言模型(Large Language Model,LLM)正以前所未有的速度改变着我们与数字世界的互动方式。基于LLM的智能代理(LLM Agent),从简单的信息搜索到复杂的网页操作&…

C1W4.Assignment.Naive Machine Translation and LSH

理论课:C1W4.Machine Translation and Document Search 文章目录 1. The word embeddings data for English and French words1.1The dataThe subset of dataLoad two dictionaries 1.2 Generate embedding and transform matricesExercise 1: Translating English…

防溺水预警系统引领水域安全新篇章

一、系统概述 随着人们对水域活动的需求增加,溺水事故频发,给人们的生命安全带来了严重威胁。然而,如今,一项创新科技正在以强大的功能和无限的潜力引领着水域安全的新篇章。智能防溺水预警系统,作为一种集成了智能感知…

CentOS 7 安装MySQL 5.7.30

CentOS 7 安装MySQL卸载(离线安装) 安装配置MySQL之前先查询是否存在,如存在先卸载再安装 rpm -qa|grep -i mysql rpm -qa|grep -i mariadb rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64如下命令找到直接 rm -rf 删除(删除…

定制开发AI智能名片商城微信小程序在私域流量池构建中的应用与策略

摘要 在数字经济蓬勃发展的今天,私域流量已成为企业竞争的新战场。定制开发AI智能名片商城微信小程序,作为私域流量池构建的创新工具,正以其独特的优势助力企业实现用户资源的深度挖掘与高效转化。本文深入探讨了定制开发AI智能名片商城微信…

修改了mybatis的xml中的sql不重启服务器如何动态加载更新

目录 一、背景 二、注意 三、代码 四、使用示例 五、其他参考博客 一、背景 开发一个报表功能,好几百行sql,每次修改完想自测下都要重启服务器,启动一次服务器就要3分钟,重启10次就要半小时,耗不起时间呀。于是在…

获取欧洲时报中国板块前新闻数据-scrapy

这里写目录标题 1.创建项目文件二.爬虫文件编写三.管道存储四.settings文件 1.创建项目文件 创建scrapy项目的命令&#xff1a;scrapy startproject <项目名字> 示例&#xff1a; scrapy startproject myspiderscrapy genspider <爬虫名字> <允许爬取的域名>…

tinymce富文本支持word内容同时粘贴文字图片上传 vue2

效果图 先放文件 文件自取tinymce: tinymce富文本简单配置及word内容粘贴图片上传 封装tinymce 文件自取&#xff1a;tinymce: tinymce富文本简单配置及word内容粘贴图片上传 页面引用组件 <TinymceSimplify refTinymceSimplify v-model"knowledgeBlockItem.content…

vue使用audio 音频实现播放与关闭(可用于收到消息给提示音效)

这次项目中因为对接了即时通讯 IM&#xff0c;有个需求就是收到消息需要有个提示音效&#xff0c;所以这里就想到了用HTML5 提供的Audio 标签&#xff0c;用起来也是很方便&#xff0c;首先让产品给你个提示音效&#xff0c;然后你放在项目中&#xff0c;使用Audio 标签&#x…

HardeningMeter:一款针对二进制文件和系统安全强度的开源工具

关于HardeningMeter HardeningMeter是一款针对二进制文件和系统安全强度的开源工具&#xff0c;该工具基于纯Python开发&#xff0c;经过了开发人员的精心设计&#xff0c;可以帮助广大研究人员全面评估二进制文件和系统的安全强化程度。 功能特性 其强大的功能包括全面检查各…

【BUG】已解决:WslRegisterDistribution failed with error: 0x800701bc

已解决&#xff1a;WslRegisterDistribution failed with error: 0x800701bc 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武…

Ubuntu22.04安装CUDA+CUDNN+Conda+PyTorch

步骤&#xff1a; 1、安装显卡驱动&#xff1b; 2、安装CUDA&#xff1b; 3、安装CUDNN&#xff1b; 4、安装Conda&#xff1b; 5、安装Pytorch。 一、系统和硬件信息 1、Ubuntu 22.04 2、显卡&#xff1a;4060Ti 二、安装显卡驱动 &#xff08;已经安装的可以跳过&a…

通过SchedulingConfigurer 接口完成动态定时任务

通过SchedulingConfigurer 接口完成动态定时任务 一.背景 在Spring中&#xff0c;除了使用Scheduled注解外&#xff0c;还可以通过实现SchedulingConfigurer接口来创建定时任务。它们之间的主要区别在于灵活性和动态性。Scheduled注解适用于固定周期的任务&#xff0c;一旦任…

【STM32 HAL库】I2S的使用

使用CubeIDE实现I2S发数据 1、配置I2S 我们的有效数据是32位的&#xff0c;使用飞利浦格式。 2、配置DMA **这里需要注意&#xff1a;**i2s的DR寄存器是16位的&#xff0c;如果需要发送32位的数据&#xff0c;是需要写两次DR寄存器的&#xff0c;所以DMA的外设数据宽度设置16…

JavaWeb服务器-Tomcat(Tomcat概述、Tomcat的下载、安装与卸载、启动与关闭、常见的问题)

Tomcat概述 Tomcat服务器软件是一个免费的开源的web应用服务器。是Apache软件基金会的一个核心项目。由Apache&#xff0c;Sun和其他一些公司及个人共同开发而成。 由于Tomcat只支持Servlet/JSP少量JavaEE规范&#xff0c;所以是一个开源免费的轻量级Web服务器。 JavaEE规范&…

Vscode中Github copilot插件无法使用(出现感叹号)解决方案

1、击扩展或ctrl shift x ​​​​​​​ 2、搜索查询或翻找到Github compilot 3、点击插件并再左侧点击登录github 点击Sign up for a ... 4、跳转至github登录页&#xff0c;输入令牌完成登陆后返回VScode 5、插件可以正常使用