Web3 solidity订单池操作

news2024/12/22 23:05:58

前面一篇文章因为一些原因 被设为了进自己可见 需要的朋友可以私信我
在这里插入图片描述
之前 我们编写的程序上来看 交易所无非是一个代币的托管上 只是它会更加专业
本文 我们继续来看交易所的一个功能 叫游泳池

例如 我们 100grToken 兑换 1ETH
前提 我们的代币已经能被估值了
例如 你想用人民币对美元 中间他们之间的汇率是要规定好的
但我们这里 本身就是一个模拟环境
我们直接去操作也不太合理
所以 我们这里直接开发一个游泳池功能 或者叫订单池

我们可以自己去创建订单 例如 小明发布一个 你们谁愿意用 100grToken 换 1 ETH啊
我们未完成的订单就会在我们游泳池中 如果有人觉得合适 点了这个确定 后台就会操作 将他和发布这个订单的人相应的数据扣除 完成这个订单
但也可能 某某发布了 但因为汇率变化 觉得之前发的这个不太合适了 也可以取消

这里 我们需要创建三个函数
makeOrder 创建订单
cancelOrder 取消订单
fillorder 填充订单

还是标准流程 启动我们的ganache环境
在这里插入图片描述
然后 我们这边还有个问题 我们不能很好的查到用户的 token数量
那么 我们需要在Exchange.sol中 加一个balanceof 函数 我们指定查询tokens 下 对应地址 下对应用户的值
返回一个uint256数字类型的值
然后 设置了 public函数作用域是公共的 view设置他只是读取我们区块链上的信息
在这里插入图片描述
然后 我们任何订单 都需要包含以下几个信息
id 这是数据结构最基本的东西 要有id才能标记和删除订单
创建订单的用户 因为 肯定在界面展示时也需要进行权限判断 要是当前用户 才能对订单进行删除和管理
再就是 用什么 代币 去 兑换另一种代币
时间 存储订单的创建时间

这些成员必须是要有的
我们要梳理正思想 我们没有服务器 没有数据库 所以 你生命在链上的数据结构 它就是数据存储
然后 我们在交易所 Exchange.sol 合约中声明一个这样的订单结构体

 //订单结构体
 struct _Order{
     uint256 id;
     address user;
     
     address tokenGet;
     uint256 amountGet;

     address tokenGive;
     uint256 amountGive;

     uint256 timestamp;
 }

这里 我们 的数据结构 就和上面的 对应上了 两种token的数量和地址 id 用户地址 时间搓
在这里插入图片描述
但是 这种形式 显然只支持我们创建一个订单
如果要创建多个 这种方法肯定要加码

比较简答的方式 自然就是用一个_Order类型的数组

_Order[] orderlist;

但这里 为了方便通过id查询 我选择直接

mapping(uint256=> _Order) public orders;

定义一个mapping对象属性 然后 键是一个uint256数字类型 对应订单id 然后 值 是一个_Order对象
在这里插入图片描述
学过js的朋友应该都会明白二者之前的差异
数组的是这样

[1,2,3]

而我们现在用的对象形式的是这样的

{
    0: 1,
    1: 2,
    2: 3
}

但无非 我们对象的键 我们用的是订单的id
我们就可以通过 对象[订单id] 这种形式去找到他

然后 我们再在下面创建一个

uint256 public orderCount;

数字类型 只是单纯记录一下订单的数量
在这里插入图片描述
然后 我们就可以在下面去写这个
makeOrder了 创建订单
但经过前面几篇 交易所的内容 我想大家也养成了 事件记录的好习惯
那么 这里 创建订单 我们也需要记录
我们定义一个事件

event Order(uint256 id,address user,address tokenGet,uint256 amountGet,address tokenGive,uint256 amountGive,uint256 timestamp);

在这里插入图片描述
然后 我们 编写makeOrder函数

