Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >swp添加池子addLiquidity失败

swp添加池子addLiquidity失败

作者头像
终有链响
发布于 2024-07-29 12:09:38
发布于 2024-07-29 12:09:38
15900
代码可运行
举报
文章被收录于专栏:终有链响终有链响
运行总次数:0
代码可运行

案发现场

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

解决方案

一、添加 工厂KywFactory

添加如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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更新

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // calculates the CREATE2 address for a pair without making any external calls
    function 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合约创建代码的准确哈希值,用于生成流动性对地址。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在以太坊生成随机数的几种方式(含代码)
随机数都是由随机数生成器(Random Number Generator)生成的。随机数分为”真随机数“和”伪随机数“两种。
Tiny熊
2020/06/05
2.8K0
在以太坊生成随机数的几种方式(含代码)
智能合约安全——随机数
智能合约的开发中常常会用到随机数,例如 Lottery 和现在流行的 NFT 数字藏品的属性等都需要用到随机数。目前来说常见的随机数获取有两种:使用区块变量生成随机数,使用预言机来生成随机数。下面我们了解一下这两者的特点:
fingernft
2022/08/05
7040
智能合约安全——随机数
SushiSwap协议分析
SushiSwap是一个分叉自Uniswap的去中心化交易协议,它在交易模式上延续了Uniswap的核心设计——AMM(自动做市商)模型,但与Uniswap不同之处在于SushiSwap增加了经济奖励模型,SushiSwap交易手续费为0.3%,其中0.25%直接分给发给流动性提供,0.05%买成SUSHI并分配给Sushi代币持有者(Uniswap是通过开关模式决定是否将0.05%的手续费给开发者团队),Sushi在每次分发时会预留10%给项目未来开发迭代及安全审计等。
Al1ex
2021/07/21
2.3K0
SushiSwap协议分析
智能合约安全审计之路-随机误用漏洞
智能合约开发中,在程序中使用随机数较好的伪随机数是很难的。很多看似无法被预言的随机数种子或变量,实际被预言的难度很低。
字节脉搏实验室
2020/04/21
1.1K0
以太坊合约地址是怎么计算出来的?(附源码实现)
darren94me: https://learnblockchain.cn/people/4859
Tiny熊
2022/04/08
1.7K0
以太坊合约地址是怎么计算出来的?(附源码实现)
UniswapV2协议解析
本篇文章主要对Uniswap V2协议的工作原理、项目构成、源码实现等部分进行详细解读。
Al1ex
2021/07/21
3.6K2
UniswapV2协议解析
剖析DeFi交易产品之UniswapV3:头寸管理合约
实现用户层面的流动性头寸管理的合约是 NonfungiblePositionManager 合约,其实现比较复杂,还继承了很多子合约,限于篇幅,我们无法全都一一讲解,就只能挑一些重点的来讲。
Keegan小钢
2023/11/08
5110
剖析DeFi交易产品之UniswapV3:头寸管理合约
剖析DeFi交易产品之Uniswap:V2上篇
在 DeFi 赛道中,DEX 无疑是最核心的一块,而 Uniswap 又是整个 DEX 领域中的龙头,如 SushiSwap、PancakeSwap 等都是 Fork 了 Uniswap 的。虽然网上关于 Uniswap 的文章已经挺多,但大多都只是从机制上进行介绍,很少谈及具体实现,也存在一些问题没能解答,比如:手续费分配是如何实现的?最优路径是如何得出的?TWAP 怎么用?注入流动性时返回多少 LP Token 是如何计算的?因此,我从代码层面去剖析 Uniswap,搞清楚这些问题,同时也对 Uniswap 从整体到细节都有所理解。
Keegan小钢
2021/08/20
1.8K0
一个蜜罐合约的解析
分别是部署合约(constructor),开始游戏(Start),尝试(Try),停止游戏(Stop) 从代码来看,整个代码就是,猜谜游戏,start出题、设置答案,Try解题,对了就转账给对的人。从交易记录来看,出题人,一下转了2个eth进去,Try需要至少1个eth才能进行。结果就是合约部署人,在constructor的时候把自己账号的 keccak256(abi.encodePacked(msg.sender)给设置进去
Tiny熊
2022/02/22
7280
一个蜜罐合约的解析
UniSwap学习笔记1: 概览以及交易对地址计算
hello everyone, 我是 tony, 今天开始为大家分享我最近学习 Uniswap[2] 的小小心得, 希望各位看官多多提意见, 大家一起进步.
Tiny熊
2022/05/25
2K1
关于以太坊随机数
在以太坊应用中,游戏一直都是热点中的热点,而在游戏中,随机数往往是一个不可或缺的功能,比如骰子游戏中,我们需要通过随机数来控制点数,如果一个游戏有一个好的随机数算法的话,那么既可以保证游戏庄家不被黑,也可以保证玩家不被宰。
LA0WAN9
2021/12/14
7140
Uniswap V2部署
最近在研究uniswap v2[2]版本逻辑和代码,接下来我们以一篇uniswap v2版本的部署,开启uniswap[3]的学习之路。
Tiny熊
2021/12/15
1.9K0
Uniswap V2部署
智能合约安全之签名非唯一性
以太坊合约中的加密签名实现通常假定签名是唯一的,但是可以在不具备私钥的情况下实现对签名的更改,并且签名仍然有效,在EVM规范定义了几个"预编译"合约,其中一个合约ecrecover主要用于执行椭圆曲线公钥恢复,恶意用户可以稍微修改三个值r,v,s来创建其他有效签名,此时如果签名是已签名消息哈希的一部分,则在合约级别执行签名验证的系统可能会受到攻击,恶意用户可能创建有效的签名,以重放以前签名的消息来获利或实施恶意攻击。
Al1ex
2021/07/21
7330
智能合约安全之签名非唯一性
ENS源码分析
2021 年 ENS 大火,有很多用户用户赚了不菲的空投,甚至部分用户赚了上千万。
Tiny熊
2022/04/08
1.3K0
ENS源码分析
Uniswap V2 源码学习 (四). 签名和路由
上次我们在研究 router 合约的时候, 有一个 removeLiquidityWithPermit 函数[2], 今天讲讲它和 Pair 的 permit 方法
Tiny熊
2022/05/25
1.4K0
【知识】无GAS以太坊交易实现原理及源码
每个人都在讨论无gas以太坊交易,因为没有人喜欢支付gas费用。但是以太坊网络能够精准地运转恰恰是因为交易需要手续费。那么如何实现无gas交易呢?让我们一起学习无gas以太坊交易的魔法!
辉哥
2021/11/24
1.9K0
【知识】无GAS以太坊交易实现原理及源码
理解以太坊ABI - 应用程序二进制接口
阅读本文前,你应该对以太坊、智能合约有所了解, 如果你还不了解,建议你先看以太坊是什么。
Tiny熊
2018/08/23
1.3K0
理解以太坊ABI - 应用程序二进制接口
以太坊solidity智能合约-生成随机数
在以太坊的只能合约中,没有提供像其他面向对象编程一样的生成随机数的工具类或方法。其实,所谓的随机数也是伪随机的,没有哪一种语言能够真正的生成随机数。
程序新视界
2019/08/14
2.3K0
[区块链]Solidity小白菜系列进阶(二)
荷秋
2024/12/27
1771
通过链下签名授权实现更少 Gas 的 ERC20代币
译文出自:登链翻译计划[1] 译者:Tiny熊[2] 解锁消耗到了大量的 gas 每个人都在谈论 “无gas” 的以太坊交易,因为没有人喜欢支付gas费用。但是以太坊网络的运行正是因为交易是付费的。那
Tiny熊
2020/09/29
3.5K0
通过链下签名授权实现更少 Gas 的 ERC20代币
相关推荐
在以太坊生成随机数的几种方式(含代码)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档