🚀 What's New
- Aggkit now suppors new contracts (v0.3.5), multising certificate
- Fix security issues in code (e.g., overflows, file permissions....)
- Enhanced container security by removing root access
- Fixed issues with L2GERsyncer
- Improved the bridge API (added more data fields such
global_index,tx_hash) - Improved debug: *aggsender stores rejected certificates into a file
- Improved database performance
- Support more granularity into aggkit running compnents adding:
L1INFOTREESYNCL1BRIDGESYNCL2BRIDGESYNCL2GERSYNC
- Fix error that prevent to run only
l1infotreesync(#893) - Introduced new component:
aggsender-validator
⚠️ Breaking Changes
- Config File Changes:
- Deprecated
AggOracle.BlockFinality: is no longer possible to set the finality of aggOracle it use latest index l1 infotree leaf - Deprecated
L1InfoTreeSync.BlockFinality: L1InfoTreeSync always use as finalityFinalizedBlock - Moved section
L2GERSync: it have been renamed toL2GERSync - Deprecated
L2GERSync.SyncMode: It's not longer required beucase the mode is guess from environment - Moved field
AggSender.MaxSubmitCertificateRate: it have been moved toAggSender.AgglayerClient.APIRateLimits - Deprecated
Aggsender.BlockFinality: aggsender useBridgeL2Sync.BlockFinalityas finality - Deprecated
LastGERSync.SyncMode: is no longer required - Deprecated
Aggsender.RequireValidatorCall: is no longer required, because calling a Validator now depends on the committee - Moved field
AggSender.KeepCertificatesHistory: it have been moved toAggSender.StorageRetainCertificatesPolicy.KeepCertificatesHistory - Moved field
L1NetworkConfig.URLtoL1NetworkConfig.L1NetworkConfig.RPC.URL
- Deprecated
- Add field
L2Config.AggOracleCommitteeAddr: address of aggoracle Committee - Add section
L1NetworkConfig.RPC: it configures L1 RPC client
[L1NetworkConfig.RPC]
URL = "{{L1Config.URL}}"
RetryMode = "backoff"
MaxRetries = 5
InitialBackoff = "2s"
MaxBackoff = "10s"
BackoffMultiplier = 2.0
- Add section
AggSender.StorageRetainCertificatesPolicy: it defines the retain policy for certificates (check #1057)
[AggSender.StorageRetainCertificatesPolicy]
RetainCertificatesCount = 0 # 0 means keep all certificates
KeepCertificatesHistory = true
- Add field
AggSender.CertificatesDir: it configure where to store json file with certificates - Add field
AggOracle.EnableAggOracleCommittee: - Add field
AggOracle.AggOracle.EVMSender.EthTxManager.EstimateGasMaxRetries: - Improved fields related to BlockFinality: this kind of field now accept a block name and a offset e.g.
LatestBlock/-10(more info #916) . It applies to next fields:- BridgeL2Sync.BlockFinality
- L2GERSync.BlockFinality
- ReorgDetectorL2.FinalizedBlock
- Add field
AggSender.RetriesToBuildAndSendCertificate: It define the delays and tries when a certificate is rejected by agglayer
[AggSender]
[AggSender.RetriesToBuildAndSendCertificate]
Mode= "delays"
Delays = [ "1m", "1m", "2m", "5m", "5m", "8m" ]
MaxRetries = 6 # 1+6 attemps, around 22m
- Add new section
Validator: This is the configuration for new component aggsender-validator. In fact none of this fields are required to be set in config file because it use global variables
[Validator]
EnableRPC = false
# check SignerConfig in docs/common_config.md for more details
Signer = {{AggsenderPrivateKey}}
MaxCertSize = "{{AggSender.MaxCertSize}}"
MaxL2BlockNumber = "{{AggSender.MaxL2BlockNumber}}"
DelayBetweenRetries = "{{AggSender.DelayBetweenRetries}}"
# PessimisticProof, AggchainProof or Auto
Mode = "{{AggSender.Mode}}"
RequireCommitteeMembershipCheck = {{AggSender.RequireCommitteeMembershipCheck}}
[Validator.ServerConfig]
Host = "0.0.0.0"
Port = 5578
EnableReflection = true
MaxDecodingMessageSize = 26214400 # 25Mb
[Validator.LerQuerierConfig]
RollupManagerAddr = "{{AggSender.RollupManagerAddr}}"
RollupCreationBlockL1 = "{{AggSender.RollupCreationBlockL1}}"
[Validator.PPConfig]
RequireOneBridgeInPPCertificate = "{{AggSender.RequireOneBridgeInPPCertificate}}"
[Validator.FEPConfig]
SovereignRollupAddr = "{{AggSender.SovereignRollupAddr}}"
RequireNoBlockGap = "{{AggSender.RequireNoFEPBlockGap}}"
OpNodeURL = "{{OpNodeURL}}"
[Validator.AgglayerClient]
Cached = true
[Validator.AgglayerClient.ConfigurationCache]
TTL = "5m"
Capacity = 100
[Validator.AgglayerClient.GRPC]
URL = "{{AggSender.AgglayerClient.GRPC.URL}}"
MinConnectTimeout = "{{AggSender.AgglayerClient.GRPC.MinConnectTimeout}}"
RequestTimeout = "{{AggSender.AgglayerClient.GRPC.RequestTimeout}}"
UseTLS = "{{AggSender.AgglayerClient.GRPC.UseTLS}}"
[Validator.AgglayerClient.GRPC.Retry]
InitialBackoff = "{{AggSender.AgglayerClient.GRPC.Retry.InitialBackoff}}"
MaxBackoff = "{{AggSender.AgglayerClient.GRPC.Retry.MaxBackoff}}"
BackoffMultiplier = "{{AggSender.AgglayerClient.GRPC.Retry.BackoffMultiplier}}"
MaxAttempts = "{{AggSender.AgglayerClient.GRPC.Retry.MaxAttempts}}"
-
API Changes:
- Bridge Service: filter token-mapping with origin address (#953)
- Aggkit add version in headers in grpc calls
-
Migration Guide:
- It's mandatory to resync bridgel2sync
📦 Full Changelog
- fix: e2e pessimistic flow tests by @Stefan-Ethernal in #702
- fix: export ENCLAVE_NAME by @temaniarpit27 in #713
- feat: rely on the binary startup for aggkit and remove shell by @Stefan-Ethernal in #712
- feat: add
aggsender-verifiergRPCservice by @goran-ethernal in #711 - chore: update hash by @temaniarpit27 in #718
- feat: nightly e2e by @temaniarpit27 in #676
- test: add global index testcase by @temaniarpit27 in #699
- feat: certificate header cache by @goran-ethernal in #721
- feat: struct for aggsender verifier by @joanestebanr in #700
- feat: aggsender validator client by @goran-ethernal in #726
- test: run reentrancy tests by @rachit77 in #724
- refactor: simplify the
aggoraclelogic by @Stefan-Ethernal in #720 - fix: rename by @temaniarpit27 in #742
- feat: call
aggsender validatorin regularaggsenderby @goran-ethernal in #738 - chore(deps): bump golang.org/x/net from 0.41.0 to 0.42.0 by @dependabot[bot] in #745
- chore(deps): bump github.com/knadh/koanf/v2 from 2.2.1 to 2.2.2 by @dependabot[bot] in #746
- fix: remove root access when building docker image by @Stefan-Ethernal in #675
- fix: local scripts by @temaniarpit27 in #740
- test: e2e by @rachit77 in #752
- fix: DFS search by @rachit77 in #739
- feat: support custom aggkit urls by @temaniarpit27 in #754
- feat: Implements grpc service for
aggsender-validatorby @joanestebanr in #744 - feat: introduce release template and update pull request template by @Stefan-Ethernal in #757
- feat: save settled cert on startup from scratch by @goran-ethernal in #753
- fix: handle
bridge exitmetadataalways the same by @goran-ethernal in #762 - chore(deps): bump github.com/swaggo/swag from 1.16.4 to 1.16.5 by @dependabot[bot] in #763
- fix: nightly issues by @temaniarpit27 in #765
- fix: add retry mechanism for dialing the rpc client by @Stefan-Ethernal in #761
- feat: integrate
aggoraclecommittee by @rachit77 in #741 - feat: move converters to one package by @goran-ethernal in #769
- refactor: l2 ger syncer and resolve l2 ger sync mode automatically by @Stefan-Ethernal in #743
- feat: validator: new hash for validator by @joanestebanr in #773
- fix: agglayer client cache issues by @goran-ethernal in #775
- chore: attend PR comments from PR #773 by @joanestebanr in #777
- feat: retry build/submit certificate in case of error by @joanestebanr in #760
- fix: contention in evm driver due to retry handler by @Stefan-Ethernal in #778
- ci: test run for same global index by @rachit77 in #698
- test: combination of asset and message bridging from L1 to L2 by @rachit77 in #701
- chore(deps): bump google.golang.org/grpc from 1.73.0 to 1.74.2 by @dependabot[bot] in #783
- test: double claim by @rachit77 in #749
- chore(deps): bump github.com/mattn/go-sqlite3 from 1.14.28 to 1.14.29 by @dependabot[bot] in #784
- feat: move aggchain proof querying logic to a new interface by @goran-ethernal in #774
- chore: remove reorg detector from l1 by @temaniarpit27 in #768
- test: run for multiple bridge and claims bats test by @rachit77 in #642
- fix: minors error on local script to run locally by @joanestebanr in #807
- fix: local_debug: expose aggkit ports by @joanestebanr in #809
- fix: prevent data race while running tests by @temaniarpit27 in #789
- feat: Add project rules and symlinks for documentation references by @vcastellm in #788
- chore: update hash by @temaniarpit27 in #811
- feat: nightly tests by @rachit77 in #810
- chore(deps): bump github.com/prometheus/client_golang from 1.22.0 to 1.23.0 by @dependabot[bot] in #816
- chore(deps): bump github.com/mattn/go-sqlite3 from 1.14.29 to 1.14.30 by @dependabot[bot] in #817
- chore(deps): bump github.com/swaggo/swag from 1.16.5 to 1.16.6 by @dependabot[bot] in #819
- feat: decouple e2e framework from kurtosis by @Stefan-Ethernal in #781
- test: run e2e test by @rachit77 in #822
- feat: store certificates in file by @vcastellm in #808
- fix: bug when bridge l1 syncer is stopped and l1 info tree syncer continues by @temaniarpit27 in #833
- chore: add aggkit version in grpc calls by @temaniarpit27 in #813
- refactor: include certificate height in signed cert file name by @vcastellm in #836
- fix: bridge service db issues by @rachit77 in #831
- feat: generic retry handler in rpc dialing by @Stefan-Ethernal in #820
- fix: update last info and last verified by @temaniarpit27 in #841
- fix: error when running
l1infotreesynccomponent in standalone mode by @rachit77 in #848 - chore(deps): bump buf.build/gen/go/agglayer/provers/protocolbuffers/go from 1.36.6-20250520163122-7efa0a2f81a8.1 to 1.36.7-20250520163122-7efa0a2f81a8.1 by @dependabot[bot] in #851
- chore(deps): bump golang.org/x/net from 0.42.0 to 0.43.0 by @dependabot[bot] in #854
- chore(deps): bump buf.build/gen/go/agglayer/agglayer/protocolbuffers/go from 1.36.6-20250520190516-57743a879f16.1 to 1.36.7-20250520190516-57743a879f16.1 by @dependabot[bot] in #856
- feat: integrate bridge spammer in op-stack tests by @rachit77 in #787
- test: shellcheck PR test run by @rachit77 in #850
- feat: enable optimistic tests by @temaniarpit27 in #882
- chore(deps): bump github.com/mattn/go-sqlite3 from 1.14.30 to 1.14.32 by @dependabot[bot] in #887
- fix: flaky nightly tests by @rachit77 in #890
- feat: use bridge db query timeout by @rachit77 in #874
- feat: filter logs recursively by @rachit77 in #902
- feat: add indexes by @temaniarpit27 in #897
- feat: add new test flow by @temaniarpit27 in #904
- fix: geth upgrade issue by @rachit77 in #894
- feat: bump kurtosis version by @goran-ethernal in #922
- feat: confgure block finality based on blockReference and amount of blocks by @joanestebanr in #916
- fix: Ethclienter not timing out while filtering logs by @rachit77 in #888
- chore(deps): bump github.com/go-viper/mapstructure/v2 from 2.3.0 to 2.4.0 by @dependabot[bot] in #899
- chore(deps): bump buf.build/gen/go/agglayer/interop/protocolbuffers/go from 1.36.7-20250519093743-85e8a3d9f59c.1 to 1.36.8-20250519093743-85e8a3d9f59c.1 by @dependabot[bot] in #910
- chore: fix typos in comments and test descriptions by @prestoalvarez in #903
- chore(deps): bump github.com/stretchr/testify from 1.10.0 to 1.11.0 by @dependabot[bot] in #905
- chore(deps): bump google.golang.org/grpc from 1.74.2 to 1.75.0 by @dependabot[bot] in #909
- chore: fix link to evm.go by @gap-editor in #867
- feat: upgrade golang by @temaniarpit27 in #930
- feat: move 3 chain test to nightly by @temaniarpit27 in #933
- feat: add support for individual components by @rachit77 in #923
- fix: include retry count in signed certificate file name by @vcastellm in #929
- feat: remove isNativeToken by @temaniarpit27 in #932
- fix:
L2GERSyncsyncer events indexing by @rachit77 in #927 - chore(deps): bump github.com/ethereum/go-ethereum from 1.16.2 to 1.16.3 by @dependabot[bot] in #964
- chore(deps): bump go.opentelemetry.io/otel from 1.37.0 to 1.38.0 by @dependabot[bot] in #963
- chore(deps): bump github.com/prometheus/client_golang from 1.23.0 to 1.23.2 by @dependabot[bot] in #959
- feat: filter token-mapping with origin address by @rachit77 in #953
- chore(deps): bump buf.build/gen/go/agglayer/interop/protocolbuffers/go from 1.36.8-20250828125920-9f07d329a94b.1 to 1.36.8-20250908082243-610ba4f69850.1 by @dependabot[bot] in #961
- chore(deps): bump golang.org/x/sync from 0.16.0 to 0.17.0 by @dependabot[bot] in #965
- chore(deps): bump github.com/swaggo/gin-swagger from 1.6.0 to 1.6.1 by @dependabot[bot] in #962
- chore(deps): bump SonarSource/sonarqube-scan-action from 4.2.1 to 5.3.1 in /.github/workflows by @dependabot[bot] in #970
- feat: add config example by @temaniarpit27 in #944
- fix: cherrypick fix 🐞 bug 973, sanity check PP to FEP (#975) by @joanestebanr in #977
- feat: setclaim callData log by @rachit77 in #991
- feat: save cert in certificates dir by @rachit77 in #979
- fix: set block timestamp and tx hash to pre-etrog claims by @Stefan-Ethernal in #997
- chore(deps): bump google.golang.org/grpc from 1.75.0 to 1.75.1 by @dependabot[bot] in #1001
- chore(deps): bump golang.org/x/net from 0.43.0 to 0.44.0 by @dependabot[bot] in #1002
- chore(deps): bump github.com/knadh/koanf/v2 from 2.2.2 to 2.3.0 by @dependabot[bot] in #1009
- chore(deps): bump github.com/spf13/viper from 1.20.1 to 1.21.0 by @dependabot[bot] in #1008
- chore(deps): bump google.golang.org/protobuf from 1.36.8 to 1.36.9 by @dependabot[bot] in #1005
- docs: add aggoracle committee mode by @rachit77 in #999
- fix: #912 store non-accepted-cert in file by @joanestebanr in #1011
- chore: reuse
go-ethereumfor hash calculations by @Stefan-Ethernal in #1012 - feat: add evicted mode by @rachit77 in #990
- feat: move rate limit to agglayer client by @temaniarpit27 in #824
- chore: remove obsolete test vectors for merkle tree by @Stefan-Ethernal in #1030
- feat: report unsupported component by @rachit77 in #1029
- fix: rate_limit object in case no sleep required by @joanestebanr in #1035
- chore: simplify syncer constructor functions by @Stefan-Ethernal in #1040
- chore(deps): bump github.com/gin-gonic/gin from 1.10.1 to 1.11.0 by @dependabot[bot] in #1047
- feat: update sync status api by @rachit77 in #976
- feat: include
global_indexto bridge responses by @Stefan-Ethernal in #1053 - chore(deps): bump SonarSource/sonarqube-scan-action from 5.3.1 to 6.0.0 in /.github/workflows by @dependabot[bot] in #1059
- fix: context deadline by @temaniarpit27 in #1062
- chore(deps): bump github.com/ethereum/go-ethereum from 1.16.3 to 1.16.4 by @dependabot[bot] in #1066
- feat: add txn_sender in bridges API by @temaniarpit27 in #1075
- fix: separate migrations by @temaniarpit27 in #1089
- fix: op-succinct e2e tests by @Stefan-Ethernal in #1080
- chore(deps): bump google.golang.org/protobuf from 1.36.9 to 1.36.10 by @dependabot[bot] in #1082
- feat: handle L2 GER syncing by @rachit77 in #1051
- feat: retain policy by @joanestebanr in #1057
- feat: Aggsender multisig by @Stefan-Ethernal in #860
- feat: limit number of network id in bridge and claim api by @rachit77 in #1101
- fix: integer overflows and file permission by @rachit77 in #1106
- fix: continue till there are no issues by @temaniarpit27 in #1093
- chore(deps): bump github.com/quic-go/quic-go from 0.54.0 to 0.54.1 by @dependabot[bot] in #1108
- chore(deps): bump google.golang.org/grpc from 1.75.1 to 1.76.0 by @dependabot[bot] in #1117
- fix: nightly e2e tests by @Stefan-Ethernal in #1111
- chore(deps): bump golang.org/x/net from 0.44.0 to 0.46.0 by @dependabot[bot] in #1115
- feat: Add latest block finality support to
bridgeL1Syncby @rachit77 in #1109
New Contributors
- @prestoalvarez made their first contribution in #903
- @gap-editor made their first contribution in #867
Full Changelog: v0.5.4...v0.7.0