function makeOrder(address _tokenGet,uint256 _amountGet,address _tokenGive,uint256 _amountGive) public {
    orderCount = orderCount.add(1);
    orders[orderCount] = _Order(orderCount,msg.sender,_tokenGet,_amountGet,_tokenGive,_amountGive,block.timestamp);
    emit Order(orderCount,msg.sender,_tokenGet,_amountGet,_tokenGive,_amountGive,block.timestamp);
}

然后 我们这个参数 接受 两种代币的 地址和 数量 然后 我们获取orderCount 将他加一 例如 我们第一次进来 他是0 我们将他加1 这样 他就是1 然后 我们将当前订单复制 id就是orderCount
第二次进来 orderCount 是 1 加一 就成了2
然后 我们用户还是通过msg.sender去拿 谁调用的拿谁
通过block.timestamp 获取当前时间的时间搓

将数据添加完之后 调用我们刚刚写的Order 记录一下订单信息
好 这里 我们其实还不具备测试的条件 为了保证我们代码没问题 我们在终端执行

truffle compile

在这里插入图片描述
好啊 没什么语法问题 至于测试 等我将所有订单操作都完成了 我们在做更多操作了

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

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

相关文章

生物笔记——暑期学习笔记(四)

生物笔记——暑期学习笔记(四) 文章目录 前言一、R篇1. unname()2. duplicated()3. 数据提取4. 分组 二、生信篇1. 文本处理常用命令2. 命令输出1. 重定向2. 多命令执行 3. 文本工具4. 本地hmm鉴定1. hmmer软件安装2. 文件准备3. 基于hmm的鉴定 总结 前言…

嵌入式系统中如何选择RTC电池?

RTC(Real Time Clock)是一种用于提供系统时间的独立定时器,它可以在系统断电或低功耗模式下继续运行,只需要一个后备电池作为供电源。在嵌入式系统中,选择合适的RTC电池时非常关键的,它会影响系统时间的准确…

数字化格局下的引领者:百望云通过强制性国家标准GB18030-2022最高级别认证

8月1日,强制性国家标准GB 18030-2022《信息技术 中文编码字符集》实施。8月15日,百望云“绿页阅读器”正式通过中国电子技术标准化研究院强制性国家标准GB18030-2022《信息技术 中文编码字符集》最高级(实现级别3)认证,彰显了百望云在数字化信息处理领域对标国家标准的卓越技术…

元数据治理平台—Datahub安装配置

元数据治理平台—Datahub安装配置 1.安装docker,docker-compose,jq 1.1安装docker 安装docker yum -y install docker 查看版本 docker -v通过下面的命令可以启停docker systemctl start docker // 启动docker systemctl stop docker // 关闭docker1…

安卓的代码加固和其他安全问题

文章目录 安卓加固apk文件结构dex加固过程 其它安全问题 安卓加固 从App的加固技术来看:主流分为dex加密和so加密,目前来看保护dex文件更为重要,因为dex反编译后的java代码可读性更强。 android-ndk: Native Development Kit 官网解释:这套工具使您能在 Android 应…

算法通关村第十关 | 快速排序

1.快速排序的基本过程 快速排序是分治法运用到排序问题的典型例子,基本思想是:通过一个标记pivot元素将n个元素的序列划分为左右两个子序列left和right,其中left中的元素都比pivot小,right的都比pivot的大,然后再次对l…

springboot引入校验注解

引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>jakarta.validation</groupId><artifactId>jak…

Android音视频剪辑器自定义View实战!

Android音视频剪辑器自定义View实战&#xff01; - 掘金 /*** Created by zhouxuming on 2023/3/30** descr 音视频剪辑器*/ public class AudioViewEditor extends View {//进度文本显示格式-数字格式public static final int HINT_FORMAT_NUMBER 0;//进度文本显示格式-时间…

Nginx 解决api跨域问题

环境: nginx 1.22.1 宝塔8.0 php lavarel 在nginx里加入下面的设置 #这里填*就是任何域名都允许跨域add_header Access-Control-Allow-Origin "*";#CORS请求默认不发送Cookie和HTTP认证信息。但是如果要把Cookie发到服务器&#xff0c;要服务器同意&#xff0c…

