Skip to content

Conversation

@bharath-123
Copy link
Contributor

@bharath-123 bharath-123 commented May 29, 2024

This PR rebases astria-geth on top of geth 1.14.3. Below are the main changes which affect astria-geth:

  1. There seems to be an overall shift in the Geth code to prefer uint256.NewInt over big.NewInt. There are some places in our codebase where I had to typecast bigInt to uint256. But this usage also seems to be pretty inconsistent overall. I suspect as geth updates, most of the codebase will eventually use uint256.

  2. The block building process under the miner directory used to have a worker struct in pre 1.14 geth. The payloadBuilding process was as method on the worker struct. With geth 1.14 there is a major refactor to simplify the codebase by removing the worker struct. Now we need to define all the methods under the Miner struct. This required some modifications to fillAstriaTransactions and commitAstriaTransactions to be implemented on the Miner struct.
    Files Changed
    miner/payload_building.go
    miner/worker.go

  3. Methods like AddBalance and SubBalance which update the balance of the user in the stateDB now requires to add an extra parameter indicating the reason of change of balance. This is used for live tracing introduced in geth 1.14. This is basically an enum. I added a new value called BalanceIncreaseAstriaDepositTx which indicates a balance increase due to an astria deposit tx.
    Files Changed:
    core/state_transition.go
    tracing/hooks.go

  4. Geth re-worked their testing infra. Integration tests use a SimulatedBackend which mocked the geth RPC. It simulates api calls such as sendTransaction. Pre geth 1.14, when sendTransaction was called with SimulatedBackend, txs bypassed the mempool and were directly added to the block. Post geth 1.14, this is not the case anymore and the txs are sent to the mempool. This breaks certain tests for us, since we rely on txs to come from the Execution API. I have commented out the tests for now but it ll be worth adding a simulated backend which bypasses the tx for our purposes. It ll be useful to test certain codepaths.
    The following tests have been commented out:
    a. TestWaitDeployed
    b. TestGolangBindings
    c. TestEthClient/AtFunctions
    d. TestForkResendTx

Testing: make test runs without problems. I deployed this astria-evm locally using the monorepo charts and was able to run spamooor scenarios successfully against it.

@bharath-123 bharath-123 force-pushed the bharath/update-to-1.14 branch 2 times, most recently from 4b8ecbe to b757f5b Compare May 30, 2024 10:45
@bharath-123 bharath-123 changed the title Update to geth 1.14 Update Astria-geth to use geth 1.14 May 30, 2024
@bharath-123 bharath-123 marked this pull request as ready for review May 30, 2024 11:10
Base automatically changed from bharath/add-execution-server-tests to main May 31, 2024 06:25
@bharath-123 bharath-123 force-pushed the bharath/update-to-1.14 branch 4 times, most recently from 2b28ac2 to 1fbd448 Compare June 4, 2024 14:19
Comment on lines -136 to -149
if merger := eth.Merger(); !merger.PoSFinalized() {
merger.FinalizePoS()
}
Copy link
Contributor Author

Choose a reason for hiding this comment

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

There is some legacy code being removed in geth.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

require.True(t, balanceDiff.Cmp(big.NewInt(1000000000000000000)) == 0, "Chain destination address balance is not correct")
balanceDiff := new(uint256.Int).Sub(chainDestinationAddressBalanceAfter, chainDestinationAddressBalanceBefore)
fmt.Printf("Balance diff: %s\n", balanceDiff.String())
require.True(t, balanceDiff.Cmp(uint256.NewInt(1000000000000000000)) == 0, "Chain destination address balance is not correct")
Copy link
Contributor Author

Choose a reason for hiding this comment

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

examples of some changes to uint256.Int. This is because the stateDB is now returning only uint256s.

@@ -364,7 +381,7 @@ func (st *StateTransition) preCheck() error {
func (st *StateTransition) TransitionDb() (*ExecutionResult, error) {
// if this is a deposit tx, we only need to mint funds and no gas is used.
if st.msg.IsDepositTx {
st.state.AddBalance(st.msg.From, st.msg.Value)
st.state.AddBalance(st.msg.From, uint256.MustFromBig(st.msg.Value), tracing.BalanceIncreaseAstriaDepositTx)
Copy link
Contributor Author

Choose a reason for hiding this comment

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

example of requirement of uint256 and adding tracing reason


// collect base fee instead of burn
if rules.IsLondon && st.evm.Context.Coinbase.Cmp(common.Address{}) != 0 {
baseFee := new(big.Int).SetUint64(st.gasUsed())
baseFee.Mul(baseFee, st.evm.Context.BaseFee)
st.state.AddBalance(st.evm.Context.Coinbase, baseFee)
st.state.AddBalance(st.evm.Context.Coinbase, uint256.MustFromBig(baseFee), tracing.BalanceIncreaseRewardTransactionFee)
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Update from big.int to uint256

@@ -175,7 +176,10 @@ func (payload *Payload) ResolveFull() *engine.ExecutionPayloadEnvelope {
}

// buildPayload builds the payload according to the provided parameters.
func (w *worker) buildPayload(args *BuildPayloadArgs) (*Payload, error) {
func (miner *Miner) buildPayload(args *BuildPayloadArgs) (*Payload, error) {
Copy link
Contributor Author

Choose a reason for hiding this comment

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

key change: buildPayload is now based on Miner rather than worker.

@@ -20,57 +20,18 @@ import (
"errors"
Copy link
Contributor Author

Choose a reason for hiding this comment

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

the worker.go file is now very simplified.

@joroshiba
Copy link
Member

I think we might need some fresh updates after Elizabeth PR merge, but otherwise LGTM

@bharath-123 bharath-123 force-pushed the bharath/update-to-1.14 branch from e8ceb69 to 14a96f6 Compare June 10, 2024 17:24
@bharath-123 bharath-123 changed the title Update Astria-geth to use geth 1.14 Update Astria-geth to use geth 1.14.0 Jun 11, 2024
@bharath-123 bharath-123 changed the title Update Astria-geth to use geth 1.14.0 Update Astria-geth to use geth 1.14.3 Jun 11, 2024
@bharath-123 bharath-123 force-pushed the bharath/update-to-1.14 branch from a7ab4e4 to 5f9724b Compare June 11, 2024 13:48
@joroshiba joroshiba merged commit 2b8a8ee into main Jun 20, 2024
@joroshiba joroshiba deleted the bharath/update-to-1.14 branch June 20, 2024 15:58
steezeburger added a commit that referenced this pull request Jul 9, 2024
* main:
  fix: update with new asset proto (#34)
  feat: support bech32 addresses (#30)
  fix: Ensure all txs are removed from mempool when block building is interrupted (#29)
  disallow users from sending deposit txs and blob txs via the rpc (#24)
  Update Astria-geth to use geth 1.14.3 (#21)
@SuperFluffy SuperFluffy restored the bharath/update-to-1.14 branch April 30, 2025 12:57
@SuperFluffy SuperFluffy deleted the bharath/update-to-1.14 branch May 5, 2025 14:21
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.