当前位置: 首页 > news >正文

DAPP开发【09】NFT交易市场开发(hardhat测试)

测试文件下新建market.js文件
在这里插入图片描述

扁平化,将所有依赖放在tmp.sol,可以去给他人使用
npx hardhat flatten > tmp.sol
在这里插入图片描述

测试文件

const {expect} = require('chai');
const {ethers} = require('hardhat');describe('Market',async function(){//定义三个合约,两个账户let usdt,nft,market,accountA,accountB;beforeEach(async () =>{  //hardhat提供两个账户[accountA,accountB] = await ethers.getSigners();//部署三个合约const USDT = await ethers.getContractFactory('cUSDT');usdt = await USDT.deploy();const MyNFT = await ethers.getContractFactory('NFTM');nft = await MyNFT.deploy(accountA.address);const Market = await ethers.getContractFactory('Market');market = await Market.deploy(usdt.target,nft.target);//给账户1挖1usdt的 erc20  部署erc20合约是就给账户A了1e26的erc20//给账户2挖两个nftawait nft.safeMint(accountB.address);await nft.safeMint(accountB.address);await nft.connect(accountB).setApprovalForAll(accountA.address,true);//给market授权花费A的钱(默认连接的就是第一个用户)//await usdt.connect(accountA).approve(market.target,"1e26");await usdt.approve(market.target,"100000000000000000000000000");});//验证erc20变量==usdt的地址it('its erc20 address should be usdt',async function(){expect(await market.erc20()).to.equal(usdt.target);});it('its erc721 address should be MyNft',async function(){expect(await market.erc721()).to.equal(nft.target);});it('accountB should have two nfts',async function(){expect(await nft.balanceOf(accountB.address)).to.equals(2);});it('accountA should have 1e26 usdt',async function(){expect(await usdt.balanceOf(accountA.address)).to.equals("100000000000000000000000000");});it('accountB can list 2 nft to market',async function(){const price = "0x0000000000000000000000000000000000000000000000000001c6bf52634000";//await nft.connect(accountB).safeTransferFrom(accountB.address,market.target,0,price);//报错//TypeError: ambiguous function description (i.e. matches "safeTransferFrom(address,address,uint256)", //"safeTransferFrom(address,address,uint256,bytes)") (argument="key", value="safeTransferFrom", code=INVALID_ARGUMENT, version=6.9.0)//ambiguous 混淆同名函数,即使参数不一样,也分不出来,所以用下面的方法,明确选择器的名字//这里应该是B来调用进行上架,但是默认是a,老师忘记怎么连接了//于是在上面定义  await nft.connect(accountB).setApprovalForAll(accountA.address,true);//b允许a使用它的nftexpect(await nft['safeTransferFrom(address,address,uint256,bytes)'](accountB.address,market.target,0,price)).to.emit(market,"NewOrder");expect(await nft['safeTransferFrom(address,address,uint256,bytes)'](accountB.address,market.target,1,price)).to.emit(market,"NewOrder");expect(await nft.balanceOf(accountB.address)).to.equal(0);expect(await nft.balanceOf(market.target)).to.equal(2);expect(await market.isListed(0)).to.equal(true);expect(await market.isListed(1)).to.equal(true);expect((await market.getAllNFTs())[0][0]).to.equal(accountB.address);expect((await market.getAllNFTs())[0][1]).to.equal(0);expect((await market.getAllNFTs())[0][2]).to.equal(price);expect((await market.getAllNFTs())[1][0]).to.equal(accountB.address);expect((await market.getAllNFTs())[1][1]).to.equal(1);expect((await market.getAllNFTs())[1][2]).to.equal(price);expect(await market.getOrderLength()).to.equal(2);expect((await market.connect(accountB).getMyNFTs())[0][0]).to.equal(accountB.address);expect((await market.connect(accountB).getMyNFTs())[0][1]).to.equal(0);expect((await market.connect(accountB).getMyNFTs())[0][2]).to.equal(price);expect((await market.connect(accountB).getMyNFTs())[1][0]).to.equal(accountB.address);expect((await market.connect(accountB).getMyNFTs())[1][1]).to.equal(1);expect((await market.connect(accountB).getMyNFTs())[1][2]).to.equal(price);});});

相关文章:

DAPP开发【09】NFT交易市场开发(hardhat测试)

测试文件下新建market.js文件 扁平化,将所有依赖放在tmp.sol,可以去给他人使用 npx hardhat flatten > tmp.sol 测试文件 const {expect} require(chai); const {ethers} require(hardhat);describe(Market,async function(){//定义三个合约&a…...

【Spring Boot】如何通过RestTemplate获取另一个服务的接口返回信息

背景 在查询订单信息的时候,需要获取用户的信息,同时订单和用户分属于不同的服务中,并且服务的数据库的数据分开的,其直接连接数据库并操作数据库是不可以的。那我们可以通过RestTemplate对象请求另一个服务的API接口获取相关的响…...

文字识别(OCR)专题——基于NCNN轻量级PaddleOCRv4模型C++推理

前言 PaddleOCR 提供了基于深度学习的文本检测、识别和方向检测等功能。其主要推荐的 PP-OCR 算法在国内外的企业开发者中得到广泛应用。在短短的几年时间里,PP-OCR 的累计 Star 数已经超过了32.2k,常常出现在 GitHub Trending 和 Paperswithcode 的日榜…...

❀My学习Linux命令小记录(14)❀

目录 ❀My学习Linux命令小记录(14)❀ 56.man指令 57.whatis指令 58.info指令 59.--help指令 60.uname指令 ❀My学习Linux命令小记录(14)❀ 56.man指令 功能说明:查看Linux中的指令帮助。 (ps.man命…...

SqlServer存储过程中使用in

第一步:创建测试存储过程: CREATE PROCEDURE [dbo].[test] deptCode varchar(MAX)AS BEGINSELECT * from DEPT_INFO_A where DEPT_CODE in (deptCode)END 此存储过程只是一个简单的查询 第二步测试: 传入的 deptCode为:101200…...

Selenium+Unittest+HTMLTestRunner框架更改为Selenium+Pytest+Allure(二)

1 代码框架 整体项目结构如图: Common:公共库 Logs: 日志目录 Page: 页面元素 Report:测试报告 TestCase:测试用例 TestData: 测试数据 2 单模块运行 直接上代码: # -*- coding…...

Kotlin Lambda使用

Kotlin Lambda使用 fun main() /*: Unit*/ {// Lambda会慢慢的难度升级// Kotlin Unit Java void// TODO 下面全部都是函数声明, 既然是函数声明,就不能调用// 函数的声明 用lambda去描述函数的声明val method1 : () -> Unitval method2 : (Int, In…...

华容道问题求解第一部分_思路即方案设计

一、前言 华容道是一种传统的益智游戏,通常由一个长方形木板和若干个方块组成。其中包括一个或多个不同颜色的方块(也称为车块)和其他大小相同的方块(也称为障碍块)。游戏的目标是将车块从木板的一个端点移动到另一个…...

测试---UI自动化测试介绍

1、什么是自动化测试 概念:由程序代替人工进行系统校验的过程。--------计算机自己执行,好比手机上安装一个软件软件微信,抖音,微博之类的,在应用商城里面,下载对应app后,手机系统程序会自动安…...

DHCP Host Name

文章目录 前言DHCP OptionOption (12) Host Namednsmasq 前言 打开路由器页面,看到下面连接的设备,有的显示设备名称 Tmall-Genie、ESP-C37CE8,而有的直接显示 MAC 地址 D2:B0:XX:XX:XX:XX。 这个名称是哪里来的呢? 这就是我们今…...

uniapp到底用什么ui框架最合适-关于uni-app的ui库、ui框架、ui组件

文章目录 直接看答案关于uni-app的ui库、ui框架、ui组件组件的概念扩展组件的选择uni ui如何使用uni ui 综上,官方对组件的使用建议是:附录:其他全端兼容ui库参考文章: 直接看答案 如果想自己纯手写,直接用内置组件。…...

Flask 最佳实践(二)

Flask是一个轻量级而灵活的Web框架,提供了足够的自由度让开发者根据项目的需求进行定制。然而,为了在大型项目中保持代码的可维护性和可扩展性,建议采用以下一些建议的最佳实践。 在上一篇博客中,讲述了项目结构、蓝图相关的最佳实…...

【MATLAB源码-第93期】基于matlab的白鲸优化算法(BWO)和鲸鱼优化算法(WOA)机器人栅格路径规划对比。

操作环境: MATLAB 2022a 1、算法描述 白鲸优化算法(BWO) 白鲸优化算法是受到白鲸捕食和迁徙行为启发的一种算法。其主要特点和步骤包括: 1. 搜索食物(全局搜索):算法模仿白鲸寻找食物的行为。…...

nodejs微信小程序+python+PHP在线购票系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…...

卷积神经网络训练情感分析

文章目录 1 CNN在自然语言的典型应用2 代码解释3 建议 1 CNN在自然语言的典型应用 卷积的作用在于利用文字的局部特征,一个词的前后几个词必然和这个词本身相关,这组成该词所代表的词群词群进而会对段落文字的意思进行影响,决定这个段落到底…...

github新建项目

参考链接:Github上建立新项目超详细方法过程 在这里新建一个repositories 接下来就选择相关的信息: 然后create a new就行了 接下来需要创建文件:(同时通过upload上传文件) 每次最多上传100个文件,然后保…...

CRC(循环冗余校验)直接计算和查表法

文章目录 CRC概述CRC名词解释宽度 (WIDTH)多项式 (POLY)初始值 (INIT)结果异或值 (XOROUT)输入数据反转(REFIN)输出数据反转(REFOUT) CRC手算过程模二加减&am…...

【算法思考记录】力扣2952. 需要添加的硬币的最小数量【C++,思路挖掘,贪心与证明】

原题链接 文章目录 需要添加的硬币的最小数量:贪心算法实现题目概述示例分析 关键思路分析贪心算法的优化选择证明案例推演与算法实现 C 实现结论 需要添加的硬币的最小数量:贪心算法实现 题目概述 在这个困难难度的算法题中,我们要解决的…...

用友NC JiuQiClientReqDispatch反序列化RCE漏洞复现

0x01 产品简介 用友NC是一款企业级ERP软件。作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计、采购管理、销售管理、物料管理、生产计划和人力资源管理等,帮助企业实现数字化转型和高效管理。 0x02 漏洞概述 用友 NC JiuQiClientReqDispatch 接口存在…...

Linux:docker镜像的创建(5)

1.基于已有镜像创建 步骤: 1.将原始镜像加入容器并运行 2.在原始镜像中部署各种服务 3.退出容器 4.使用下面命令将容器生成新的镜像 现在我们在这个容器里做了一些配置,我们要把他做成自己镜像 docker commit -m "centos7_123" -a "tarr…...

【模块化设计-10】UART1 驱动 + 环形 FIFO 实现高效串口数据收发

在嵌入式开发中,串口(UART)是最常用的通信接口之一,而直接采用中断 缓冲区的方式处理串口数据,能有效避免数据丢失、提升收发效率。本文将基于实际项目代码,详解UART1 驱动与环形 FIFO(ring_fi…...

绝对不要让两根线在同一个交换机上连成一个圈。 为什么 形成一个环就会网络风暴?

为了让你彻底理解“为什么环路会导致风暴”,我们把网络连接看作一个“数字信息的传递游戏”。 1. 关键前提:交换机不懂“记忆” 交换机(特别是普通的傻瓜交换机)在转发广播消息时,它不具备判断“这条消息我刚才是不是发过”的能力。它只认一个逻辑: “只要是从端口A进来…...

表空间(Tablespace)管理

1.1、表空间类型类型用途说明永久表空间存储用户数据SYSTEM, SYSAUX, USERS, 自定义UNDO表空间事务回滚和读一致性自动管理,12c支持多UNDO临时表空间排序、哈希等临时操作TEMP,不产生redo大文件表空间单个数据文件可达128TBBigfile Tablespace加密表空间…...

精准测试:未来已来,只是尚未流行

一、从“全量覆盖”到“精准打击”:测试范式的必然转向 在软件测试领域,有一个根深蒂固的信仰:测试得越全面,质量就越高。这种思维催生了庞大的测试用例库、漫长的回归周期和不断膨胀的测试资源投入。然而,随着系统复…...

不使用void HAL_TIM_Encoder_MspInit(TIM_HandleTypeDef* tim_encoderHandle)增强代码的层级结构注意事项

这是正常用cube Max生成的代码,这里以设置编码器为例。 GPIO初始化函数放在HAL_TIM_Encoder_MspInit这个回调函数中。代码正常运行/* TIM3 init function */ void MX_TIM3_Init(void) {TIM_Encoder_InitTypeDef sConfig {0};TIM_MasterConfigTypeDef sMasterConfig…...

DeepSeek Saga模式性能压测实录(TPS从1.2K飙升至8.6K):异步事件总线+快照版本向量的组合拳揭秘

更多请点击: https://intelliparadigm.com 第一章:DeepSeek Saga模式性能压测实录(TPS从1.2K飙升至8.6K):异步事件总线快照版本向量的组合拳揭秘 在真实生产级负载下,DeepSeek R1模型启用Saga模式后&#…...

深度学习入门实战:从PyTorch环境搭建到CNN模型调优全指南

1. 项目概述:一个面向初学者的深度学习实战指南 如果你刚刚踏入深度学习的大门,面对PyTorch、TensorFlow这些框架,以及各种复杂的模型代码感到无从下手,那么“datawhalechina/leedl-tutorial”这个开源项目,很可能就是…...

WebToEpub:5分钟快速制作专业EPUB电子书的完整指南

WebToEpub:5分钟快速制作专业EPUB电子书的完整指南 【免费下载链接】WebToEpub A simple Chrome (and Firefox) Extension that converts Web Novels (and other web pages) into an EPUB. 项目地址: https://gitcode.com/gh_mirrors/we/WebToEpub 还在为在线…...

2026年3月 电子学会青少年软件编程机器人技术四级等级考试试卷真题【实际操作】

答案和更多内容请查看网站:【试卷中心 ----->电子学会 ---->机器人技术 ----> 四级】 网站链接 青少年软件编程历年真题模拟题实时更新 青少年机器人技术等级考试实际操作试卷(四级) 2026年3月 一、实操试题 主题&#xff1…...

Python小红书数据采集终极指南:xhs工具完整使用教程

Python小红书数据采集终极指南:xhs工具完整使用教程 【免费下载链接】xhs 基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/ 项目地址: https://gitcode.com/gh_mirrors/xh/xhs 小红书作为中国领先的生活方式分享平台,蕴含着丰…...