Skip to content

Commit

Permalink
Merge pull request #28 from sei-protocol/get-contract-deployment-code
Browse files Browse the repository at this point in the history
Add function to get deployment code
  • Loading branch information
codchen authored May 14, 2024
2 parents a98e562 + 34416a9 commit 75ee88a
Showing 1 changed file with 17 additions and 0 deletions.
17 changes: 17 additions & 0 deletions core/vm/evm.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}

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
func (evm *EVM) ChainConfig() *params.ChainConfig { return evm.chainConfig }

Expand Down

0 comments on commit 75ee88a

Please sign in to comment.