Merge pull request #28 from sei-protocol/get-contract-deployment-code

Add function to get deployment code
This commit is contained in:
codchen 2024-05-14 13:06:05 +08:00 committed by GitHub
commit 75ee88a536
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -530,6 +530,23 @@ func (evm *EVM) CreateWithAddress(caller ContractRef, code []byte, gas uint64, v
return evm.create(caller, &codeAndHash{code: code}, gas, value, address, CREATE) return evm.create(caller, &codeAndHash{code: code}, gas, value, address, CREATE)
} }
func (evm *EVM) GetDeploymentCode(caller ContractRef, code []byte, gas uint64, value *big.Int, address common.Address) ([]byte, error) {
contract := NewContract(caller, AccountRef(address), value, gas)
contract.SetCodeOptionalHash(&address, &codeAndHash{code: code})
ret, err := evm.interpreter.Run(contract, nil, false)
// Check whether the max code size has been exceeded, assign err if the case.
if err == nil && evm.chainRules.IsEIP158 && len(ret) > params.MaxCodeSize {
err = ErrMaxCodeSizeExceeded
}
// Reject code starting with 0xEF if EIP-3541 is enabled.
if err == nil && len(ret) >= 1 && ret[0] == 0xEF && evm.chainRules.IsLondon {
err = ErrInvalidCode
}
return ret, err
}
// ChainConfig returns the environment's chain configuration // ChainConfig returns the environment's chain configuration
func (evm *EVM) ChainConfig() *params.ChainConfig { return evm.chainConfig } func (evm *EVM) ChainConfig() *params.ChainConfig { return evm.chainConfig }