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.pswp.cn/diannao/35971.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35971.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/35971.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

移植對話框MFC

VC版 MFC程序對話框資源移植 以下均拷貝自上面,僅用來記錄 (部分有刪除) 法1: Eg:將B工程調試好的對話框移植到A工程中 1.資源移植 1.1 在2017打開B工程,在工作區Resource標簽頁中選中Dialog文件夾下的資源文件,按…

注意!短視頻的致命誤區,云微客教你避開!

為什么你做短視頻就是干不過同行?因為你總想著拍劇情、段子這些娛樂視頻,還想著當網紅做IP人設,但是這些內容跟你的盈利沒有半毛錢關系,況且難度大、見效慢,還不是精準客戶。 以上這些就代表你走進了短視頻的誤區&…

C++初學者指南-2.輸入和輸出---流輸入和輸出

C初學者指南-2.輸入和輸出—流輸入和輸出 文章目錄 C初學者指南-2.輸入和輸出---流輸入和輸出1.定制輸入/輸出1.1 示例:點坐標輸入/輸出1.2 流操作符1.3(一部分)標準庫流類型 2. 工具2.1 用getline讀取行 2.2 用ignore進行跳轉2.3 格式化操作…

【論文閱讀】-- Temporal Summary Images:通過交互式注釋生成和放置實現敘事可視化的方法

Temporal Summary Images: An Approach to Narrative Visualization via Interactive Annotation Generation and Placement 摘要1 引言2 背景及相關工作2.1 敘事可視化和講故事2.2 顯示面向時間的數據2.3 小倍數和漫畫2.4 注釋可視化 3 設計要求和工作流程3.1 工作流程3.2 TSI…

基線核查--滲透

基線檢查 基線核查概念 it中定義: 基線為初始的標準,以后更改就要經過授權,形成下一基線。 軟件配置管理的基線:1功能基線,分配基線,產品基線 安全配置基線--基線核查 安全基線可以說是木桶理論&…

【python】eval函數

1.eval函數的語法及用法 (1)語法:eval(expression) 參數說明: expression:必須為字符串表達式,可為算法,也可為input函數等。 說明:表達式必需是字符串,否則會報錯&a…

Vue3-尚硅谷筆記

1. Vue3簡介 2020年9月18日,Vue.js發布版3.0版本,代號:One Piece(n 經歷了:4800次提交、40個RFC、600次PR、300貢獻者 官方發版地址:Release v3.0.0 One Piece vuejs/core 截止2023年10月,最…

Dubbo運行原理

目錄 Dubbo通訊協議 Dubbo負載均衡策略 RPC和HTTP有什么區別? 讓你設計一個RPC框架,如何考慮數據序列化問題? Dubbo 是一款高性能、輕量級的開源 RPC(遠程過程調用)框架,主要用于構建分布式服務和微服務…

springcloud第4季 springcloud-alibaba之openfegin+sentinel整合案例

一 介紹說明 1.1 說明 1.1.1 消費者8081 1.1.2 openfegin接口 1.1.3 提供者9091 9091微服務滿足: 1 openfegin 配置fallback邏輯,作為統一fallback服務降級處理。 2.sentinel訪問觸發了自定義的限流配置,在注解sentinelResource里面配置…

基于SpringBoot的學生綜合測評系統

你好呀,我是計算機學姐碼農小野!如果有相關需求,可以私信聯系我。 開發語言:Java 數據庫:MySQL 技術:SpringBoot框架 工具:MyEclipse、Tomcat 系統展示 首頁 系統首頁,提供綜合…

After Effects 2024 mac/win版:創意視效,夢想起航

After Effects 2024是一款引領視效革命的專業軟件,匯聚了創意與技術的精華。作為Adobe推出的全新版本,它以其強大的視頻處理和動畫創作能力,成為從事設計和視頻特技的機構,如電視臺、動畫制作公司、個人后期制作工作室以及多媒體工…

求職產品運營的個人簡歷案例(精選篇)

在求職產品運營的道路上,一份出色的個人簡歷是邁向成功的第一步,但是簡歷怎么寫才最好呢?下面是小編整理的求職產品運營的個人簡歷案例,同時,幻主簡歷網還提供精美簡歷模板下載和簡歷在線制作工具,歡迎大家…

Kivy tutorial 008: More kv language

Kivy tutorial 008: More kv language – Kivy Blog Central themes: Event binding and canvas instructions in kv language 中心主題: 事件綁定 和 kv語言里的畫布結構 This tutorial directly follows on from the previous, so start by retrieving the previous code, …

meizu M10 魅藍 10 mblu10 root 解鎖 安裝LSPosed框架 紫光展銳改串 AT命令 一鍵新機 改機軟件 硬改 改參數

meizu M10 魅藍 10 mblu10 root 解鎖 安裝LSPosed框架 紫光展銳改串 AT命令 一鍵新機 改機軟件 硬改 改參數 ro.system.build.version.release11 ro.system.build.version.release_or_codename11 ro.system.build.version.sdk30 ro.system.custom.versionAndroid_M01 ro.prod…

python目錄樹生成器

代碼如下: import os from colorama import Fore, Style, init from tkinter import Tk, Label, Entry, Button, Text, Scrollbar, RIGHT, Y, END# 初始化 colorama init(autoresetTrue)def print_directory_tree(root_dir, text_widget, indent, lastTrue):"…

NISP國家信息安全水平考試

國家信息安全水平考試(NISP)是中國信息安全測評中心考試、發證,由國家網絡空間安全人才培養基地運營管理,并授權網安世紀科技有限公司為NISP證書管理中心。 中國信息安全測評中心開展國家信息安全水平考試(NISP)考試項目,是為普及信息安全/網…

Sklearn 深入教程

Sklearn 深入教程 Scikit-learn(sklearn)是Python中功能強大且廣泛使用的機器學習庫。本教程將深入探討sklearn中的高級主題,涵蓋高級數據預處理、高級特征工程、復雜模型調參、高級集成學習、模型持久化與部署等內容。 目錄 高級數據預處…

Python實例:faker生成數據集、文件

原文鏈接:http://www.juzicode.com/python-example-faker-create-data 本文的幾個例子用faker生成數據并用openpyxl生成表格,或者生成csv、xml、圖像文件。 A)生成個人數據 #juzicode.com/VX公眾號:juzicode from openpyxl import Workboo…

IOS Swift 從入門到精通:BlurEffect BlendMode stroke

文章目錄 UIBlurEffectBlendModestroke基本用法:描邊樣式:與strokeBorder的區別:組合使用:自定義形狀:UIBlurEffect 在Swift中,實現模糊效果通常是通過UIKit框架中的UIBlurEffect類來完成的,這通常被稱作毛玻璃效果。 **創建UIBlurEffect實例:**選擇一個模糊效果的樣…

探索AudioLM的音頻源識別能力:解鎖聲音的奧秘

🎵 探索AudioLM的音頻源識別能力:解鎖聲音的奧秘 🔍 在音頻處理領域,識別不同的音頻源是一項挑戰性任務,涉及到音頻信號處理、模式識別和機器學習等多個領域。AudioLM,作為一個假想的先進的音頻處理模型&a…