Skip to content

Implement CIP-43: BlockContext(now rename to SysContractCallCtx)#1696

Merged
37ng merged 63 commits intotrianglesphere/workfrom
tong/sccc
Oct 29, 2021
Merged

Implement CIP-43: BlockContext(now rename to SysContractCallCtx)#1696
37ng merged 63 commits intotrianglesphere/workfrom
tong/sccc

Conversation

@37ng
Copy link
Copy Markdown
Contributor

@37ng 37ng commented Sep 17, 2021

Description

Background

CIP Link

Use cases

Current

1. In core.tx_pool_context

Reset in txPool.reset() every new block, for sorting and checking TX validity.

New

1. In miner.blockState

This is where validators mine blocks. We can initialize it within BlockState scope since we will reuse the contract call results from the state of beginning of a block, and apply all transactions within that block, and reset it for every new block.

2. In core.stateProcessor.Process()

This stateProcessor.Process() is used for engine.Verify() during consensus, and chain.insertChain(). Process() takes a block as argument, it makes sense to initialize an SCCC in this scope.

Implementation plan

  • Rename core.BlockContext to SysContractCallCtx(SCCC) to avoid confusion, because we already have vm.BlockContext.
  • Add basefee/GPM fields and methods in SCCC.
  • Only invoke contract calls when requested, instead of invoking all contract calls when SCCC is initialized.
func NewSCCC(vmRunner vm.EVMRunner) SCCC {
	return SCCC{
		field1:     empty,
		field2:     empty,
	}
}
func (s SCCC) GetField1() {
	s.field1 = contractCall()
	return s.field1
}

For use case 1: miner.BlockState

  • Add SCCC as a field, initialize it in worker.prepareBlock, such that when the miner is constructing blocks, the SCCC can be passed over to core.ApplyTransaction().

For use case 2: core.stateProcessor.Process()

  • Initialize SCCC in stateProcessor.Process(), pass it over to core.ApplyTransaction().

Other changes

None

Tested

TODO

Related issues

Backwards compatibility

A hard fork change.

@37ng 37ng self-assigned this Sep 17, 2021
@37ng 37ng force-pushed the tong/sccc branch 3 times, most recently from 56edaf0 to da41ae9 Compare September 20, 2021 21:13
Copy link
Copy Markdown
Contributor

@trianglesphere trianglesphere left a comment

Choose a reason for hiding this comment

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

Looking good so far. I've got one comment on keeping track of the statedb

Comment thread core/state_processor.go Outdated
Comment thread core/state_processor.go Outdated
Comment thread core/sys_context.go Outdated
@trianglesphere trianglesphere mentioned this pull request Sep 28, 2021
11 tasks
Copy link
Copy Markdown
Contributor

@trianglesphere trianglesphere left a comment

Choose a reason for hiding this comment

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

Looking good. I left a couple small comments. Try a merge from trianglesphere/work - more tests should be passing.

Comment thread core/state_prefetcher.go
Comment thread core/sys_context.go Outdated
@piersy
Copy link
Copy Markdown
Contributor

piersy commented Sep 29, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit 7c75f63

coverage:  44.2% of statements across all listed packages
coverage:  54.1% of statements in consensus/istanbul
coverage:  44.0% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  63.8% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

@piersy
Copy link
Copy Markdown
Contributor

piersy commented Sep 30, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit 21f1712

coverage:  44.5% of statements across all listed packages
coverage:  54.1% of statements in consensus/istanbul
coverage:  44.5% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  64.0% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

@piersy
Copy link
Copy Markdown
Contributor

piersy commented Oct 4, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit 5a3434c

coverage:  44.7% of statements across all listed packages
coverage:  54.1% of statements in consensus/istanbul
coverage:  45.0% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  64.2% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

@piersy
Copy link
Copy Markdown
Contributor

piersy commented Oct 5, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit 6071697

coverage:  45.4% of statements across all listed packages
coverage:  54.6% of statements in consensus/istanbul
coverage:  45.4% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  65.8% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

@piersy
Copy link
Copy Markdown
Contributor

piersy commented Oct 5, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit 9d26e5f

coverage:  44.7% of statements across all listed packages
coverage:  54.1% of statements in consensus/istanbul
coverage:  45.1% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  64.0% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

@piersy
Copy link
Copy Markdown
Contributor

piersy commented Oct 19, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit b896eb5

coverage:  44.6% of statements across all listed packages
coverage:  54.1% of statements in consensus/istanbul
coverage:  44.8% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  64.0% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

@piersy
Copy link
Copy Markdown
Contributor

piersy commented Oct 19, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit 4095d4d

coverage:  44.6% of statements across all listed packages
coverage:  54.1% of statements in consensus/istanbul
coverage:  44.8% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  63.9% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

Comment thread core/state_transition.go Outdated
Comment thread core/state_transition.go Outdated
Comment thread core/state_transition.go Outdated
@piersy
Copy link
Copy Markdown
Contributor

piersy commented Oct 19, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit a201f10

coverage:  44.4% of statements across all listed packages
coverage:  54.1% of statements in consensus/istanbul
coverage:  44.5% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  63.8% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

Copy link
Copy Markdown
Contributor

@trianglesphere trianglesphere left a comment

Choose a reason for hiding this comment

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

Overall looks good. The only change I'd like before merging is removing the Faker check inside state_transition.go.

Comment thread core/state_transition.go Outdated
@trianglesphere trianglesphere mentioned this pull request Oct 26, 2021
@piersy
Copy link
Copy Markdown
Contributor

piersy commented Oct 27, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit c53c6bf

coverage:  44.6% of statements across all listed packages
coverage:  54.1% of statements in consensus/istanbul
coverage:  44.8% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  64.0% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

@piersy
Copy link
Copy Markdown
Contributor

piersy commented Oct 27, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit 31129ec

coverage:  45.0% of statements across all listed packages
coverage:  54.6% of statements in consensus/istanbul
coverage:  44.8% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  65.3% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

@piersy
Copy link
Copy Markdown
Contributor

piersy commented Oct 27, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit c01718b

coverage:  44.7% of statements across all listed packages
coverage:  54.1% of statements in consensus/istanbul
coverage:  45.0% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  63.9% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

@piersy
Copy link
Copy Markdown
Contributor

piersy commented Oct 27, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit 903891d

coverage:  44.6% of statements across all listed packages
coverage:  54.1% of statements in consensus/istanbul
coverage:  44.8% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  63.9% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

@37ng 37ng requested a review from trianglesphere October 27, 2021 22:38
@piersy
Copy link
Copy Markdown
Contributor

piersy commented Oct 27, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit 3656f66

coverage:  44.3% of statements across all listed packages
coverage:  54.1% of statements in consensus/istanbul
coverage:  44.1% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  64.0% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

@piersy
Copy link
Copy Markdown
Contributor

piersy commented Oct 27, 2021

Coverage from tests in ./e2e_test/... for ./consensus/istanbul/... at commit 5a550be

coverage:  45.5% of statements across all listed packages
coverage:  54.6% of statements in consensus/istanbul
coverage:  45.4% of statements in consensus/istanbul/backend
coverage:   0.0% of statements in consensus/istanbul/backend/backendtest
coverage:  43.3% of statements in consensus/istanbul/backend/internal/db
coverage:  24.1% of statements in consensus/istanbul/backend/internal/enodes
coverage:  22.6% of statements in consensus/istanbul/backend/internal/replica
coverage:  66.2% of statements in consensus/istanbul/core
coverage:   0.0% of statements in consensus/istanbul/proxy
coverage:  75.3% of statements in consensus/istanbul/uptime
coverage: 100.0% of statements in consensus/istanbul/uptime/store
coverage:  51.8% of statements in consensus/istanbul/validator
coverage:  79.2% of statements in consensus/istanbul/validator/random

Copy link
Copy Markdown
Contributor

@trianglesphere trianglesphere left a comment

Choose a reason for hiding this comment

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

lgtm 🚀

@37ng 37ng merged commit bb6e70e into trianglesphere/work Oct 29, 2021
@37ng 37ng deleted the tong/sccc branch October 29, 2021 20:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants