Skip to content
This repository has been archived by the owner on Aug 13, 2019. It is now read-only.

EIP 170, contract size limit #23

Merged
merged 9 commits into from
May 23, 2019
Merged

Conversation

steviezhang
Copy link
Contributor

Implements EIP170, but if err is empty and the maxContractSize is exceeded, contract creation fails with a max contract size exceeded error.

Should have had a PR for this a while ago, my bad

@noot
Copy link
Contributor

noot commented May 13, 2019

I'm getting some failures when running the tests:

--- FAIL: TestStateTestsRandom (5.81s)
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1000000000000100000 have: 1000000000000000000
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1000000000000100000 have: 1000000000000000000
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1000000000000100000 have: 1000000000000000000
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1000000000000100000 have: 1000000000000000000
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1000000000000100000 have: 1000000000000000000
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1000000000000100000 have: 1000000000000000000
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1000000000000100000 have: 1000000000000000000
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1000000000000100000 have: 1000000000000000000
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1000000000000100000 have: 1000000000000000000
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1000000000000100000 have: 1000000000000000000
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1000000000000100000 have: 1000000000000000000
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1000000000000100000 have: 1000000000000000000
        
        
    state_test.go:258: randomStatetest: (a94f5374) balance failed. Expected: 999999999999850433 have: 999999999999600000
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1251612581 have: 0
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1392179737 have: 0
        
        
    state_test.go:258: randomStatetest: (a94f5374) balance failed. Expected: 999999999368594097 have: 999999999221643132
        
        
    state_test.go:258: randomStatetest: (a94f5374) balance failed. Expected: 999999998029909387 have: 999999999847997221
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1969973721 have: 0
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1650737351 have: 0
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1650737351 have: 0
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1650737351 have: 0
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1762323696 have: 0
        
        
    state_test.go:258: randomStatetest: (945304eb) balance failed. Expected: 456118 have: 962695216
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 50481116 have: 0
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 50481116 have: 0
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1485632 have: 0
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1485632 have: 0
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1485632 have: 0
        
        
    state_test.go:258: randomStatetest: (095e7bae) balance failed. Expected: 1485632 have: 0
        

is this due to trying to test contracts that are too large?

