Когда я впервые добавил торговую пару, она постоянно терпела неудачу, но конкретной причины не было указано. На этом этапе его нет. Как видно на рисунке ниже, журнала нет. Видно, что первый шаг не удался.
Добавьте следующее
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договор Создайте хэш код. Такая практика обычно наблюдается при автоматизации децентрализованных бирж (DEX), таких как маркет-мейкеры (AMM), таких как Uniswap или подобных проектов, с целью расчета пула ликвидности (ликвидности). пул) адрес.
Вот подробное объяснение:
keccak256(abi.encodePacked(type(KywPair).creationCode))
Это выражение оцениваетKywPair
договор При созданиииз Полный байт-кодиз Хэш-значение。существоватьSolidityсередина,type(KywPair).creationCode
прямо цитируемыйKywPair
договориз Создать байт-код。
в общем,INIT_CODE_PAIR_HASH
постоянныйсуществоватьидтисередина Сосредоточьтесь на финансах(DeFi)проектсерединаиграть ключевую рольизэффект,Это помогает обеспечить согласованность и безопасность адресов пула ликвидности.,В то же время оптимизируется эффективность вычислений.
// 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 пара) адрес. Этот сгенерированный адрес фиксирован, и пока входные параметры одинаковы, каждый вызов будет давать один и тот же результат. Этот подход гарантирует, что каждый раз, когда создается пара ликвидности, она не создается дважды, если уже существует пара ликвидности с той же комбинацией токенов.
hex'c21238f28fb49774a7b7d0671f8c4e909b72b25023105d7e07ea2507b6fa3974'
этот Шестнадцатеричная строка, представляющая пару ликвидности.договориз Код инициализациииз Хэш-значение。существоватьPancakeSwapизконтекстсередина,Обычно этоPancakePair
договориз Создать кодизKeccak256Хэш-значение。
Этот хэш играет важную роль при вычислении адреса пары ликвидности, поскольку помогает гарантировать, что сгенерированный адрес соответствует конкретному заводскому контракту, комбинации токенов и коду инициализации. В частности, что он делает:
поэтому,hex'c21238f28fb49774a7b7d0671f8c4e909b72b25023105d7e07ea2507b6fa3974'
изжитьсуществоватьзаключается в обеспечении ликвидности адресаиз Генерация является одновременно детерминированной ибезопасность,В то же время он привязан к конкретному коду инициализации. в реальном коде,этот Хэш-значениедолжно бытьPancakePair
договор Создать кодизточный Хэш-значение,Используется для генерации адресов пар ликвидности.