web连接桌面打开gptmap

一&#xff1a;环境配置 需要的材料&#xff1a; python-3.10.4 我使用的是这个版本的&#xff0c;3.8.10 该版本和以下版本组件组合&#xff0c;验证过能正常运行&#xff08;python 3.6.8测试异常&#xff09; websockify 该项目有python版本和node js版本 noVNC 形式的app…

管理类联考——逻辑——真题篇——按知识分类——汇总篇——一、形式逻辑——性质——第二节——并非命题

真题&#xff08;2012—52&#xff09;—性质—并非之后&#xff0c;所有有的互相变&#xff0c;必然可能互相变&#xff0c;肯定否定互相变。 52.近期流感肆虐&#xff0c;一般流感患者可采用抗病毒药物治疗&#xff0c;虽然并不是所有流感患者均需接受达菲等抗病毒药物的治疗…

excel之数学函数、excel中的通配符

学习excel前需要明确的是事&#xff1a;   在学习excel函数之前&#xff0c;大家需要明确一件事&#xff0c;excel现在设计到了一些新函数&#xff0c;这些新函数只能存在于office365、office2019及更 新版本之中&#xff0c;所以建议大家在学习时安装较新的版本&#xff0c;…

OLED透明屏采购指南:如何选择高质量产品?

着科技的不断进步&#xff0c;OLED透明屏作为一种创新的显示技术&#xff0c;在各个行业中得到了广泛应用。 在进行OLED透明屏采购时&#xff0c;选择高质量的产品至关重要。在这篇文章中&#xff0c;尼伽将为您提供一个全面的OLED透明屏采购指南&#xff0c;帮助您了解关键步…

区间预测 | MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测

区间预测 | MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测。基于分位…

详细整合Spring+SpringMVC+MyBatis+logback(SSM)项目

整体目录结构 表结构 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.a…

Java中List排序的4种方法

开发过程中经常会遇到读取文件内容的情况&#xff0c;需要判断文件是否为文本文件&#xff0c;及文件编码格式&#xff0c;防止无法读取内容或乱码出现情况。 我们可以通过 java.io.File 类包找出文件是目录还是常规文件。java.io.File 类包含两种方法&#xff0c;它们分别是&…

[机器学习]特征工程:主成分分析

目录 主成分分析 1、简介 2、帮助理解 3、API调用 4、案例 本文介绍主成分分析的概述以及python如何实现算法&#xff0c;后续会再出一篇关于主成分分析算法原理讲解的文章&#xff0c;敬请期待&#xff01; 感谢大家支持&#xff01;您的一键三连&#xff0c;就是我创作的…

深入解析 Axios Blob 的使用方法及技巧

在 Web 开发中&#xff0c;处理文件传输是一个常见的需求。Blob&#xff08;二进制对象&#xff09;是一种表示二进制数据的方式&#xff0c;常用于处理文件和多媒体数据。本文将介绍如何使用 Axios 和 Blob 来处理文件传输。 Axios Blob 概念 在开始之前&#xff0c;让我们先…

智慧水利利用4G物联网技术实现远程监测、控制、管理

智慧水利工业路由器是集合数据采集、实时监控、远程管理的4G物联网通讯设备&#xff0c;能够让传统水利系统实现智能化的实时监控和远程管理。工业路由器利用4G无线网络技术&#xff0c;能够实时传输数据和终端信息&#xff0c;为水利系统的运维提供有效的支持。 智慧水利系统是…

stm32_ADC电源、通道、工作模式

0、ADC功能框图 1、ADC的电源 1.1、工作电源 VSSAVSS&#xff0c;VDDAVDD&#xff0c;简单来说&#xff0c;通常stm32是3.3V&#xff0c;ADC的工作电源也是3.3V&#xff1b; 1.2、参考电压 VREF和VREF-并不一定引出&#xff0c;取决于封装&#xff0c;如果没有引出则VREF连接到…