Defi

什麼是 INIT_CODE_HASH 以及它是如何在 DeFi 智能合約中計算/使用的

  • November 11, 2021

我出於教育目的分叉了Sushiswap Exchange程式碼,並且我在程式碼中遇到了一個名為INIT_CODE_HASH. 我正在努力理解這個變數是如何工作的,以及它是如何在各種 DeFi 平台中使用的。

我有限的理解是,INIT_CODE_HASH它用於通過使用初始化程式碼的雜湊來驗證呼叫者正在呼叫的合約函式(不太確定初始化程式碼是什麼)。出於某種原因,我不太明白,這是出於安全和效率目的。

我的問題:

什麼是INIT_CODE_HASH,它是如何計算/使用的?

INIT_CODE_HASH是合約的 initcode 的雜湊值。initcode 是創建儲存在鏈上的字節碼的程式碼。您可以在此處閱讀有關字節碼類型的更多資訊。

大多數 dapps,包括 Sushiswap,都使用這個變數來創建一個新的合約create2。當 dapp 想要創建具有已知地址的合約時,他們將使用create2操作碼,該操作碼使用散列後的 initcode 作為參數。它的 EIP 在這裡

可以看到 Sushiswap 在這個 getCreate2Address地址中使用了它:

[tokens[1].address]: getCreate2Address(
           FACTORY_ADDRESS,
           keccak256(['bytes'], [pack(['address', 'address'], [tokens[0].address, tokens[1].address])]),
           INIT_CODE_HASH
         )

https://www.codegrepper.com/code-examples/javascript/calculate+init+code+hash+nodejs

這顯示了它如何與 COMPUTED_INIT_CODE_HASH ( https://www.codegrepper.com/code-examples/javascript/calculate+init+code+hash+nodejs ) 一起使用:

import { INIT_CODE_HASH } from '../src/constants'

import { bytecode } from '@uniswap/v2-core/build/UniswapV2Pair.json'
import { keccak256 } from '@ethersproject/solidity'

const COMPUTED_INIT_CODE_HASH = keccak256(['bytes'], [`0x${bytecode}`])

引用自:https://ethereum.stackexchange.com/questions/89680