Skip to content

Commit

Permalink
core, params: EIP#170
Browse files Browse the repository at this point in the history
  • Loading branch information
obscuren committed Nov 13, 2016
1 parent a91908e commit 0231d8f
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 6 deletions.
8 changes: 5 additions & 3 deletions core/execution.go
Original file line number Diff line number Diff line change
Expand Up @@ -150,11 +150,13 @@ func Create(env vm.Environment, caller vm.ContractRef, code []byte, gas, gasPric
defer contract.Finalise()

ret, err = env.Vm().Run(contract, nil)
// check whether the max code size has been exceeded
maxCodeSizeExceeded := len(ret) > params.MaxCodeSize
// if the contract creation ran successfully and no errors were returned
// calculate the gas required to store the code. If the code could not
// be stored due to not enough gas set an error and let it be handled
// by the error checking condition below.
if err == nil {
if err == nil && !maxCodeSizeExceeded {
dataGas := big.NewInt(int64(len(ret)))
dataGas.Mul(dataGas, params.CreateDataGas)
if contract.UseGas(dataGas) {
Expand All @@ -167,9 +169,9 @@ func Create(env vm.Environment, caller vm.ContractRef, code []byte, gas, gasPric
// When an error was returned by the EVM or when setting the creation code
// above we revert to the snapshot and consume any gas remaining. Additionally
// when we're in homestead this also counts for code storage gas errors.
if err != nil && (env.ChainConfig().IsHomestead(env.BlockNumber()) || err != vm.CodeStoreOutOfGasError) {
if maxCodeSizeExceeded ||
(err != nil && (env.ChainConfig().IsHomestead(env.BlockNumber()) || err != vm.CodeStoreOutOfGasError)) {
contract.UseGas(contract.Gas)

env.RevertToSnapshot(snapshotPreTransfer)

// Nothing should be returned when an error is thrown.
Expand Down
4 changes: 1 addition & 3 deletions params/protocol_params.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@
// You should have received a copy of the GNU Lesser General Public License
// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.

// DO NOT EDIT!!!
// AUTOGENERATED FROM generators/defaults.go

package params

import "math/big"
Expand Down Expand Up @@ -72,4 +69,5 @@ var (
MemoryGas = big.NewInt(3) // Times the address of the (highest referenced byte in memory + 1). NOTE: referencing happens on read, write and in instructions such as RETURN and CALL.
TxDataNonZeroGas = big.NewInt(68) // Per byte of data attached to a transaction that is not equal to zero. NOTE: Not payable on data of calls between transactions.

MaxCodeSize = 24576
)

0 comments on commit 0231d8f

Please sign in to comment.