@@ -28,6 +28,9 @@ import (
var (
callCreateDepthMax = 1024 // limit call/create stack
errCallCreateDepth = fmt.Errorf("Max call depth exceeded (%d)", callCreateDepthMax)

maxCodeSize = 24576
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note we should probably move params to their own file for consistency, but probably could hold off now to limit merge conflicts from the revert branch and if anyone else has done similar.

@@ -114,11 +119,14 @@ func exec(env vm.Environment, caller vm.ContractRef, address, codeAddr *common.A
defer contract.Finalise()

ret, err = evm.Run(contract, input)

//will need to add && env.RuleSet().isAtlantis(evm.Blocknumber) to this after that gets merged
maxCodeSizeExceeded := len(ret) > maxCodeSize
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maxCodeSizeExceeded := env.RuleSet().IsAtlantis(env.BlockNumber()) && len(ret) > maxCodeSize

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added

@GregTheGreek GregTheGreek mentioned this pull request May 16, 2019
Copy link

@GregTheGreek GregTheGreek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CI is failing

@noot
Copy link
Contributor

noot commented May 22, 2019

@steviezhang pls resolve conflicts

@steviezhang
Copy link
Contributor Author

steviezhang commented May 22, 2019

The CI is failing

CI passes now

@@ -746,6 +746,11 @@ func TestAllETH(t *testing.T) {
}
}

func TestETHCodeSizeLimit(t *testing.T) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remove this and just delete

"stCodeSizeLimit":         true,

in TestAllETH

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed

@steviezhang steviezhang merged commit 08ef773 into development May 23, 2019
@steviezhang steviezhang deleted the stephanie/contractSizeLimit branch May 23, 2019 19:37
noot pushed a commit that referenced this pull request Jun 6, 2019
* Removed research and moved to wiki (#2)

* changed import paths from ethereumproject to eth-classic (#4)

* changed import paths from ethereumproject to eth-classic

* add bn256 package; begin adding bn256add

* fix syntax errors; tests package passes

* fix import path

* change all import paths to eth-classic after forking needed repos

* go: initialized modules (#10)

* init gomodules

* remove vendor

* update modules

* Fixed dependency references to allow build to run without sputnikvm (#14)

* Testing framework (#12)

* Removed coverage file accidentally commited

* Set up testing framework for eth tests

* go: initialized modules (#10)

* init gomodules

* remove vendor

* update modules

* Updated struct formatting for unmarshalling

* Updated format of eth test struct and updated test files (were replaced with generated files)

* Using ethereum tests submodule and updated framework for testing

* Updated hashing of logs comparison and logging of tests

* Removed error checking on state execution because expected error in some tests

* Updated testing structure into subtests for better reporting and so that all test cases are tested even when one fails

* Changed subtest name from full filepath to just the json file

* Restructured and added light documentation

* Added homestead specific state test

* Updated framework to be able to delete empty objects in trie for tests>EIP158

* Changed conditional for when state objects are deleted and removed logging statement

* Changed folder back to intended from testing

* Changed conditional to not skip EIP158 fork tests

* Added functionality to skip tests

* Removed commented out code

* Create CODEOWNERS (#17)

* Config and refactor (#21)

* Refactor and add config for Atlantis chain config

* Typo fix

* Refactor jump table setup

* Changed fork config skipping functionality and removed unused configuration mappings

* Fixed null pointer error with test configs

* Added definitions of other blocks for correctly mapping gas table

* Implemented IsAtlantis interface for vm runtime

* Added fix for testing some fork subtests EIP150 and Frontier (#27)

* ci: create basic circle-ci config (#26)

* ci: create basic circle-ci config

* ci: lower parallelism

* ci: rename jobs

* ci: rename jobs

* EIP161, State Trie Clearing (#28)

* implemented EIP 161 logic

* implemented EIP 161 logic

* fixed bug

* no more segfaults

* Byzantium Tests Passing. Certain Homestead Failing

* Fixed implementation to pass (almost) all tests

* Updated testing framework to run all ETH directories

* Reimpl EIP161 SUICIDE and CALL edge cases

* Skip unimplemented functionality tests

* proper indentation

* Elizabeth/fix bindings test (#30)

* add go mods to bind package

* attempt to fix mods

* revert some dependencies

* fixed trimToImportPath for outside of go path (#33)

* fixed trimToImportPath for outside of go path

* is this how working_directory works?

* is this how working_directory works?

* is this how working_directory works?

* is THIS how working_directory works?

* is THIS how working_directory works?

* working_directory

* working_directory

* EIP 140 REVERT (#34)

* Implemented EIP 140 op code framework to be tested

* Added required parameters and moved protocol parameters into their own file

* Removed coverage file accidentally commited

* Set up testing framework for eth tests

* Updated struct formatting for unmarshalling

* Updated format of eth test struct and updated test files (were replaced with generated files)

* Using ethereum tests submodule and updated framework for testing

* Updated testing structure into subtests for better reporting and so that all test cases are tested even when one fails

* Fix merge error

* Removed indirect reference to ethereum/go-ethereum during rebase

* Implemented EIP 140 op code framework to be tested

* Added required parameters and moved protocol parameters into their own file

* Removed coverage file accidentally commited

* Set up testing framework for eth tests

* Updated struct formatting for unmarshalling

* Updated format of eth test struct and updated test files (were replaced with generated files)

* Using ethereum tests submodule and updated framework for testing

* Updated testing structure into subtests for better reporting and so that all test cases are tested even when one fails

* Fix merge error

* Removed indirect reference to ethereum/go-ethereum during rebase

* WIP fixed some implementations of REVERT

* Fixed more implementation details

* Skipped unrelated and unimplemented tests

* Implemented EIP 140 op code framework to be tested

* Added required parameters and moved protocol parameters into their own file

* Removed coverage file accidentally commited

* Set up testing framework for eth tests

* Updated struct formatting for unmarshalling

* Updated format of eth test struct and updated test files (were replaced with generated files)

* Using ethereum tests submodule and updated framework for testing

* Updated testing structure into subtests for better reporting and so that all test cases are tested even when one fails

* Fix merge error

* Removed indirect reference to ethereum/go-ethereum during rebase

* Implemented EIP 140 op code framework to be tested

* Added required parameters and moved protocol parameters into their own file

* Removed coverage file accidentally commited

* Set up testing framework for eth tests

* Updated struct formatting for unmarshalling

* Updated format of eth test struct and updated test files (were replaced with generated files)

* Using ethereum tests submodule and updated framework for testing

* Updated testing structure into subtests for better reporting and so that all test cases are tested even when one fails

* Fix merge error

* Removed indirect reference to ethereum/go-ethereum during rebase

* WIP fixed some implementations of REVERT

* Fixed more implementation details

* Skipped unrelated and unimplemented tests

* Revert modules changes from development

* Removed last gas cost variable used previously to save recalculation

* EIP 170, contract size limit (#23)

* added contract size limit

* added maxCodeSizeExceeded error

* fixed some tests failing due to not checking for creation of contract in the OR

* added IsAtlantis condition for max code size to apply. We now fail tests

* removed TestETHCodeSizeLimit

* EIP 100 Difficulty adjustment and testing (#36)

* Set up testing framework for difficulty

* Set up framework for testing difficulty

* Implemented EIP 100 and set up testing config

* Set up testing framework for difficulty

* Set up framework for testing difficulty

* Implemented EIP 100 and set up testing config

* Cleaned up and moved params to file

* Fixed usages of CalcDifficulty

* Moved parsing of hex or decimal strings functions to common package

* EIP 211 and refactor (#37)

* set up framework for returndata and refactor

* Refactored pc operation

* Refactored nil function jumptable lookups (why was it like that to begin with)

* Finished refactoring jump operations

* Implemented 211 functionality, but state tests not passing

* Fixed returndatasize

* Refactor memory and gas stack accesses

* Fixed a few small details for the implementation

* Fixed incorrect implementation of returndatacopy and revert edge case

* Removed unused instruction parameter since refactor

* Removed commented out printing from debugging

* EIP 196, 197, 198 (#24)

* implement bn256 precompiles

* implement bigModExp

* add comments and test

* run precompile tests

* skip failing tests for now

* add distinction between atlantis and pre-atlantis precompiles

* refactor precompiles to separate pre and post atlantis

* implement bn256 precompiles

* implement bigModExp

* add comments and test

* run precompile tests

* skip failing tests for now

* add distinction between atlantis and pre-atlantis precompiles

* refactor precompiles to separate pre and post atlantis

* fix ecrecover edge case

* implement bn256 precompiles

* implement bigModExp

* add comments and test

* run precompile tests

* skip failing tests for now

* add distinction between atlantis and pre-atlantis precompiles

* refactor precompiles to separate pre and post atlantis

* implement bn256 precompiles

* implement bigModExp

* add comments and test

* run precompile tests

* fix ecrecover edge case

* update go.mod

* remove skip for previously failing tests

* attempt to fix go.mod

* attempt to fix go.mod

* fix go.mod termiu version

* EIP 214 STATICCALL (#40)

* Cherry pick STATICALL commit

* Removed implemented skipped tests

* Removed implemented tests
@soc1c soc1c mentioned this pull request Jun 17, 2019
16 tasks
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants