implement AstriaMintableERC20, update deposit tx to support ERC20 mints#20
implement AstriaMintableERC20, update deposit tx to support ERC20 mints#20
AstriaMintableERC20, update deposit tx to support ERC20 mints#20Conversation
v1.8.2
grpc/execution/server.go
Outdated
| // | ||
| // the fees are spent from the "bridge account" which is not actually a real account, but is instead some | ||
| // address defined by consensus, so the gas cost is not actually deducted from any account. | ||
| Gas: 16000, |
There was a problem hiding this comment.
I'm not sure if this is a big enough number, the gas costs of a tx is normally gasUnits * gasPrice. I'd either make it so the DepositTxs pay no gas or set this to something crazy large to account for EIP1559 gas price swings
There was a problem hiding this comment.
I originally tried to just make the tx not use gas, but it got a bit janky when it came to the state transition gas accounting D:
the gas parameter here is just for the gas units, not the gas price, and I don't think gas itself can vary that much? DepositTxs don't have a gas price since they're inherent to consensus
There was a problem hiding this comment.
Lol I got that wrong, you're right it's the gas unit and not gas cost. This should be fine then
contracts/src/Counter.sol
Outdated
| @@ -0,0 +1,14 @@ | |||
| // SPDX-License-Identifier: UNLICENSED | |||
grpc/execution/server.go
Outdated
| assetID := [32]byte{} | ||
| copy(assetID[:], deposit.AssetId[:32]) | ||
|
|
||
| if _, ok := s.bridgeAllowedAssetIDs[assetID]; !ok { |
There was a problem hiding this comment.
We don't check that the bridge account itself is tied to this asset or if the bridge's start height requirement has been met. Might be safer to make these checks
## Summary implement withdrawals of ERC20 tokens that are of type `AstriaBridgeableERC20` (see implemented contract). ## Background we want to be able to withdraw ERC20 tokens that are bridged to a rollup. ## Changes - implement `AstriaBridgeableERC20` which is a standard `ERC20` contract with additional functionality for minting (not used by the withdrawer, implemented/tested here astriaorg/astria-geth#20) as well as functionality for withdrawing - implement `IAstriaWithdrawer` which is implemented by both `AstriaWithdrawer` and `AstriaMintableERC20`. - the withdrawer now interacts with a `IAstriaWithdrawer`. both native assets and ERC20 withdrawals have the same event signatures, so no additional code was needed for the withdrawer itself. - to use the withdrawer with an `AstriaBridgeableERC20`, the `ASTRIA_BRIDGE_WITHDRAWER_ETHEREUM_CONTRACT_ADDRESS` is set to some `AstriaMintableERC20`, and `ASTRIA_BRIDGE_WITHDRAWER_ROLLUP_ASSET_DENOMINATION` is set to the rollup asset's denomination as represented on the sequencer. for example, if the asset is represented on the sequencer is `transfer/channel-1/usdc`, that is the rollup asset denomination. the `name/symbol` of the ERC20 contract are not relevant. - also update the build script to write the generated abigen contract bindings to files, this is easier for debugging and unit testing. ## Testing unit tests ## Related Issues closes #924
There was a problem hiding this comment.
can we add a .gitattributes file and mark as generated?
| func (tx *DepositTx) value() *big.Int { return tx.Value } | ||
| func (tx *DepositTx) nonce() uint64 { return 0 } | ||
| func (tx *DepositTx) to() *common.Address { return nil } | ||
| func (tx *DepositTx) to() *common.Address { return tx.To } |
There was a problem hiding this comment.
how were we identifying the correct account to send funds to previously?
There was a problem hiding this comment.
using the From field, but i felt that was confusing, and now we need to set the From field to the bridge "account"
grpc/execution/server.go
Outdated
| if cfg.Erc20Asset == nil && nativeBridgeSeen { | ||
| return nil, errors.New("only one native bridge address is allowed") | ||
| } | ||
| if cfg.Erc20Asset != nil && !nativeBridgeSeen { | ||
| if cfg.Erc20Asset == nil && !nativeBridgeSeen { | ||
| nativeBridgeSeen = true | ||
| } |
There was a problem hiding this comment.
I know I wrote this but maybe a slightly cleaner if we combine?
if cfg.Erc20Asset == nil {
if nativeBridgeSeen {
return nil, errors.New("only one native bridge address is allowed")
}
nativeBridgeSeen = true
}| } | ||
|
|
||
| if cfg.Erc20Asset != nil && bc.Config().AstriaBridgeSenderAddress == (common.Address{}) { | ||
| return nil, errors.New("astria bridge sender address must be set for bridged ERC20 assets") |
There was a problem hiding this comment.
Noted further down, but we should probably use string.
There was a problem hiding this comment.
AstriaBridgeSenderAddress is an evm address address (the fake address mints are sent from) so can leave this
| AstriaCelestiaInitialHeight uint64 `json:"astriaCelestiaInitialHeight"` | ||
| AstriaCelestiaHeightVariance uint64 `json:"astriaCelestiaHeightVariance,omitempty"` | ||
| AstriaBridgeAddressConfigs []AstriaBridgeAddressConfig `json:"astriaBridgeAddresses,omitempty"` | ||
| AstriaBridgeSenderAddress common.Address `json:"astriaBridgeSenderAddress,omitempty"` |
There was a problem hiding this comment.
We should use a bech32m encoded string here, given that we marked the bytes as deprecated.
Does this have any implications on the contract?
There was a problem hiding this comment.
same as above, this is actually supposed to be an evm address, it's not an astria address
There was a problem hiding this comment.
i updated the contracts for bech32 also btw
3d160b2 is the last commit before the infamous squash + merge of geth into astria-geth The commit messages below are left unchanged for now so that they can be cleaned up later. Feature/grpc execution api (#1) * add buf config and generated grpc code * poc e2e grpc communication * comment out panicking code * logging help * now reads cli args. now stops grpc server on shutdown. * add mutex to GRPCServerHandler update readme containerize w/ github action to build and push to ghcr (#3) fix gh action syntax (#4) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax build and push manually (#5) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually Feature/containerize (#6) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually * correct multi line update SubmitTransaction to send tx to metro ethclient: ensure returned subscription is nil on error (#26976) core/state, trie: remove Try prefix in Trie accessors (#26975) This change renames StateTrie methods to remove the Try* prefix. We added the Trie methods with prefix 'Try' a long time ago, working around the problem that most existing methods of Trie did not return the database error. This weird naming convention has persisted until now. Co-authored-by: Gary Rong <garyrong0905@gmail.com> metrics/librato: ensure resp.body closed (#26969) This change ensures that we call Close on a http response body, in various places in the source code (mostly tests) core/vm: use atomic.Bool (#26951) Make use of new atomic types --------- Co-authored-by: Felix Lange <fjl@twurst.com> Co-authored-by: Martin Holst Swende <martin@swende.se> core/bloombits: use atomic type (#26993) core/state: use atomic.Bool (#26992) graphql: fix data races (#26965) Fixes multiple data races caused by the fact that resolving fields are done concurrently by the graphql library. It also enforces caching at the stateobject level for account fields. eth/tracers/native: prevent panic for LOG edge-cases (#26848) This PR fixes OOM panic in the callTracer as well as panicing on opcode validation errors (e.g. stack underflow) in callTracer and prestateTracer. Co-authored-by: Martin Holst Swende <martin@swende.se> internal/debug: add log.logfmt flag to set logging to use logfmt (#26970) docs: update outdated DeriveSha docs comment (#26968) add localnet genesis update metro-transactions dep Adding features to mempool to support our pre-ordered txs (#2) * Adding features to mempool to support our pre-ordered txs * Add framing for gRPC to execute blocks * Remove public engine API call * Fix circular dependencies * Updated to use new Init, and fill out starting attributes * Add clear astriaordered, cleanup * readme fix * add bash and jq to final docker image * make txpool interface * no more panics, update DoBlock to also update state + store block * cleanup * set post-merge at genesis * cleanup * doc update * remove txpool interface changes * cleanup * cleanup * build and push images wih tags defined by git tags * build for multiple architectures. use docker-metadata action for semver * add push: true * only build arm for git tags/releases --------- Co-authored-by: Jesse Snyder <jessetsnyder@gmail.com> Co-authored-by: elizabeth <elizabethjbinks@gmail.com> tag image with latest for builds from astria branch (#8) rename state_root to block_hash use FROM --platform=$BUILDPLATFORM to build arm images correctly (#9) use v4 of build and push action (#10) * use FROM --platform=$BUILDPLATFORM to build arm images correctly * use v4 of docker build and push fix arm builds. only build arm for tags and merges to default branch. (#12) * fix arm builds. only build arm for tags and merges to default branch. * fix gh action function syntax * more correct comment * build for semver tags Features and fixes needed for contract deployment test (#13) * add and remove tx from geth mempool so forge can deploy a contract * pass metro addr and port by flag * fixes from pr feedback * formatting implement FinalizeBlock gRPC call bump metro-transactions dep Update Protos (#16) * uses new protos * remove old protos update deps update deps no more unknown/unknown image (#19) * no more unknown/unknown image * hardcode condition Changing from prev_state_root to prev_block_hash remove metro integrate submission to sequencer log updates use env vars for chain id/tendermint endpoint rename to cometbft Make the environment variables actually work cleaner simple logging change removed sleep before getPayload by removing goroutine in buildPayload removed unneeded comment removed for loop from buildPayload Remove direct sequencer submission cleanup go.mod Migrate to the v1alpha1 API Missed pieces set genesis block as head/safe/final remove all mentions of metro Initial implementation of Execution v1alpha2 api Integrate updates remove need for consensus api Updates small updates Update grpc/execution/server.go Co-authored-by: noot <36753753+noot@users.noreply.github.com> logging remove unused dependency Mark the chain 'finalized' on startup updates txpool fixes, remove v1alpha1, use forkchoice some cleanup formatting and such cleanup think it's good add new fields to base example genesis Update gh action for release branch Add timestamp to block generated from header Add missing parent hash chore: add some metrics specifically around astria tx execution small refactor fix feat: everything needed for genesis fix review + metrics update to prod pushed buf fix after grpc update switch to new execution apis package feat: support new API utilizing rollup data update to latest proto update docker to login implement DepositTx type and handle in state transition and execute_block cleanup fixes to get deposits working, update genesis.json cleanup cleanup exit node if genesis astria fields are unset add bridge address and asset IDs to genesis and check during execution don't allow deposit or blob txs in sequenced data minimum changes required for fork (#2) Updates the codeowners and sets a new package repo for `astria-geth` repo. Once this is merged, I can push the astria specific tags and we will get built images for old tags on this repo. feat: update protos, config for fees, updated bridging (#1) Allow setting eip 1559 fee params (#3) Adds a per block height config to set some EIP1559 fee params (elasticity and denominator) + adds a min base fee parameter. collect the base fee instead of burning it (#5) EIP-1559 burns the base fee. This doesn't make sense for rollups. The set fee recipient should collect it. Chore: Add forkdiff gh-page (#14) we need a static webpage to show changes made to astria-geth fork, this should be used both internally and externally. using a [forkdiff](https://github.com/protolambda/forkdiff) tool to create a static webpage. add a fork.yaml file structs the changes view and define the commits to compare with pages.yaml workflow deploys to gh-pages Currently deploying on PR for testing. feat: remove txs which do not end up in a block out of the mempool (#15) When the txs we receive from `ExecuteBlocks` call fail to end up in a block, we keep them lying around the geth mempool but clear it from the astria mempool. This PR attempts to remove such txs from the geth mempool. chore: make server logs less noisy (#12) Moves the initial request logs to debug logs, reduces the amount of information printed, and ensures okay formatting. Logs from Geth were very messy, block hashes were messy bytes, and all the information from each request was logged out unnecessarily. fix: continue the tx validation loop if assetId length check fails (#18) Currently, we check if the length of the assetId sent by the rollup is of 32 bytes. If the check fails, we still continue executing the code which will lead to a panic as in the subsequent we try to index the bytes. The fix would be to ignore this tx when the validation fails fix: Fix tests which were failing (#16) This PR fixes all the failing tests in the astria-geth repo apart from the [`TestReimportMirroredState` ](https://github.com/astriaorg/astria-geth/blob/f5a95fe13d581ae1ec67caeaae6efe5338399a3e/consensus/clique/clique_test.go#L44) (More details at the end) The main reasons for the tests failing were: 1. #5 which transfers the basefee to the fee recipient rather than burning it. This caused all the tests which expect a certain state root to fail since they assume that the basefee would be burnt. It also failed tests which check for the balance of the fee recipient which fails because we also have to account for the base fee. To fix them, we replaced the tests with the expected state root and updated the tests with the expected balance of the fee recipient. 2. Picking txs from the `AstriaOrdered` rather than from the geth mempool. Lot of tests place the txs in the Geth mempool and they end up failing as we do not pick txx from their. To fix this, we had to add these txs to the `AstriaOrdered` mempool instead This PR also adds a github action to run the tests. `TestReimportMirroredState` is very tricky to fix since the fee recipient while building the block and while verifying the block before inserting onchain is different. This is because while verifying the block, we pick the fee recipient from the consensus engine's author which in this case is the signer of the block. It's tricker to fix it and we have commented it out for now. chore: migrate to depot to fix builds (#23) buildjet has not been working on this repo, and their customer support has been non responsive. feat: Add tests for execution grpc server and astria configs (#17) This PR adds the following: 1. Tests for astria execution grpc server 2. Tests for astria config 3. Abstraction of astria validation logic and unit tests for them. feat!: store celestia height updates (#22) Updates geth to work with proto changes here: https://github.com/astriaorg/astria/pull/1121/files Adds storage of the celestia height into the DB, so we don't resync celestia data already read on restart. ci: update the test ci to run build/ci.go (#27) Previously, the test ci was running `go test -short ./...`. Instead run the build/ci.go to better test on the ci implement `AstriaMintableERC20`, update deposit tx to support ERC20 mints (#20) - implement `AstriaMintableERC20.sol`, allows an immutable address `bridge` to mint or burn - this address should be set at genesis and the sender of `DepositTx`s is set to this address - `DepositTx` was updated to include `to` and `data` which are set for erc20 mints (later on burns), `to` is set to the erc20 address of the `AstriaMintableERC20` and `data` is the calldata to call the mint function - genesis config fields for erc20s must be set to allow bridging erc20s from the sequencer. namely the erc20 contract address must be set, meaning the token must already be deployed testing: - i tested this manually end-to-end using the instructions in `contracts/README.md`. closes #9
Squash 916d6a4 to 3d160b2 3d160b2 is the last commit before the infamous squash + merge of geth into astria-geth The commit messages below are left unchanged for now so that they can be cleaned up later. Feature/grpc execution api (#1) * add buf config and generated grpc code * poc e2e grpc communication * comment out panicking code * logging help * now reads cli args. now stops grpc server on shutdown. * add mutex to GRPCServerHandler update readme containerize w/ github action to build and push to ghcr (#3) fix gh action syntax (#4) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax build and push manually (#5) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually Feature/containerize (#6) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually * correct multi line update SubmitTransaction to send tx to metro ethclient: ensure returned subscription is nil on error (#26976) core/state, trie: remove Try prefix in Trie accessors (#26975) This change renames StateTrie methods to remove the Try* prefix. We added the Trie methods with prefix 'Try' a long time ago, working around the problem that most existing methods of Trie did not return the database error. This weird naming convention has persisted until now. Co-authored-by: Gary Rong <garyrong0905@gmail.com> metrics/librato: ensure resp.body closed (#26969) This change ensures that we call Close on a http response body, in various places in the source code (mostly tests) core/vm: use atomic.Bool (#26951) Make use of new atomic types --------- Co-authored-by: Felix Lange <fjl@twurst.com> Co-authored-by: Martin Holst Swende <martin@swende.se> core/bloombits: use atomic type (#26993) core/state: use atomic.Bool (#26992) graphql: fix data races (#26965) Fixes multiple data races caused by the fact that resolving fields are done concurrently by the graphql library. It also enforces caching at the stateobject level for account fields. eth/tracers/native: prevent panic for LOG edge-cases (#26848) This PR fixes OOM panic in the callTracer as well as panicing on opcode validation errors (e.g. stack underflow) in callTracer and prestateTracer. Co-authored-by: Martin Holst Swende <martin@swende.se> internal/debug: add log.logfmt flag to set logging to use logfmt (#26970) docs: update outdated DeriveSha docs comment (#26968) add localnet genesis update metro-transactions dep Adding features to mempool to support our pre-ordered txs (#2) * Adding features to mempool to support our pre-ordered txs * Add framing for gRPC to execute blocks * Remove public engine API call * Fix circular dependencies * Updated to use new Init, and fill out starting attributes * Add clear astriaordered, cleanup * readme fix * add bash and jq to final docker image * make txpool interface * no more panics, update DoBlock to also update state + store block * cleanup * set post-merge at genesis * cleanup * doc update * remove txpool interface changes * cleanup * cleanup * build and push images wih tags defined by git tags * build for multiple architectures. use docker-metadata action for semver * add push: true * only build arm for git tags/releases --------- Co-authored-by: Jesse Snyder <jessetsnyder@gmail.com> Co-authored-by: elizabeth <elizabethjbinks@gmail.com> tag image with latest for builds from astria branch (#8) rename state_root to block_hash use FROM --platform=$BUILDPLATFORM to build arm images correctly (#9) use v4 of build and push action (#10) * use FROM --platform=$BUILDPLATFORM to build arm images correctly * use v4 of docker build and push fix arm builds. only build arm for tags and merges to default branch. (#12) * fix arm builds. only build arm for tags and merges to default branch. * fix gh action function syntax * more correct comment * build for semver tags Features and fixes needed for contract deployment test (#13) * add and remove tx from geth mempool so forge can deploy a contract * pass metro addr and port by flag * fixes from pr feedback * formatting implement FinalizeBlock gRPC call bump metro-transactions dep Update Protos (#16) * uses new protos * remove old protos update deps update deps no more unknown/unknown image (#19) * no more unknown/unknown image * hardcode condition Changing from prev_state_root to prev_block_hash remove metro integrate submission to sequencer log updates use env vars for chain id/tendermint endpoint rename to cometbft Make the environment variables actually work cleaner simple logging change removed sleep before getPayload by removing goroutine in buildPayload removed unneeded comment removed for loop from buildPayload Remove direct sequencer submission cleanup go.mod Migrate to the v1alpha1 API Missed pieces set genesis block as head/safe/final remove all mentions of metro Initial implementation of Execution v1alpha2 api Integrate updates remove need for consensus api Updates small updates Update grpc/execution/server.go Co-authored-by: noot <36753753+noot@users.noreply.github.com> logging remove unused dependency Mark the chain 'finalized' on startup updates txpool fixes, remove v1alpha1, use forkchoice some cleanup formatting and such cleanup think it's good add new fields to base example genesis Update gh action for release branch Add timestamp to block generated from header Add missing parent hash chore: add some metrics specifically around astria tx execution small refactor fix feat: everything needed for genesis fix review + metrics update to prod pushed buf fix after grpc update switch to new execution apis package feat: support new API utilizing rollup data update to latest proto update docker to login implement DepositTx type and handle in state transition and execute_block cleanup fixes to get deposits working, update genesis.json cleanup cleanup exit node if genesis astria fields are unset add bridge address and asset IDs to genesis and check during execution don't allow deposit or blob txs in sequenced data minimum changes required for fork (#2) Updates the codeowners and sets a new package repo for `astria-geth` repo. Once this is merged, I can push the astria specific tags and we will get built images for old tags on this repo. feat: update protos, config for fees, updated bridging (#1) Allow setting eip 1559 fee params (#3) Adds a per block height config to set some EIP1559 fee params (elasticity and denominator) + adds a min base fee parameter. collect the base fee instead of burning it (#5) EIP-1559 burns the base fee. This doesn't make sense for rollups. The set fee recipient should collect it. Chore: Add forkdiff gh-page (#14) we need a static webpage to show changes made to astria-geth fork, this should be used both internally and externally. using a [forkdiff](https://github.com/protolambda/forkdiff) tool to create a static webpage. add a fork.yaml file structs the changes view and define the commits to compare with pages.yaml workflow deploys to gh-pages Currently deploying on PR for testing. feat: remove txs which do not end up in a block out of the mempool (#15) When the txs we receive from `ExecuteBlocks` call fail to end up in a block, we keep them lying around the geth mempool but clear it from the astria mempool. This PR attempts to remove such txs from the geth mempool. chore: make server logs less noisy (#12) Moves the initial request logs to debug logs, reduces the amount of information printed, and ensures okay formatting. Logs from Geth were very messy, block hashes were messy bytes, and all the information from each request was logged out unnecessarily. fix: continue the tx validation loop if assetId length check fails (#18) Currently, we check if the length of the assetId sent by the rollup is of 32 bytes. If the check fails, we still continue executing the code which will lead to a panic as in the subsequent we try to index the bytes. The fix would be to ignore this tx when the validation fails fix: Fix tests which were failing (#16) This PR fixes all the failing tests in the astria-geth repo apart from the [`TestReimportMirroredState` ](https://github.com/astriaorg/astria-geth/blob/f5a95fe13d581ae1ec67caeaae6efe5338399a3e/consensus/clique/clique_test.go#L44) (More details at the end) The main reasons for the tests failing were: 1. #5 which transfers the basefee to the fee recipient rather than burning it. This caused all the tests which expect a certain state root to fail since they assume that the basefee would be burnt. It also failed tests which check for the balance of the fee recipient which fails because we also have to account for the base fee. To fix them, we replaced the tests with the expected state root and updated the tests with the expected balance of the fee recipient. 2. Picking txs from the `AstriaOrdered` rather than from the geth mempool. Lot of tests place the txs in the Geth mempool and they end up failing as we do not pick txx from their. To fix this, we had to add these txs to the `AstriaOrdered` mempool instead This PR also adds a github action to run the tests. `TestReimportMirroredState` is very tricky to fix since the fee recipient while building the block and while verifying the block before inserting onchain is different. This is because while verifying the block, we pick the fee recipient from the consensus engine's author which in this case is the signer of the block. It's tricker to fix it and we have commented it out for now. chore: migrate to depot to fix builds (#23) buildjet has not been working on this repo, and their customer support has been non responsive. feat: Add tests for execution grpc server and astria configs (#17) This PR adds the following: 1. Tests for astria execution grpc server 2. Tests for astria config 3. Abstraction of astria validation logic and unit tests for them. feat!: store celestia height updates (#22) Updates geth to work with proto changes here: https://github.com/astriaorg/astria/pull/1121/files Adds storage of the celestia height into the DB, so we don't resync celestia data already read on restart. ci: update the test ci to run build/ci.go (#27) Previously, the test ci was running `go test -short ./...`. Instead run the build/ci.go to better test on the ci implement `AstriaMintableERC20`, update deposit tx to support ERC20 mints (#20) - implement `AstriaMintableERC20.sol`, allows an immutable address `bridge` to mint or burn - this address should be set at genesis and the sender of `DepositTx`s is set to this address - `DepositTx` was updated to include `to` and `data` which are set for erc20 mints (later on burns), `to` is set to the erc20 address of the `AstriaMintableERC20` and `data` is the calldata to call the mint function - genesis config fields for erc20s must be set to allow bridging erc20s from the sequencer. namely the erc20 contract address must be set, meaning the token must already be deployed testing: - i tested this manually end-to-end using the instructions in `contracts/README.md`. closes #9
3d160b2 is the last commit before the infamous squash + merge of geth into astria-geth The commit messages below are left unchanged for now so that they can be cleaned up later. Feature/grpc execution api (#1) * add buf config and generated grpc code * poc e2e grpc communication * comment out panicking code * logging help * now reads cli args. now stops grpc server on shutdown. * add mutex to GRPCServerHandler update readme containerize w/ github action to build and push to ghcr (#3) fix gh action syntax (#4) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax build and push manually (#5) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually Feature/containerize (#6) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually * correct multi line update SubmitTransaction to send tx to metro ethclient: ensure returned subscription is nil on error (#26976) core/state, trie: remove Try prefix in Trie accessors (#26975) This change renames StateTrie methods to remove the Try* prefix. We added the Trie methods with prefix 'Try' a long time ago, working around the problem that most existing methods of Trie did not return the database error. This weird naming convention has persisted until now. Co-authored-by: Gary Rong <garyrong0905@gmail.com> metrics/librato: ensure resp.body closed (#26969) This change ensures that we call Close on a http response body, in various places in the source code (mostly tests) core/vm: use atomic.Bool (#26951) Make use of new atomic types --------- Co-authored-by: Felix Lange <fjl@twurst.com> Co-authored-by: Martin Holst Swende <martin@swende.se> core/bloombits: use atomic type (#26993) core/state: use atomic.Bool (#26992) graphql: fix data races (#26965) Fixes multiple data races caused by the fact that resolving fields are done concurrently by the graphql library. It also enforces caching at the stateobject level for account fields. eth/tracers/native: prevent panic for LOG edge-cases (#26848) This PR fixes OOM panic in the callTracer as well as panicing on opcode validation errors (e.g. stack underflow) in callTracer and prestateTracer. Co-authored-by: Martin Holst Swende <martin@swende.se> internal/debug: add log.logfmt flag to set logging to use logfmt (#26970) docs: update outdated DeriveSha docs comment (#26968) add localnet genesis update metro-transactions dep Adding features to mempool to support our pre-ordered txs (#2) * Adding features to mempool to support our pre-ordered txs * Add framing for gRPC to execute blocks * Remove public engine API call * Fix circular dependencies * Updated to use new Init, and fill out starting attributes * Add clear astriaordered, cleanup * readme fix * add bash and jq to final docker image * make txpool interface * no more panics, update DoBlock to also update state + store block * cleanup * set post-merge at genesis * cleanup * doc update * remove txpool interface changes * cleanup * cleanup * build and push images wih tags defined by git tags * build for multiple architectures. use docker-metadata action for semver * add push: true * only build arm for git tags/releases --------- Co-authored-by: Jesse Snyder <jessetsnyder@gmail.com> Co-authored-by: elizabeth <elizabethjbinks@gmail.com> tag image with latest for builds from astria branch (#8) rename state_root to block_hash use FROM --platform=$BUILDPLATFORM to build arm images correctly (#9) use v4 of build and push action (#10) * use FROM --platform=$BUILDPLATFORM to build arm images correctly * use v4 of docker build and push fix arm builds. only build arm for tags and merges to default branch. (#12) * fix arm builds. only build arm for tags and merges to default branch. * fix gh action function syntax * more correct comment * build for semver tags Features and fixes needed for contract deployment test (#13) * add and remove tx from geth mempool so forge can deploy a contract * pass metro addr and port by flag * fixes from pr feedback * formatting implement FinalizeBlock gRPC call bump metro-transactions dep Update Protos (#16) * uses new protos * remove old protos update deps update deps no more unknown/unknown image (#19) * no more unknown/unknown image * hardcode condition Changing from prev_state_root to prev_block_hash remove metro integrate submission to sequencer log updates use env vars for chain id/tendermint endpoint rename to cometbft Make the environment variables actually work cleaner simple logging change removed sleep before getPayload by removing goroutine in buildPayload removed unneeded comment removed for loop from buildPayload Remove direct sequencer submission cleanup go.mod Migrate to the v1alpha1 API Missed pieces set genesis block as head/safe/final remove all mentions of metro Initial implementation of Execution v1alpha2 api Integrate updates remove need for consensus api Updates small updates Update grpc/execution/server.go Co-authored-by: noot <36753753+noot@users.noreply.github.com> logging remove unused dependency Mark the chain 'finalized' on startup updates txpool fixes, remove v1alpha1, use forkchoice some cleanup formatting and such cleanup think it's good add new fields to base example genesis Update gh action for release branch Add timestamp to block generated from header Add missing parent hash chore: add some metrics specifically around astria tx execution small refactor fix feat: everything needed for genesis fix review + metrics update to prod pushed buf fix after grpc update switch to new execution apis package feat: support new API utilizing rollup data update to latest proto update docker to login implement DepositTx type and handle in state transition and execute_block cleanup fixes to get deposits working, update genesis.json cleanup cleanup exit node if genesis astria fields are unset add bridge address and asset IDs to genesis and check during execution don't allow deposit or blob txs in sequenced data minimum changes required for fork (#2) Updates the codeowners and sets a new package repo for `astria-geth` repo. Once this is merged, I can push the astria specific tags and we will get built images for old tags on this repo. feat: update protos, config for fees, updated bridging (#1) Allow setting eip 1559 fee params (#3) Adds a per block height config to set some EIP1559 fee params (elasticity and denominator) + adds a min base fee parameter. collect the base fee instead of burning it (#5) EIP-1559 burns the base fee. This doesn't make sense for rollups. The set fee recipient should collect it. Chore: Add forkdiff gh-page (#14) we need a static webpage to show changes made to astria-geth fork, this should be used both internally and externally. using a [forkdiff](https://github.com/protolambda/forkdiff) tool to create a static webpage. add a fork.yaml file structs the changes view and define the commits to compare with pages.yaml workflow deploys to gh-pages Currently deploying on PR for testing. feat: remove txs which do not end up in a block out of the mempool (#15) When the txs we receive from `ExecuteBlocks` call fail to end up in a block, we keep them lying around the geth mempool but clear it from the astria mempool. This PR attempts to remove such txs from the geth mempool. chore: make server logs less noisy (#12) Moves the initial request logs to debug logs, reduces the amount of information printed, and ensures okay formatting. Logs from Geth were very messy, block hashes were messy bytes, and all the information from each request was logged out unnecessarily. fix: continue the tx validation loop if assetId length check fails (#18) Currently, we check if the length of the assetId sent by the rollup is of 32 bytes. If the check fails, we still continue executing the code which will lead to a panic as in the subsequent we try to index the bytes. The fix would be to ignore this tx when the validation fails fix: Fix tests which were failing (#16) This PR fixes all the failing tests in the astria-geth repo apart from the [`TestReimportMirroredState` ](https://github.com/astriaorg/astria-geth/blob/f5a95fe13d581ae1ec67caeaae6efe5338399a3e/consensus/clique/clique_test.go#L44) (More details at the end) The main reasons for the tests failing were: 1. #5 which transfers the basefee to the fee recipient rather than burning it. This caused all the tests which expect a certain state root to fail since they assume that the basefee would be burnt. It also failed tests which check for the balance of the fee recipient which fails because we also have to account for the base fee. To fix them, we replaced the tests with the expected state root and updated the tests with the expected balance of the fee recipient. 2. Picking txs from the `AstriaOrdered` rather than from the geth mempool. Lot of tests place the txs in the Geth mempool and they end up failing as we do not pick txx from their. To fix this, we had to add these txs to the `AstriaOrdered` mempool instead This PR also adds a github action to run the tests. `TestReimportMirroredState` is very tricky to fix since the fee recipient while building the block and while verifying the block before inserting onchain is different. This is because while verifying the block, we pick the fee recipient from the consensus engine's author which in this case is the signer of the block. It's tricker to fix it and we have commented it out for now. chore: migrate to depot to fix builds (#23) buildjet has not been working on this repo, and their customer support has been non responsive. feat: Add tests for execution grpc server and astria configs (#17) This PR adds the following: 1. Tests for astria execution grpc server 2. Tests for astria config 3. Abstraction of astria validation logic and unit tests for them. feat!: store celestia height updates (#22) Updates geth to work with proto changes here: https://github.com/astriaorg/astria/pull/1121/files Adds storage of the celestia height into the DB, so we don't resync celestia data already read on restart. ci: update the test ci to run build/ci.go (#27) Previously, the test ci was running `go test -short ./...`. Instead run the build/ci.go to better test on the ci implement `AstriaMintableERC20`, update deposit tx to support ERC20 mints (#20) - implement `AstriaMintableERC20.sol`, allows an immutable address `bridge` to mint or burn - this address should be set at genesis and the sender of `DepositTx`s is set to this address - `DepositTx` was updated to include `to` and `data` which are set for erc20 mints (later on burns), `to` is set to the erc20 address of the `AstriaMintableERC20` and `data` is the calldata to call the mint function - genesis config fields for erc20s must be set to allow bridging erc20s from the sequencer. namely the erc20 contract address must be set, meaning the token must already be deployed testing: - i tested this manually end-to-end using the instructions in `contracts/README.md`. closes #9
rebase on top of geth v1.13.6 Squash 916d6a4 to 3d160b2 3d160b2 is the last commit before the infamous squash + merge of geth into astria-geth The commit messages below are left unchanged for now so that they can be cleaned up later. Feature/grpc execution api (#1) * add buf config and generated grpc code * poc e2e grpc communication * comment out panicking code * logging help * now reads cli args. now stops grpc server on shutdown. * add mutex to GRPCServerHandler update readme containerize w/ github action to build and push to ghcr (#3) fix gh action syntax (#4) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax build and push manually (#5) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually Feature/containerize (#6) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually * correct multi line update SubmitTransaction to send tx to metro ethclient: ensure returned subscription is nil on error (#26976) core/state, trie: remove Try prefix in Trie accessors (#26975) This change renames StateTrie methods to remove the Try* prefix. We added the Trie methods with prefix 'Try' a long time ago, working around the problem that most existing methods of Trie did not return the database error. This weird naming convention has persisted until now. Co-authored-by: Gary Rong <garyrong0905@gmail.com> metrics/librato: ensure resp.body closed (#26969) This change ensures that we call Close on a http response body, in various places in the source code (mostly tests) core/vm: use atomic.Bool (#26951) Make use of new atomic types --------- Co-authored-by: Felix Lange <fjl@twurst.com> Co-authored-by: Martin Holst Swende <martin@swende.se> core/bloombits: use atomic type (#26993) core/state: use atomic.Bool (#26992) graphql: fix data races (#26965) Fixes multiple data races caused by the fact that resolving fields are done concurrently by the graphql library. It also enforces caching at the stateobject level for account fields. eth/tracers/native: prevent panic for LOG edge-cases (#26848) This PR fixes OOM panic in the callTracer as well as panicing on opcode validation errors (e.g. stack underflow) in callTracer and prestateTracer. Co-authored-by: Martin Holst Swende <martin@swende.se> internal/debug: add log.logfmt flag to set logging to use logfmt (#26970) docs: update outdated DeriveSha docs comment (#26968) add localnet genesis update metro-transactions dep Adding features to mempool to support our pre-ordered txs (#2) * Adding features to mempool to support our pre-ordered txs * Add framing for gRPC to execute blocks * Remove public engine API call * Fix circular dependencies * Updated to use new Init, and fill out starting attributes * Add clear astriaordered, cleanup * readme fix * add bash and jq to final docker image * make txpool interface * no more panics, update DoBlock to also update state + store block * cleanup * set post-merge at genesis * cleanup * doc update * remove txpool interface changes * cleanup * cleanup * build and push images wih tags defined by git tags * build for multiple architectures. use docker-metadata action for semver * add push: true * only build arm for git tags/releases --------- Co-authored-by: Jesse Snyder <jessetsnyder@gmail.com> Co-authored-by: elizabeth <elizabethjbinks@gmail.com> tag image with latest for builds from astria branch (#8) rename state_root to block_hash use FROM --platform=$BUILDPLATFORM to build arm images correctly (#9) use v4 of build and push action (#10) * use FROM --platform=$BUILDPLATFORM to build arm images correctly * use v4 of docker build and push fix arm builds. only build arm for tags and merges to default branch. (#12) * fix arm builds. only build arm for tags and merges to default branch. * fix gh action function syntax * more correct comment * build for semver tags Features and fixes needed for contract deployment test (#13) * add and remove tx from geth mempool so forge can deploy a contract * pass metro addr and port by flag * fixes from pr feedback * formatting implement FinalizeBlock gRPC call bump metro-transactions dep Update Protos (#16) * uses new protos * remove old protos update deps update deps no more unknown/unknown image (#19) * no more unknown/unknown image * hardcode condition Changing from prev_state_root to prev_block_hash remove metro integrate submission to sequencer log updates use env vars for chain id/tendermint endpoint rename to cometbft Make the environment variables actually work cleaner simple logging change removed sleep before getPayload by removing goroutine in buildPayload removed unneeded comment removed for loop from buildPayload Remove direct sequencer submission cleanup go.mod Migrate to the v1alpha1 API Missed pieces set genesis block as head/safe/final remove all mentions of metro Initial implementation of Execution v1alpha2 api Integrate updates remove need for consensus api Updates small updates Update grpc/execution/server.go Co-authored-by: noot <36753753+noot@users.noreply.github.com> logging remove unused dependency Mark the chain 'finalized' on startup updates txpool fixes, remove v1alpha1, use forkchoice some cleanup formatting and such cleanup think it's good add new fields to base example genesis Update gh action for release branch Add timestamp to block generated from header Add missing parent hash chore: add some metrics specifically around astria tx execution small refactor fix feat: everything needed for genesis fix review + metrics update to prod pushed buf fix after grpc update switch to new execution apis package feat: support new API utilizing rollup data update to latest proto update docker to login implement DepositTx type and handle in state transition and execute_block cleanup fixes to get deposits working, update genesis.json cleanup cleanup exit node if genesis astria fields are unset add bridge address and asset IDs to genesis and check during execution don't allow deposit or blob txs in sequenced data minimum changes required for fork (#2) Updates the codeowners and sets a new package repo for `astria-geth` repo. Once this is merged, I can push the astria specific tags and we will get built images for old tags on this repo. feat: update protos, config for fees, updated bridging (#1) Allow setting eip 1559 fee params (#3) Adds a per block height config to set some EIP1559 fee params (elasticity and denominator) + adds a min base fee parameter. collect the base fee instead of burning it (#5) EIP-1559 burns the base fee. This doesn't make sense for rollups. The set fee recipient should collect it. Chore: Add forkdiff gh-page (#14) we need a static webpage to show changes made to astria-geth fork, this should be used both internally and externally. using a [forkdiff](https://github.com/protolambda/forkdiff) tool to create a static webpage. add a fork.yaml file structs the changes view and define the commits to compare with pages.yaml workflow deploys to gh-pages Currently deploying on PR for testing. feat: remove txs which do not end up in a block out of the mempool (#15) When the txs we receive from `ExecuteBlocks` call fail to end up in a block, we keep them lying around the geth mempool but clear it from the astria mempool. This PR attempts to remove such txs from the geth mempool. chore: make server logs less noisy (#12) Moves the initial request logs to debug logs, reduces the amount of information printed, and ensures okay formatting. Logs from Geth were very messy, block hashes were messy bytes, and all the information from each request was logged out unnecessarily. fix: continue the tx validation loop if assetId length check fails (#18) Currently, we check if the length of the assetId sent by the rollup is of 32 bytes. If the check fails, we still continue executing the code which will lead to a panic as in the subsequent we try to index the bytes. The fix would be to ignore this tx when the validation fails fix: Fix tests which were failing (#16) This PR fixes all the failing tests in the astria-geth repo apart from the [`TestReimportMirroredState` ](https://github.com/astriaorg/astria-geth/blob/f5a95fe13d581ae1ec67caeaae6efe5338399a3e/consensus/clique/clique_test.go#L44) (More details at the end) The main reasons for the tests failing were: 1. #5 which transfers the basefee to the fee recipient rather than burning it. This caused all the tests which expect a certain state root to fail since they assume that the basefee would be burnt. It also failed tests which check for the balance of the fee recipient which fails because we also have to account for the base fee. To fix them, we replaced the tests with the expected state root and updated the tests with the expected balance of the fee recipient. 2. Picking txs from the `AstriaOrdered` rather than from the geth mempool. Lot of tests place the txs in the Geth mempool and they end up failing as we do not pick txx from their. To fix this, we had to add these txs to the `AstriaOrdered` mempool instead This PR also adds a github action to run the tests. `TestReimportMirroredState` is very tricky to fix since the fee recipient while building the block and while verifying the block before inserting onchain is different. This is because while verifying the block, we pick the fee recipient from the consensus engine's author which in this case is the signer of the block. It's tricker to fix it and we have commented it out for now. chore: migrate to depot to fix builds (#23) buildjet has not been working on this repo, and their customer support has been non responsive. feat: Add tests for execution grpc server and astria configs (#17) This PR adds the following: 1. Tests for astria execution grpc server 2. Tests for astria config 3. Abstraction of astria validation logic and unit tests for them. feat!: store celestia height updates (#22) Updates geth to work with proto changes here: https://github.com/astriaorg/astria/pull/1121/files Adds storage of the celestia height into the DB, so we don't resync celestia data already read on restart. ci: update the test ci to run build/ci.go (#27) Previously, the test ci was running `go test -short ./...`. Instead run the build/ci.go to better test on the ci implement `AstriaMintableERC20`, update deposit tx to support ERC20 mints (#20) - implement `AstriaMintableERC20.sol`, allows an immutable address `bridge` to mint or burn - this address should be set at genesis and the sender of `DepositTx`s is set to this address - `DepositTx` was updated to include `to` and `data` which are set for erc20 mints (later on burns), `to` is set to the erc20 address of the `AstriaMintableERC20` and `data` is the calldata to call the mint function - genesis config fields for erc20s must be set to allow bridging erc20s from the sequencer. namely the erc20 contract address must be set, meaning the token must already be deployed testing: - i tested this manually end-to-end using the instructions in `contracts/README.md`. closes #9
rebase on top of geth v1.13.6 Squash 916d6a4 to 3d160b2 3d160b2 is the last commit before the infamous squash + merge of geth into astria-geth The commit messages below are left unchanged for now so that they can be cleaned up later. Feature/grpc execution api (#1) * add buf config and generated grpc code * poc e2e grpc communication * comment out panicking code * logging help * now reads cli args. now stops grpc server on shutdown. * add mutex to GRPCServerHandler update readme containerize w/ github action to build and push to ghcr (#3) fix gh action syntax (#4) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax build and push manually (#5) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually Feature/containerize (#6) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually * correct multi line update SubmitTransaction to send tx to metro ethclient: ensure returned subscription is nil on error (#26976) core/state, trie: remove Try prefix in Trie accessors (#26975) This change renames StateTrie methods to remove the Try* prefix. We added the Trie methods with prefix 'Try' a long time ago, working around the problem that most existing methods of Trie did not return the database error. This weird naming convention has persisted until now. Co-authored-by: Gary Rong <garyrong0905@gmail.com> metrics/librato: ensure resp.body closed (#26969) This change ensures that we call Close on a http response body, in various places in the source code (mostly tests) core/vm: use atomic.Bool (#26951) Make use of new atomic types --------- Co-authored-by: Felix Lange <fjl@twurst.com> Co-authored-by: Martin Holst Swende <martin@swende.se> core/bloombits: use atomic type (#26993) core/state: use atomic.Bool (#26992) graphql: fix data races (#26965) Fixes multiple data races caused by the fact that resolving fields are done concurrently by the graphql library. It also enforces caching at the stateobject level for account fields. eth/tracers/native: prevent panic for LOG edge-cases (#26848) This PR fixes OOM panic in the callTracer as well as panicing on opcode validation errors (e.g. stack underflow) in callTracer and prestateTracer. Co-authored-by: Martin Holst Swende <martin@swende.se> internal/debug: add log.logfmt flag to set logging to use logfmt (#26970) docs: update outdated DeriveSha docs comment (#26968) add localnet genesis update metro-transactions dep Adding features to mempool to support our pre-ordered txs (#2) * Adding features to mempool to support our pre-ordered txs * Add framing for gRPC to execute blocks * Remove public engine API call * Fix circular dependencies * Updated to use new Init, and fill out starting attributes * Add clear astriaordered, cleanup * readme fix * add bash and jq to final docker image * make txpool interface * no more panics, update DoBlock to also update state + store block * cleanup * set post-merge at genesis * cleanup * doc update * remove txpool interface changes * cleanup * cleanup * build and push images wih tags defined by git tags * build for multiple architectures. use docker-metadata action for semver * add push: true * only build arm for git tags/releases --------- Co-authored-by: Jesse Snyder <jessetsnyder@gmail.com> Co-authored-by: elizabeth <elizabethjbinks@gmail.com> tag image with latest for builds from astria branch (#8) rename state_root to block_hash use FROM --platform=$BUILDPLATFORM to build arm images correctly (#9) use v4 of build and push action (#10) * use FROM --platform=$BUILDPLATFORM to build arm images correctly * use v4 of docker build and push fix arm builds. only build arm for tags and merges to default branch. (#12) * fix arm builds. only build arm for tags and merges to default branch. * fix gh action function syntax * more correct comment * build for semver tags Features and fixes needed for contract deployment test (#13) * add and remove tx from geth mempool so forge can deploy a contract * pass metro addr and port by flag * fixes from pr feedback * formatting implement FinalizeBlock gRPC call bump metro-transactions dep Update Protos (#16) * uses new protos * remove old protos update deps update deps no more unknown/unknown image (#19) * no more unknown/unknown image * hardcode condition Changing from prev_state_root to prev_block_hash remove metro integrate submission to sequencer log updates use env vars for chain id/tendermint endpoint rename to cometbft Make the environment variables actually work cleaner simple logging change removed sleep before getPayload by removing goroutine in buildPayload removed unneeded comment removed for loop from buildPayload Remove direct sequencer submission cleanup go.mod Migrate to the v1alpha1 API Missed pieces set genesis block as head/safe/final remove all mentions of metro Initial implementation of Execution v1alpha2 api Integrate updates remove need for consensus api Updates small updates Update grpc/execution/server.go Co-authored-by: noot <36753753+noot@users.noreply.github.com> logging remove unused dependency Mark the chain 'finalized' on startup updates txpool fixes, remove v1alpha1, use forkchoice some cleanup formatting and such cleanup think it's good add new fields to base example genesis Update gh action for release branch Add timestamp to block generated from header Add missing parent hash chore: add some metrics specifically around astria tx execution small refactor fix feat: everything needed for genesis fix review + metrics update to prod pushed buf fix after grpc update switch to new execution apis package feat: support new API utilizing rollup data update to latest proto update docker to login implement DepositTx type and handle in state transition and execute_block cleanup fixes to get deposits working, update genesis.json cleanup cleanup exit node if genesis astria fields are unset add bridge address and asset IDs to genesis and check during execution don't allow deposit or blob txs in sequenced data minimum changes required for fork (#2) Updates the codeowners and sets a new package repo for `astria-geth` repo. Once this is merged, I can push the astria specific tags and we will get built images for old tags on this repo. feat: update protos, config for fees, updated bridging (#1) Allow setting eip 1559 fee params (#3) Adds a per block height config to set some EIP1559 fee params (elasticity and denominator) + adds a min base fee parameter. collect the base fee instead of burning it (#5) EIP-1559 burns the base fee. This doesn't make sense for rollups. The set fee recipient should collect it. Chore: Add forkdiff gh-page (#14) we need a static webpage to show changes made to astria-geth fork, this should be used both internally and externally. using a [forkdiff](https://github.com/protolambda/forkdiff) tool to create a static webpage. add a fork.yaml file structs the changes view and define the commits to compare with pages.yaml workflow deploys to gh-pages Currently deploying on PR for testing. feat: remove txs which do not end up in a block out of the mempool (#15) When the txs we receive from `ExecuteBlocks` call fail to end up in a block, we keep them lying around the geth mempool but clear it from the astria mempool. This PR attempts to remove such txs from the geth mempool. chore: make server logs less noisy (#12) Moves the initial request logs to debug logs, reduces the amount of information printed, and ensures okay formatting. Logs from Geth were very messy, block hashes were messy bytes, and all the information from each request was logged out unnecessarily. fix: continue the tx validation loop if assetId length check fails (#18) Currently, we check if the length of the assetId sent by the rollup is of 32 bytes. If the check fails, we still continue executing the code which will lead to a panic as in the subsequent we try to index the bytes. The fix would be to ignore this tx when the validation fails fix: Fix tests which were failing (#16) This PR fixes all the failing tests in the astria-geth repo apart from the [`TestReimportMirroredState` ](https://github.com/astriaorg/astria-geth/blob/f5a95fe13d581ae1ec67caeaae6efe5338399a3e/consensus/clique/clique_test.go#L44) (More details at the end) The main reasons for the tests failing were: 1. #5 which transfers the basefee to the fee recipient rather than burning it. This caused all the tests which expect a certain state root to fail since they assume that the basefee would be burnt. It also failed tests which check for the balance of the fee recipient which fails because we also have to account for the base fee. To fix them, we replaced the tests with the expected state root and updated the tests with the expected balance of the fee recipient. 2. Picking txs from the `AstriaOrdered` rather than from the geth mempool. Lot of tests place the txs in the Geth mempool and they end up failing as we do not pick txx from their. To fix this, we had to add these txs to the `AstriaOrdered` mempool instead This PR also adds a github action to run the tests. `TestReimportMirroredState` is very tricky to fix since the fee recipient while building the block and while verifying the block before inserting onchain is different. This is because while verifying the block, we pick the fee recipient from the consensus engine's author which in this case is the signer of the block. It's tricker to fix it and we have commented it out for now. chore: migrate to depot to fix builds (#23) buildjet has not been working on this repo, and their customer support has been non responsive. feat: Add tests for execution grpc server and astria configs (#17) This PR adds the following: 1. Tests for astria execution grpc server 2. Tests for astria config 3. Abstraction of astria validation logic and unit tests for them. feat!: store celestia height updates (#22) Updates geth to work with proto changes here: https://github.com/astriaorg/astria/pull/1121/files Adds storage of the celestia height into the DB, so we don't resync celestia data already read on restart. ci: update the test ci to run build/ci.go (#27) Previously, the test ci was running `go test -short ./...`. Instead run the build/ci.go to better test on the ci implement `AstriaMintableERC20`, update deposit tx to support ERC20 mints (#20) - implement `AstriaMintableERC20.sol`, allows an immutable address `bridge` to mint or burn - this address should be set at genesis and the sender of `DepositTx`s is set to this address - `DepositTx` was updated to include `to` and `data` which are set for erc20 mints (later on burns), `to` is set to the erc20 address of the `AstriaMintableERC20` and `data` is the calldata to call the mint function - genesis config fields for erc20s must be set to allow bridging erc20s from the sequencer. namely the erc20 contract address must be set, meaning the token must already be deployed testing: - i tested this manually end-to-end using the instructions in `contracts/README.md`. closes #9
rebase on top of geth v1.13.6 Squash 916d6a4 to 3d160b2 3d160b2 is the last commit before the infamous squash + merge of geth into astria-geth The commit messages below are left unchanged for now so that they can be cleaned up later. Feature/grpc execution api (#1) * add buf config and generated grpc code * poc e2e grpc communication * comment out panicking code * logging help * now reads cli args. now stops grpc server on shutdown. * add mutex to GRPCServerHandler update readme containerize w/ github action to build and push to ghcr (#3) fix gh action syntax (#4) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax build and push manually (#5) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually Feature/containerize (#6) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually * correct multi line update SubmitTransaction to send tx to metro ethclient: ensure returned subscription is nil on error (#26976) core/state, trie: remove Try prefix in Trie accessors (#26975) This change renames StateTrie methods to remove the Try* prefix. We added the Trie methods with prefix 'Try' a long time ago, working around the problem that most existing methods of Trie did not return the database error. This weird naming convention has persisted until now. Co-authored-by: Gary Rong <garyrong0905@gmail.com> metrics/librato: ensure resp.body closed (#26969) This change ensures that we call Close on a http response body, in various places in the source code (mostly tests) core/vm: use atomic.Bool (#26951) Make use of new atomic types --------- Co-authored-by: Felix Lange <fjl@twurst.com> Co-authored-by: Martin Holst Swende <martin@swende.se> core/bloombits: use atomic type (#26993) core/state: use atomic.Bool (#26992) graphql: fix data races (#26965) Fixes multiple data races caused by the fact that resolving fields are done concurrently by the graphql library. It also enforces caching at the stateobject level for account fields. eth/tracers/native: prevent panic for LOG edge-cases (#26848) This PR fixes OOM panic in the callTracer as well as panicing on opcode validation errors (e.g. stack underflow) in callTracer and prestateTracer. Co-authored-by: Martin Holst Swende <martin@swende.se> internal/debug: add log.logfmt flag to set logging to use logfmt (#26970) docs: update outdated DeriveSha docs comment (#26968) add localnet genesis update metro-transactions dep Adding features to mempool to support our pre-ordered txs (#2) * Adding features to mempool to support our pre-ordered txs * Add framing for gRPC to execute blocks * Remove public engine API call * Fix circular dependencies * Updated to use new Init, and fill out starting attributes * Add clear astriaordered, cleanup * readme fix * add bash and jq to final docker image * make txpool interface * no more panics, update DoBlock to also update state + store block * cleanup * set post-merge at genesis * cleanup * doc update * remove txpool interface changes * cleanup * cleanup * build and push images wih tags defined by git tags * build for multiple architectures. use docker-metadata action for semver * add push: true * only build arm for git tags/releases --------- Co-authored-by: Jesse Snyder <jessetsnyder@gmail.com> Co-authored-by: elizabeth <elizabethjbinks@gmail.com> tag image with latest for builds from astria branch (#8) rename state_root to block_hash use FROM --platform=$BUILDPLATFORM to build arm images correctly (#9) use v4 of build and push action (#10) * use FROM --platform=$BUILDPLATFORM to build arm images correctly * use v4 of docker build and push fix arm builds. only build arm for tags and merges to default branch. (#12) * fix arm builds. only build arm for tags and merges to default branch. * fix gh action function syntax * more correct comment * build for semver tags Features and fixes needed for contract deployment test (#13) * add and remove tx from geth mempool so forge can deploy a contract * pass metro addr and port by flag * fixes from pr feedback * formatting implement FinalizeBlock gRPC call bump metro-transactions dep Update Protos (#16) * uses new protos * remove old protos update deps update deps no more unknown/unknown image (#19) * no more unknown/unknown image * hardcode condition Changing from prev_state_root to prev_block_hash remove metro integrate submission to sequencer log updates use env vars for chain id/tendermint endpoint rename to cometbft Make the environment variables actually work cleaner simple logging change removed sleep before getPayload by removing goroutine in buildPayload removed unneeded comment removed for loop from buildPayload Remove direct sequencer submission cleanup go.mod Migrate to the v1alpha1 API Missed pieces set genesis block as head/safe/final remove all mentions of metro Initial implementation of Execution v1alpha2 api Integrate updates remove need for consensus api Updates small updates Update grpc/execution/server.go Co-authored-by: noot <36753753+noot@users.noreply.github.com> logging remove unused dependency Mark the chain 'finalized' on startup updates txpool fixes, remove v1alpha1, use forkchoice some cleanup formatting and such cleanup think it's good add new fields to base example genesis Update gh action for release branch Add timestamp to block generated from header Add missing parent hash chore: add some metrics specifically around astria tx execution small refactor fix feat: everything needed for genesis fix review + metrics update to prod pushed buf fix after grpc update switch to new execution apis package feat: support new API utilizing rollup data update to latest proto update docker to login implement DepositTx type and handle in state transition and execute_block cleanup fixes to get deposits working, update genesis.json cleanup cleanup exit node if genesis astria fields are unset add bridge address and asset IDs to genesis and check during execution don't allow deposit or blob txs in sequenced data minimum changes required for fork (#2) Updates the codeowners and sets a new package repo for `astria-geth` repo. Once this is merged, I can push the astria specific tags and we will get built images for old tags on this repo. feat: update protos, config for fees, updated bridging (#1) Allow setting eip 1559 fee params (#3) Adds a per block height config to set some EIP1559 fee params (elasticity and denominator) + adds a min base fee parameter. collect the base fee instead of burning it (#5) EIP-1559 burns the base fee. This doesn't make sense for rollups. The set fee recipient should collect it. Chore: Add forkdiff gh-page (#14) we need a static webpage to show changes made to astria-geth fork, this should be used both internally and externally. using a [forkdiff](https://github.com/protolambda/forkdiff) tool to create a static webpage. add a fork.yaml file structs the changes view and define the commits to compare with pages.yaml workflow deploys to gh-pages Currently deploying on PR for testing. feat: remove txs which do not end up in a block out of the mempool (#15) When the txs we receive from `ExecuteBlocks` call fail to end up in a block, we keep them lying around the geth mempool but clear it from the astria mempool. This PR attempts to remove such txs from the geth mempool. chore: make server logs less noisy (#12) Moves the initial request logs to debug logs, reduces the amount of information printed, and ensures okay formatting. Logs from Geth were very messy, block hashes were messy bytes, and all the information from each request was logged out unnecessarily. fix: continue the tx validation loop if assetId length check fails (#18) Currently, we check if the length of the assetId sent by the rollup is of 32 bytes. If the check fails, we still continue executing the code which will lead to a panic as in the subsequent we try to index the bytes. The fix would be to ignore this tx when the validation fails fix: Fix tests which were failing (#16) This PR fixes all the failing tests in the astria-geth repo apart from the [`TestReimportMirroredState` ](https://github.com/astriaorg/astria-geth/blob/f5a95fe13d581ae1ec67caeaae6efe5338399a3e/consensus/clique/clique_test.go#L44) (More details at the end) The main reasons for the tests failing were: 1. #5 which transfers the basefee to the fee recipient rather than burning it. This caused all the tests which expect a certain state root to fail since they assume that the basefee would be burnt. It also failed tests which check for the balance of the fee recipient which fails because we also have to account for the base fee. To fix them, we replaced the tests with the expected state root and updated the tests with the expected balance of the fee recipient. 2. Picking txs from the `AstriaOrdered` rather than from the geth mempool. Lot of tests place the txs in the Geth mempool and they end up failing as we do not pick txx from their. To fix this, we had to add these txs to the `AstriaOrdered` mempool instead This PR also adds a github action to run the tests. `TestReimportMirroredState` is very tricky to fix since the fee recipient while building the block and while verifying the block before inserting onchain is different. This is because while verifying the block, we pick the fee recipient from the consensus engine's author which in this case is the signer of the block. It's tricker to fix it and we have commented it out for now. chore: migrate to depot to fix builds (#23) buildjet has not been working on this repo, and their customer support has been non responsive. feat: Add tests for execution grpc server and astria configs (#17) This PR adds the following: 1. Tests for astria execution grpc server 2. Tests for astria config 3. Abstraction of astria validation logic and unit tests for them. feat!: store celestia height updates (#22) Updates geth to work with proto changes here: https://github.com/astriaorg/astria/pull/1121/files Adds storage of the celestia height into the DB, so we don't resync celestia data already read on restart. ci: update the test ci to run build/ci.go (#27) Previously, the test ci was running `go test -short ./...`. Instead run the build/ci.go to better test on the ci implement `AstriaMintableERC20`, update deposit tx to support ERC20 mints (#20) - implement `AstriaMintableERC20.sol`, allows an immutable address `bridge` to mint or burn - this address should be set at genesis and the sender of `DepositTx`s is set to this address - `DepositTx` was updated to include `to` and `data` which are set for erc20 mints (later on burns), `to` is set to the erc20 address of the `AstriaMintableERC20` and `data` is the calldata to call the mint function - genesis config fields for erc20s must be set to allow bridging erc20s from the sequencer. namely the erc20 contract address must be set, meaning the token must already be deployed testing: - i tested this manually end-to-end using the instructions in `contracts/README.md`. closes #9
rebase on top of geth v1.13.6 Squash 916d6a4 to 3d160b2 3d160b2 is the last commit before the infamous squash + merge of geth into astria-geth The commit messages below are left unchanged for now so that they can be cleaned up later. Feature/grpc execution api (#1) * add buf config and generated grpc code * poc e2e grpc communication * comment out panicking code * logging help * now reads cli args. now stops grpc server on shutdown. * add mutex to GRPCServerHandler update readme containerize w/ github action to build and push to ghcr (#3) fix gh action syntax (#4) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax build and push manually (#5) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually Feature/containerize (#6) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually * correct multi line update SubmitTransaction to send tx to metro ethclient: ensure returned subscription is nil on error (#26976) core/state, trie: remove Try prefix in Trie accessors (#26975) This change renames StateTrie methods to remove the Try* prefix. We added the Trie methods with prefix 'Try' a long time ago, working around the problem that most existing methods of Trie did not return the database error. This weird naming convention has persisted until now. Co-authored-by: Gary Rong <garyrong0905@gmail.com> metrics/librato: ensure resp.body closed (#26969) This change ensures that we call Close on a http response body, in various places in the source code (mostly tests) core/vm: use atomic.Bool (#26951) Make use of new atomic types --------- Co-authored-by: Felix Lange <fjl@twurst.com> Co-authored-by: Martin Holst Swende <martin@swende.se> core/bloombits: use atomic type (#26993) core/state: use atomic.Bool (#26992) graphql: fix data races (#26965) Fixes multiple data races caused by the fact that resolving fields are done concurrently by the graphql library. It also enforces caching at the stateobject level for account fields. eth/tracers/native: prevent panic for LOG edge-cases (#26848) This PR fixes OOM panic in the callTracer as well as panicing on opcode validation errors (e.g. stack underflow) in callTracer and prestateTracer. Co-authored-by: Martin Holst Swende <martin@swende.se> internal/debug: add log.logfmt flag to set logging to use logfmt (#26970) docs: update outdated DeriveSha docs comment (#26968) add localnet genesis update metro-transactions dep Adding features to mempool to support our pre-ordered txs (#2) * Adding features to mempool to support our pre-ordered txs * Add framing for gRPC to execute blocks * Remove public engine API call * Fix circular dependencies * Updated to use new Init, and fill out starting attributes * Add clear astriaordered, cleanup * readme fix * add bash and jq to final docker image * make txpool interface * no more panics, update DoBlock to also update state + store block * cleanup * set post-merge at genesis * cleanup * doc update * remove txpool interface changes * cleanup * cleanup * build and push images wih tags defined by git tags * build for multiple architectures. use docker-metadata action for semver * add push: true * only build arm for git tags/releases --------- Co-authored-by: Jesse Snyder <jessetsnyder@gmail.com> Co-authored-by: elizabeth <elizabethjbinks@gmail.com> tag image with latest for builds from astria branch (#8) rename state_root to block_hash use FROM --platform=$BUILDPLATFORM to build arm images correctly (#9) use v4 of build and push action (#10) * use FROM --platform=$BUILDPLATFORM to build arm images correctly * use v4 of docker build and push fix arm builds. only build arm for tags and merges to default branch. (#12) * fix arm builds. only build arm for tags and merges to default branch. * fix gh action function syntax * more correct comment * build for semver tags Features and fixes needed for contract deployment test (#13) * add and remove tx from geth mempool so forge can deploy a contract * pass metro addr and port by flag * fixes from pr feedback * formatting implement FinalizeBlock gRPC call bump metro-transactions dep Update Protos (#16) * uses new protos * remove old protos update deps update deps no more unknown/unknown image (#19) * no more unknown/unknown image * hardcode condition Changing from prev_state_root to prev_block_hash remove metro integrate submission to sequencer log updates use env vars for chain id/tendermint endpoint rename to cometbft Make the environment variables actually work cleaner simple logging change removed sleep before getPayload by removing goroutine in buildPayload removed unneeded comment removed for loop from buildPayload Remove direct sequencer submission cleanup go.mod Migrate to the v1alpha1 API Missed pieces set genesis block as head/safe/final remove all mentions of metro Initial implementation of Execution v1alpha2 api Integrate updates remove need for consensus api Updates small updates Update grpc/execution/server.go Co-authored-by: noot <36753753+noot@users.noreply.github.com> logging remove unused dependency Mark the chain 'finalized' on startup updates txpool fixes, remove v1alpha1, use forkchoice some cleanup formatting and such cleanup think it's good add new fields to base example genesis Update gh action for release branch Add timestamp to block generated from header Add missing parent hash chore: add some metrics specifically around astria tx execution small refactor fix feat: everything needed for genesis fix review + metrics update to prod pushed buf fix after grpc update switch to new execution apis package feat: support new API utilizing rollup data update to latest proto update docker to login implement DepositTx type and handle in state transition and execute_block cleanup fixes to get deposits working, update genesis.json cleanup cleanup exit node if genesis astria fields are unset add bridge address and asset IDs to genesis and check during execution don't allow deposit or blob txs in sequenced data minimum changes required for fork (#2) Updates the codeowners and sets a new package repo for `astria-geth` repo. Once this is merged, I can push the astria specific tags and we will get built images for old tags on this repo. feat: update protos, config for fees, updated bridging (#1) Allow setting eip 1559 fee params (#3) Adds a per block height config to set some EIP1559 fee params (elasticity and denominator) + adds a min base fee parameter. collect the base fee instead of burning it (#5) EIP-1559 burns the base fee. This doesn't make sense for rollups. The set fee recipient should collect it. Chore: Add forkdiff gh-page (#14) we need a static webpage to show changes made to astria-geth fork, this should be used both internally and externally. using a [forkdiff](https://github.com/protolambda/forkdiff) tool to create a static webpage. add a fork.yaml file structs the changes view and define the commits to compare with pages.yaml workflow deploys to gh-pages Currently deploying on PR for testing. feat: remove txs which do not end up in a block out of the mempool (#15) When the txs we receive from `ExecuteBlocks` call fail to end up in a block, we keep them lying around the geth mempool but clear it from the astria mempool. This PR attempts to remove such txs from the geth mempool. chore: make server logs less noisy (#12) Moves the initial request logs to debug logs, reduces the amount of information printed, and ensures okay formatting. Logs from Geth were very messy, block hashes were messy bytes, and all the information from each request was logged out unnecessarily. fix: continue the tx validation loop if assetId length check fails (#18) Currently, we check if the length of the assetId sent by the rollup is of 32 bytes. If the check fails, we still continue executing the code which will lead to a panic as in the subsequent we try to index the bytes. The fix would be to ignore this tx when the validation fails fix: Fix tests which were failing (#16) This PR fixes all the failing tests in the astria-geth repo apart from the [`TestReimportMirroredState` ](https://github.com/astriaorg/astria-geth/blob/f5a95fe13d581ae1ec67caeaae6efe5338399a3e/consensus/clique/clique_test.go#L44) (More details at the end) The main reasons for the tests failing were: 1. #5 which transfers the basefee to the fee recipient rather than burning it. This caused all the tests which expect a certain state root to fail since they assume that the basefee would be burnt. It also failed tests which check for the balance of the fee recipient which fails because we also have to account for the base fee. To fix them, we replaced the tests with the expected state root and updated the tests with the expected balance of the fee recipient. 2. Picking txs from the `AstriaOrdered` rather than from the geth mempool. Lot of tests place the txs in the Geth mempool and they end up failing as we do not pick txx from their. To fix this, we had to add these txs to the `AstriaOrdered` mempool instead This PR also adds a github action to run the tests. `TestReimportMirroredState` is very tricky to fix since the fee recipient while building the block and while verifying the block before inserting onchain is different. This is because while verifying the block, we pick the fee recipient from the consensus engine's author which in this case is the signer of the block. It's tricker to fix it and we have commented it out for now. chore: migrate to depot to fix builds (#23) buildjet has not been working on this repo, and their customer support has been non responsive. feat: Add tests for execution grpc server and astria configs (#17) This PR adds the following: 1. Tests for astria execution grpc server 2. Tests for astria config 3. Abstraction of astria validation logic and unit tests for them. feat!: store celestia height updates (#22) Updates geth to work with proto changes here: https://github.com/astriaorg/astria/pull/1121/files Adds storage of the celestia height into the DB, so we don't resync celestia data already read on restart. ci: update the test ci to run build/ci.go (#27) Previously, the test ci was running `go test -short ./...`. Instead run the build/ci.go to better test on the ci implement `AstriaMintableERC20`, update deposit tx to support ERC20 mints (#20) - implement `AstriaMintableERC20.sol`, allows an immutable address `bridge` to mint or burn - this address should be set at genesis and the sender of `DepositTx`s is set to this address - `DepositTx` was updated to include `to` and `data` which are set for erc20 mints (later on burns), `to` is set to the erc20 address of the `AstriaMintableERC20` and `data` is the calldata to call the mint function - genesis config fields for erc20s must be set to allow bridging erc20s from the sequencer. namely the erc20 contract address must be set, meaning the token must already be deployed testing: - i tested this manually end-to-end using the instructions in `contracts/README.md`. closes #9
rebase on top of geth v1.13.7 rebase on top of geth v1.13.6 Squash 916d6a4 to 3d160b2 3d160b2 is the last commit before the infamous squash + merge of geth into astria-geth The commit messages below are left unchanged for now so that they can be cleaned up later. Feature/grpc execution api (#1) * add buf config and generated grpc code * poc e2e grpc communication * comment out panicking code * logging help * now reads cli args. now stops grpc server on shutdown. * add mutex to GRPCServerHandler update readme containerize w/ github action to build and push to ghcr (#3) fix gh action syntax (#4) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax build and push manually (#5) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually Feature/containerize (#6) * containerize w/ github action to build and push to ghcr * fix gh action yml syntax * enable manual trigger * fix syntax * dont use github action, do it ourselves * push manually * correct multi line update SubmitTransaction to send tx to metro ethclient: ensure returned subscription is nil on error (#26976) core/state, trie: remove Try prefix in Trie accessors (#26975) This change renames StateTrie methods to remove the Try* prefix. We added the Trie methods with prefix 'Try' a long time ago, working around the problem that most existing methods of Trie did not return the database error. This weird naming convention has persisted until now. Co-authored-by: Gary Rong <garyrong0905@gmail.com> metrics/librato: ensure resp.body closed (#26969) This change ensures that we call Close on a http response body, in various places in the source code (mostly tests) core/vm: use atomic.Bool (#26951) Make use of new atomic types --------- Co-authored-by: Felix Lange <fjl@twurst.com> Co-authored-by: Martin Holst Swende <martin@swende.se> core/bloombits: use atomic type (#26993) core/state: use atomic.Bool (#26992) graphql: fix data races (#26965) Fixes multiple data races caused by the fact that resolving fields are done concurrently by the graphql library. It also enforces caching at the stateobject level for account fields. eth/tracers/native: prevent panic for LOG edge-cases (#26848) This PR fixes OOM panic in the callTracer as well as panicing on opcode validation errors (e.g. stack underflow) in callTracer and prestateTracer. Co-authored-by: Martin Holst Swende <martin@swende.se> internal/debug: add log.logfmt flag to set logging to use logfmt (#26970) docs: update outdated DeriveSha docs comment (#26968) add localnet genesis update metro-transactions dep Adding features to mempool to support our pre-ordered txs (#2) * Adding features to mempool to support our pre-ordered txs * Add framing for gRPC to execute blocks * Remove public engine API call * Fix circular dependencies * Updated to use new Init, and fill out starting attributes * Add clear astriaordered, cleanup * readme fix * add bash and jq to final docker image * make txpool interface * no more panics, update DoBlock to also update state + store block * cleanup * set post-merge at genesis * cleanup * doc update * remove txpool interface changes * cleanup * cleanup * build and push images wih tags defined by git tags * build for multiple architectures. use docker-metadata action for semver * add push: true * only build arm for git tags/releases --------- Co-authored-by: Jesse Snyder <jessetsnyder@gmail.com> Co-authored-by: elizabeth <elizabethjbinks@gmail.com> tag image with latest for builds from astria branch (#8) rename state_root to block_hash use FROM --platform=$BUILDPLATFORM to build arm images correctly (#9) use v4 of build and push action (#10) * use FROM --platform=$BUILDPLATFORM to build arm images correctly * use v4 of docker build and push fix arm builds. only build arm for tags and merges to default branch. (#12) * fix arm builds. only build arm for tags and merges to default branch. * fix gh action function syntax * more correct comment * build for semver tags Features and fixes needed for contract deployment test (#13) * add and remove tx from geth mempool so forge can deploy a contract * pass metro addr and port by flag * fixes from pr feedback * formatting implement FinalizeBlock gRPC call bump metro-transactions dep Update Protos (#16) * uses new protos * remove old protos update deps update deps no more unknown/unknown image (#19) * no more unknown/unknown image * hardcode condition Changing from prev_state_root to prev_block_hash remove metro integrate submission to sequencer log updates use env vars for chain id/tendermint endpoint rename to cometbft Make the environment variables actually work cleaner simple logging change removed sleep before getPayload by removing goroutine in buildPayload removed unneeded comment removed for loop from buildPayload Remove direct sequencer submission cleanup go.mod Migrate to the v1alpha1 API Missed pieces set genesis block as head/safe/final remove all mentions of metro Initial implementation of Execution v1alpha2 api Integrate updates remove need for consensus api Updates small updates Update grpc/execution/server.go Co-authored-by: noot <36753753+noot@users.noreply.github.com> logging remove unused dependency Mark the chain 'finalized' on startup updates txpool fixes, remove v1alpha1, use forkchoice some cleanup formatting and such cleanup think it's good add new fields to base example genesis Update gh action for release branch Add timestamp to block generated from header Add missing parent hash chore: add some metrics specifically around astria tx execution small refactor fix feat: everything needed for genesis fix review + metrics update to prod pushed buf fix after grpc update switch to new execution apis package feat: support new API utilizing rollup data update to latest proto update docker to login implement DepositTx type and handle in state transition and execute_block cleanup fixes to get deposits working, update genesis.json cleanup cleanup exit node if genesis astria fields are unset add bridge address and asset IDs to genesis and check during execution don't allow deposit or blob txs in sequenced data minimum changes required for fork (#2) Updates the codeowners and sets a new package repo for `astria-geth` repo. Once this is merged, I can push the astria specific tags and we will get built images for old tags on this repo. feat: update protos, config for fees, updated bridging (#1) Allow setting eip 1559 fee params (#3) Adds a per block height config to set some EIP1559 fee params (elasticity and denominator) + adds a min base fee parameter. collect the base fee instead of burning it (#5) EIP-1559 burns the base fee. This doesn't make sense for rollups. The set fee recipient should collect it. Chore: Add forkdiff gh-page (#14) we need a static webpage to show changes made to astria-geth fork, this should be used both internally and externally. using a [forkdiff](https://github.com/protolambda/forkdiff) tool to create a static webpage. add a fork.yaml file structs the changes view and define the commits to compare with pages.yaml workflow deploys to gh-pages Currently deploying on PR for testing. feat: remove txs which do not end up in a block out of the mempool (#15) When the txs we receive from `ExecuteBlocks` call fail to end up in a block, we keep them lying around the geth mempool but clear it from the astria mempool. This PR attempts to remove such txs from the geth mempool. chore: make server logs less noisy (#12) Moves the initial request logs to debug logs, reduces the amount of information printed, and ensures okay formatting. Logs from Geth were very messy, block hashes were messy bytes, and all the information from each request was logged out unnecessarily. fix: continue the tx validation loop if assetId length check fails (#18) Currently, we check if the length of the assetId sent by the rollup is of 32 bytes. If the check fails, we still continue executing the code which will lead to a panic as in the subsequent we try to index the bytes. The fix would be to ignore this tx when the validation fails fix: Fix tests which were failing (#16) This PR fixes all the failing tests in the astria-geth repo apart from the [`TestReimportMirroredState` ](https://github.com/astriaorg/astria-geth/blob/f5a95fe13d581ae1ec67caeaae6efe5338399a3e/consensus/clique/clique_test.go#L44) (More details at the end) The main reasons for the tests failing were: 1. #5 which transfers the basefee to the fee recipient rather than burning it. This caused all the tests which expect a certain state root to fail since they assume that the basefee would be burnt. It also failed tests which check for the balance of the fee recipient which fails because we also have to account for the base fee. To fix them, we replaced the tests with the expected state root and updated the tests with the expected balance of the fee recipient. 2. Picking txs from the `AstriaOrdered` rather than from the geth mempool. Lot of tests place the txs in the Geth mempool and they end up failing as we do not pick txx from their. To fix this, we had to add these txs to the `AstriaOrdered` mempool instead This PR also adds a github action to run the tests. `TestReimportMirroredState` is very tricky to fix since the fee recipient while building the block and while verifying the block before inserting onchain is different. This is because while verifying the block, we pick the fee recipient from the consensus engine's author which in this case is the signer of the block. It's tricker to fix it and we have commented it out for now. chore: migrate to depot to fix builds (#23) buildjet has not been working on this repo, and their customer support has been non responsive. feat: Add tests for execution grpc server and astria configs (#17) This PR adds the following: 1. Tests for astria execution grpc server 2. Tests for astria config 3. Abstraction of astria validation logic and unit tests for them. feat!: store celestia height updates (#22) Updates geth to work with proto changes here: https://github.com/astriaorg/astria/pull/1121/files Adds storage of the celestia height into the DB, so we don't resync celestia data already read on restart. ci: update the test ci to run build/ci.go (#27) Previously, the test ci was running `go test -short ./...`. Instead run the build/ci.go to better test on the ci implement `AstriaMintableERC20`, update deposit tx to support ERC20 mints (#20) - implement `AstriaMintableERC20.sol`, allows an immutable address `bridge` to mint or burn - this address should be set at genesis and the sender of `DepositTx`s is set to this address - `DepositTx` was updated to include `to` and `data` which are set for erc20 mints (later on burns), `to` is set to the erc20 address of the `AstriaMintableERC20` and `data` is the calldata to call the mint function - genesis config fields for erc20s must be set to allow bridging erc20s from the sequencer. namely the erc20 contract address must be set, meaning the token must already be deployed testing: - i tested this manually end-to-end using the instructions in `contracts/README.md`. closes #9
## Summary implement withdrawals of ERC20 tokens that are of type `AstriaBridgeableERC20` (see implemented contract). ## Background we want to be able to withdraw ERC20 tokens that are bridged to a rollup. ## Changes - implement `AstriaBridgeableERC20` which is a standard `ERC20` contract with additional functionality for minting (not used by the withdrawer, implemented/tested here astriaorg/astria-geth#20) as well as functionality for withdrawing - implement `IAstriaWithdrawer` which is implemented by both `AstriaWithdrawer` and `AstriaMintableERC20`. - the withdrawer now interacts with a `IAstriaWithdrawer`. both native assets and ERC20 withdrawals have the same event signatures, so no additional code was needed for the withdrawer itself. - to use the withdrawer with an `AstriaBridgeableERC20`, the `ASTRIA_BRIDGE_WITHDRAWER_ETHEREUM_CONTRACT_ADDRESS` is set to some `AstriaMintableERC20`, and `ASTRIA_BRIDGE_WITHDRAWER_ROLLUP_ASSET_DENOMINATION` is set to the rollup asset's denomination as represented on the sequencer. for example, if the asset is represented on the sequencer is `transfer/channel-1/usdc`, that is the rollup asset denomination. the `name/symbol` of the ERC20 contract are not relevant. - also update the build script to write the generated abigen contract bindings to files, this is easier for debugging and unit testing. ## Testing unit tests ## Related Issues closes #924
## Summary implement withdrawals of ERC20 tokens that are of type `AstriaBridgeableERC20` (see implemented contract). ## Background we want to be able to withdraw ERC20 tokens that are bridged to a rollup. ## Changes - implement `AstriaBridgeableERC20` which is a standard `ERC20` contract with additional functionality for minting (not used by the withdrawer, implemented/tested here astriaorg/astria-geth#20) as well as functionality for withdrawing - implement `IAstriaWithdrawer` which is implemented by both `AstriaWithdrawer` and `AstriaMintableERC20`. - the withdrawer now interacts with a `IAstriaWithdrawer`. both native assets and ERC20 withdrawals have the same event signatures, so no additional code was needed for the withdrawer itself. - to use the withdrawer with an `AstriaBridgeableERC20`, the `ASTRIA_BRIDGE_WITHDRAWER_ETHEREUM_CONTRACT_ADDRESS` is set to some `AstriaMintableERC20`, and `ASTRIA_BRIDGE_WITHDRAWER_ROLLUP_ASSET_DENOMINATION` is set to the rollup asset's denomination as represented on the sequencer. for example, if the asset is represented on the sequencer is `transfer/channel-1/usdc`, that is the rollup asset denomination. the `name/symbol` of the ERC20 contract are not relevant. - also update the build script to write the generated abigen contract bindings to files, this is easier for debugging and unit testing. ## Testing unit tests ## Related Issues closes #924
AstriaMintableERC20.sol, allows an immutable addressbridgeto mint or burnDepositTxs is set to this addressDepositTxwas updated to includetoanddatawhich are set for erc20 mints (later on burns),tois set to the erc20 address of theAstriaMintableERC20anddatais the calldata to call the mint functiontesting:
contracts/README.md.closes #9