swp添加池子addLiquidity失败

案发现场

首次添加交易对、一直失败、但是也没提示具体的原因。到这一步就没了、由下图可知、也没看到log、由此可见第一步就失败了。
在这里插入图片描述

解决方案

一、添加 工厂KywFactory

添加如下

    bytes32 public constant INIT_CODE_PAIR_HASH = keccak256(abi.encodePacked(type(KywPair).creationCode));

说明
在智能合约中添加bytes32 public constant INIT_CODE_PAIR_HASH = keccak256(abi.encodePacked(type(KywPair).creationCode));这一行代码的主要作用是存储KywPair合约创建代码的哈希值。这一做法常见于自动化做市商(AMM)类的去中心化交易所(DEX),如Uniswap或类似的项目,目的是为了在计算流动性池(liquidity pool)的地址时使用。

这里详细解释一下:

  1. 创建代码的哈希值keccak256(abi.encodePacked(type(KywPair).creationCode))这一表达式计算的是KywPair合约创建时的完整字节码的哈希值。在Solidity中,type(KywPair).creationCode直接引用了KywPair合约的创建字节码。

  2. 确定性地址生成:在自动化做市协议中,流动性池的地址通常是根据特定的算法确定性生成的,这个算法通常会利用到创建代码的哈希值。通过这种方式,只要给定相同的工厂合约地址、代币A和代币B的地址,就可以始终生成相同的流动性池地址。这确保了对于每一对代币,只存在一个流动性池。

  3. 防止重入和攻击:使用哈希值作为计算的一部分,有助于防止恶意行为者通过不同的创建代码来创建看似相同的流动性池,从而绕过系统的设计意图或实施攻击。

  4. 提高效率和安全性:存储创建代码的哈希值而不是完整的代码,可以提高计算效率,同时确保在生成流动性池地址时的透明度和不可篡改性。

  5. 简化地址计算:在需要计算流动性池地址的场景中,可以直接使用这个预先计算好的哈希值,而不需要重新生成或查找创建代码,从而简化了计算过程并减少了计算成本。

总的来说,INIT_CODE_PAIR_HASH常量在去中心化金融(DeFi)项目中起到关键的作用,它帮助确保了流动性池地址的一致性和安全性,同时优化了计算效率。

二、路由KywLibrary更新

// calculates the CREATE2 address for a pair without making any external callsfunction pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {(address token0, address token1) = sortTokens(tokenA, tokenB);pair = address(uint(keccak256(abi.encodePacked(hex'ff',factory,keccak256(abi.encodePacked(token0, token1)),hex'c21238f28fb49774a7b7d0671f8c4e909b72b25023105d7e07ea2507b6fa3974' // init code hash))));

把INIT_CODE_PAIR_HASH 替换这个

在这里插入图片描述
在Swap的智能合约中,pairFor函数用于根据给定的工厂合约地址和两个代币地址生成流动性对(liquidity pair)的地址。这个生成的地址是固定的,只要输入的参数相同,每次调用都会得到同一个结果。这种方法确保了每次创建流动性对时,如果已经存在一个具有相同代币组合的流动性对,就不会重复创建。

hex'c21238f28fb49774a7b7d0671f8c4e909b72b25023105d7e07ea2507b6fa3974'这个十六进制字符串代表了流动性对合约的初始化代码的哈希值。在PancakeSwap的上下文中,这通常是PancakePair合约的创建代码的Keccak256哈希值。

这个哈希值在计算流动性对地址的过程中扮演着重要角色,因为它帮助确保了生成的地址与特定的工厂合约、代币组合以及初始化代码相对应。具体来说,它的作用是:

  1. 确保唯一性:由于哈希函数的性质,即使微小的变化也会导致完全不同的哈希值。因此,不同的代币组合和初始化代码将产生不同的流动性对地址,即使工厂合约地址相同。

  2. 确定性地址生成:使用哈希函数和固定的输入参数,可以计算出一个确定性的流动性对地址。这对于避免重复创建同样的流动性对非常关键。

  3. 安全性:哈希函数的使用增加了攻击者预测或操纵流动性对地址的难度,从而提高了系统的安全性。

  4. 初始化代码的绑定:将初始化代码的哈希值作为输入之一,确保了生成的流动性对地址与特定的初始化代码紧密绑定,这样就不可能用一个不同的初始化代码来创建一个看似相同的流动性对。

因此,hex'c21238f28fb49774a7b7d0671f8c4e909b72b25023105d7e07ea2507b6fa3974'的存在是为了确保流动性对地址的生成既具有确定性又具有安全性,同时与特定的初始化代码相绑定。在实际的代码中,这个哈希值应当是PancakePair合约创建代码的准确哈希值,用于生成流动性对地址。

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

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

相关文章

土耳其-加拉太塔

加拉太塔(Galata Tower)是位于土耳其-伊斯坦布尔的一个著名地标,它提供了城市的壮丽全景。如果有计划前往这座塔楼打卡的话,可以先了解下这座历史悠久的塔楼,让自己感兴趣,才能体会到它的独特之处&#xff…

Web渗透-XSS漏洞深入及xss-labs靶场实战

一、简介 xss全称(cross site scripting)跨站脚本攻击,是最常见的web应用程序安全漏洞之一,位于owasptop102013年度第三名xss是指攻击者在网页中嵌入客户端脚本,通常是javascrip编写的危险代码,当用户使用浏览网页时&…

excel数据透视

Excel中,数据透视图(PivotChart)和数据透视表(PivotTable)是两个紧密相关的工具,用于分析数据。数据透视表是数据透视图的数据源,也就是说,数据透视图是基于数据透视表中的数据创建的…

周末设计高端企业_集团官网主题Discuz模板

风格名称: 周末设计_高端企业_集团官网 适用版本: Discuz! X3.0、X3.1、X3.2、X3.3、F1.0 风格编码: 使用语言包结构,适合全部编码 周末设计高端企业_集团官网主题Discuz模板

防止多次点击,vue的按钮上做简易的防抖节流处理

话不多说,上个视频,看看是不是你要的效果 防抖节流 1.创建一个directive.js // directive.js export default {install(Vue) {// 防重复点击(指令实现)Vue.directive(repeatClick, {inserted(el, binding) {el.addEventListener(click, () > {if (!el.disabled) {el.disabl…

我对ChatGPT-5的期待

在科技飞速发展的今天,人工智能(AI)已经成为我们生活中不可或缺的一部分。尤其是近年来,随着ChatGPT等先进AI模型的推出,我们见证了AI技术在智能水平上的巨大飞跃。作为这一领域的最新成果,GPT-5的即将发布…

电脑开机后出现Aptio Setup Utility 处理方法

电脑开机后出现Aptio Setup Utility怎么处理 Aptio Setup Utility界面的原因: 这是由于 bios设置与真实的硬件情况不匹配硬盘故障找不到可启动的硬盘情况 我的问题是找不到可启动的硬盘情况 解决方式如下: 进入如下界面了,选择Boot选项…

yolov10--C#接口

一、前言 本章主要讲解yolov10的C#接口,主要是使用微软开发的openvinocsharp工具加载yolov10模型,并做推理。 二、yolov10模型转换 这里为了演示,使用官方yolov10m模型(其他大小的模型同理)做演示,可从下方…

动态规划数字三角形模型——AcWing 275. 传纸条

动态规划数字三角形模型 定义 动态规划数字三角形模型是在一个三角形的数阵中,通过一定规则找到从顶部到底部的最优路径或最优值。 运用情况 通常用于解决具有递推关系、需要在不同路径中做出选择以达到最优结果的问题。比如计算最短路径、最大和等。 计算其他…

服务器数据恢复—NTFS文件系统下双循环riad5数据恢复案例

服务器存储数据恢复环境: EMC CX4-480存储,该存储中有10块硬盘,其中有3块磁盘为掉线磁盘,另外7块磁盘组成一组RAID5磁盘阵列。运维人员在处理掉线磁盘时只添加新的硬盘做rebuild,并没有将掉线的硬盘拔掉,所…

重点!业内分享:如何找到自己门店的生鲜经营定位

说到经营生鲜品类 许多商超人士或许都会面临这样一个困境 即品类繁多且复杂,那么如何做到精准施策? 比如说,蔬菜和水果虽都归为生鲜,然而细分起来,价格和消费群体均存在差异。像蔬菜,价格通常较低&#…

docker入门配置

1、创建配置镜像 由于国内docker连接外网速度慢,采用代理 vi /etc/docker/daemon.json添加以下内容 {"registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com","https://dockerproxy.com","https://hub-mirror.c.163.co…

Python开发日记--手撸加解密小工具(2)

目录 1. UI设计和代码生成 2.运行代码查看效果 3.小结 1. UI设计和代码生成 昨天讨论到每一类算法设计为一个Tab,利用的是TabWidget,那么接下来就要在每个Tab里设计算法必要的参数了,这里我们会用到组件有Label、PushButton、TextEdit、Ra…

第4讲:pixi.js绘制舞台、随窗口大小而改变画布大小和舞台位置

基于前面写的代码,在gamelets的工程目录下新建一个CanvasAndStage.ts 代码如下 import {Application, Graphics} from pixi.js; // 不要忘了,一定要引用这个css样式,否则就会以默认样式显示 import ./style.css // app.view就是画布&#xf…

使用JAVA代码实现发送订阅消息以及模板消息

今天写了一个商品到货提醒的job任务,具体效果如下 这里用到了微信的发送订阅消息,主要代码是这一块的,最后我把发送了消息的订单存到表里,因为是定时任务,大家可不存 发送订阅消息 | 微信开放文档 /*** 微信平台-商品…

<电力行业> - 《第1课:电力行业的五大四小》

1 什么是电力行业的五大四小? 我们常说的电力行业的五大四小,指的是电力行业有实力的公司,分为:较强梯队的五大集团、较弱梯队的四小豪门。 五个实力雄厚的集团,分别是: 中国华能集团公司中国大唐集团公…

公交行业系统特点及面临的挑战

在当前城市发展中,公交行业作为公共交通的重要组成部分,承担着重要的社会责任。随着科技的进步和城市化进程的加快,公交行业系统也在不断地发展和完善。然而,从目前的发展情况来看,公交行业系统也呈现出一些显著的特点…

怎么加密文件夹?文件夹加密软件推荐

文件夹加密是保护电脑数据的重要方法,那么你知道怎么加密文件夹吗?下面小编就为大家推荐两款文件夹加密软件,帮助你安全保护重要文件夹。 文件夹加密超级大师 在加密电脑文件夹时,文件夹加密超级大师是你必须要了解的文件夹加密软…

uniapp顶部导航栏实现自定义功能按钮+搜索框并监听响应事件

目录 第一步:先下载按钮需要展示的图标(若不使用图标,直接使用文字可跳过这步) 1、点击需要的图标,添加入库 2、点击旁边的购物车,在弹出的窗口中选择下载代码 3、解压下载的压缩包,将这几个…

鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段二

一、鸿蒙应用界面开发 弹性布局-Flex 语法 /* 弹性容器组件 Flex() 位置: Flex默认主轴水平往右,交叉轴垂直向下(类似Row) 语法: Flex(参数对象){子组件1,子组件2,子组件3 } 属性方法: direction&#xf…