Skip to content

adds config.json for C-Chain during antithesis - json logs #3968

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 20, 2025

Conversation

aleksandarknezevic
Copy link
Contributor

@aleksandarknezevic aleksandarknezevic commented May 16, 2025

Why this should be merged

Stop mixing json and text log formats during antithesis test in docker-compose.
Closes #3933

How this works

Per documentation adding config.json file in the $HOME/.avalanchego/configs/chains/C with content:

{
  "log-json-format": true
}

Converts C-Chain logs to json format during Antithesis tests by adding configuration file for docker-compose.

How this was tested

Commands:

  • task test-build-antithesis-images-avalanchego
  • task test-build-antithesis-images-xsvm

Before change logs were in json while C-Chain logs were in text:

{"level":"info","timestamp":"2025-05-16T22:16:14.816Z","caller":"chains/manager.go:1157","msg":"creating proposervm wrapper","activationTime":"2020-12-05T05:00:00.000Z","minPChainHeight":0,"minBlockDelay":1000000000,"numHistoricalBlocks":0}
[05-16|22:16:14.817] INFO <C Chain> plugin/evm/vm.go:380 Initializing Coreth VM                   Version=v0.15.1 "libevm version"=1.13.14-0.2.0.release Config="{GasTarget:<nil> SnowmanAPIEnabled:false AdminAPIEnabled:false AdminAPIDir: CorethAdminAPIEnabled:false CorethAdminAPIDir: WarpAPIEnabled:false EnabledEthAPIs:[eth eth-filter net web3 internal-eth internal-blockchain internal-transaction] ContinuousProfilerDir: ContinuousProfilerFrequency:15m0s ContinuousProfilerMaxFiles:5 RPCGasCap:50000000 RPCTxFeeCap:100 TrieCleanCache:512 TrieDirtyCache:512 TrieDirtyCommitTarget:20 TriePrefetcherParallelism:16 SnapshotCache:256 Preimages:false SnapshotWait:false SnapshotVerify:false Pruning:true AcceptorQueueLimit:64 CommitInterval:4096 AllowMissingTries:false PopulateMissingTries:<nil> PopulateMissingTriesParallelism:1024 PruneWarpDB:false HistoricalProofQueryWindow:43200 MetricsExpensiveEnabled:true LocalTxsEnabled:false PriceOptionSlowFeePercentage:95 PriceOptionFastFeePercentage:105 PriceOptionMaxTip:20000000000 TxPoolPriceLimit:1 TxPoolPriceBump:10 TxPoolAccountSlots:16 TxPoolGlobalSlots:5120 TxPoolAccountQueue:64 TxPoolGlobalQueue:1024 TxPoolLifetime:10m0s APIMaxDuration:0s WSCPURefillRate:0s WSCPUMaxStored:0s MaxBlocksPerRequest:0 AllowUnfinalizedQueries:false AllowUnprotectedTxs:false AllowUnprotectedTxHashes:[0xfefb2da535e927b85fe68eb81cb2e4a5827c905f78381a01ef2322aa9b0aee8e] KeystoreDirectory: KeystoreExternalSigner: KeystoreInsecureUnlockAllowed:false PushGossipPercentStake:0.9 PushGossipNumValidators:100 PushGossipNumPeers:0 PushRegossipNumValidators:10 PushRegossipNumPeers:0 PushGossipFrequency:100ms PullGossipFrequency:1s RegossipFrequency:30s TxRegossipFrequency:0s LogLevel:info LogJSONFormat:false OfflinePruning:false OfflinePruningBloomFilterSize:512 OfflinePruningDataDirectory: MaxOutboundActiveRequests:16 StateSyncEnabled:<nil> StateSyncSkipResume:false StateSyncServerTrieCache:64 StateSyncIDs: StateSyncCommitInterval:16384 StateSyncMinBlocks:300000 StateSyncRequestSize:1024 InspectDatabase:false SkipUpgradeCheck:false AcceptedCacheSize:32 TransactionHistory:0 TxLookupLimit:0 SkipTxIndexing:false WarpOffChainMessages:[] HttpBodyLimit:0}"
[05-16|22:16:14.818] INFO <C Chain> core/state_processor_ext.go:54 Activating new precompile                name=warpConfig config="{\"blockTimestamp\":1607144400,\"quorumNumerator\":0,\"requirePrimaryNetworkSigners\":false}"
[05-16|22:16:14.818] INFO <C Chain> /go/pkg/mod/github.com/ava-labs/libevm@v1.13.14-0.2.0.release/triedb/hashdb/database.go:447 Persisted trie from memory database      nodes=3 size=406.00B time="3.084µs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=0 livesize=0.00B
[05-16|22:16:14.819] INFO <C Chain> plugin/evm/vm.go:461 "lastAccepted = 0x17a7011ebbed7c97c7858cec856bd462a1fe9c216ef5f110b40c3b573dc84c6f"
[05-16|22:16:14.819] INFO <C Chain> eth/backend.go:146 Allocated memory caches                  "trie clean"=512.00MiB "trie dirty"=512.00MiB "snapshot clean"=256.00MiB
[05-16|22:16:14.820] INFO <C Chain> /go/pkg/mod/github.com/ava-labs/libevm@v1.13.14-0.2.0.release/core/rawdb/accessors_trie.go:334 State schema set to default              scheme=hash
[05-16|22:16:14.820] INFO <C Chain> eth/backend.go:194 Initialising Ethereum protocol           network=43112 dbversion=<nil>
[05-16|22:16:14.820] WARN <C Chain> eth/backend.go:200 Upgrade blockchain database version      from=<nil> to=8
[05-16|22:16:14.821] INFO <C Chain> core/genesis.go:138 Writing genesis to database
[05-16|22:16:14.821] INFO <C Chain> core/state_processor_ext.go:54 Activating new precompile                name=warpConfig config="{\"blockTimestamp\":1607144400,\"quorumNumerator\":0,\"requirePrimaryNetworkSigners\":false}"
[05-16|22:16:14.821] INFO <C Chain> triedb/hashdb/database.go:562 Persisted trie from memory database      nodes=3 size=406.00B time="42.708µs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=0 livesize=0.00B
[05-16|22:16:14.821] INFO <C Chain> core/blockchain.go:378
[05-16|22:16:14.821] INFO <C Chain> core/blockchain.go:379 ---------------------------------------------------------------------------------------------------------------------------------------------------------
[05-16|22:16:14.822] INFO <C Chain> core/blockchain.go:381 Chain ID:  43112 (unknown)
[05-16|22:16:14.822] INFO <C Chain> core/blockchain.go:381 Consensus: unknown
[05-16|22:16:14.822] INFO <C Chain> core/blockchain.go:381
[05-16|22:16:14.822] INFO <C Chain> core/blockchain.go:381 Pre-Merge hard forks (block based):
[05-16|22:16:14.823] INFO <C Chain> core/blockchain.go:381  - Homestead:                   #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/homestead.md)
[05-16|22:16:14.823] INFO <C Chain> core/blockchain.go:381  - DAO Fork:                    #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/dao-fork.md)
[05-16|22:16:14.823] INFO <C Chain> core/blockchain.go:381  - Tangerine Whistle (EIP 150): #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/tangerine-whistle.md)
[05-16|22:16:14.823] INFO <C Chain> core/blockchain.go:381  - Spurious Dragon/1 (EIP 155): #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)
[05-16|22:16:14.824] INFO <C Chain> core/blockchain.go:381  - Spurious Dragon/2 (EIP 158): #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)
[05-16|22:16:14.824] INFO <C Chain> core/blockchain.go:381  - Byzantium:                   #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/byzantium.md)
[05-16|22:16:14.824] INFO <C Chain> core/blockchain.go:381  - Constantinople:              #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/constantinople.md)
[05-16|22:16:14.824] INFO <C Chain> core/blockchain.go:381  - Petersburg:                  #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/petersburg.md)
[05-16|22:16:14.824] INFO <C Chain> core/blockchain.go:381  - Istanbul:                    #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/istanbul.md)
[05-16|22:16:14.825] INFO <C Chain> core/blockchain.go:381  - Muir Glacier:                #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/muir-glacier.md)
[05-16|22:16:14.825] INFO <C Chain> core/blockchain.go:381  - Berlin:                      #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/berlin.md)
[05-16|22:16:14.825] INFO <C Chain> core/blockchain.go:381  - {"level":"info","timestamp":"2025-05-16T22:16:14.816Z","caller":"chains/manager.go:1157","msg":"creating proposervm wrapper","activationTime":"2020-12-05T05:00:00.000Z","minPChainHeight":0,"minBlockDelay":1000000000,"numHistoricalBlocks":0}
[05-16|22:16:14.817] INFO <C Chain> plugin/evm/vm.go:380 Initializing Coreth VM                   Version=v0.15.1 "libevm version"=1.13.14-0.2.0.release Config="{GasTarget:<nil> SnowmanAPIEnabled:false AdminAPIEnabled:false AdminAPIDir: CorethAdminAPIEnabled:false CorethAdminAPIDir: WarpAPIEnabled:false EnabledEthAPIs:[eth eth-filter net web3 internal-eth internal-blockchain internal-transaction] ContinuousProfilerDir: ContinuousProfilerFrequency:15m0s ContinuousProfilerMaxFiles:5 RPCGasCap:50000000 RPCTxFeeCap:100 TrieCleanCache:512 TrieDirtyCache:512 TrieDirtyCommitTarget:20 TriePrefetcherParallelism:16 SnapshotCache:256 Preimages:false SnapshotWait:false SnapshotVerify:false Pruning:true AcceptorQueueLimit:64 CommitInterval:4096 AllowMissingTries:false PopulateMissingTries:<nil> PopulateMissingTriesParallelism:1024 PruneWarpDB:false HistoricalProofQueryWindow:43200 MetricsExpensiveEnabled:true LocalTxsEnabled:false PriceOptionSlowFeePercentage:95 PriceOptionFastFeePercentage:105 PriceOptionMaxTip:20000000000 TxPoolPriceLimit:1 TxPoolPriceBump:10 TxPoolAccountSlots:16 TxPoolGlobalSlots:5120 TxPoolAccountQueue:64 TxPoolGlobalQueue:1024 TxPoolLifetime:10m0s APIMaxDuration:0s WSCPURefillRate:0s WSCPUMaxStored:0s MaxBlocksPerRequest:0 AllowUnfinalizedQueries:false AllowUnprotectedTxs:false AllowUnprotectedTxHashes:[0xfefb2da535e927b85fe68eb81cb2e4a5827c905f78381a01ef2322aa9b0aee8e] KeystoreDirectory: KeystoreExternalSigner: KeystoreInsecureUnlockAllowed:false PushGossipPercentStake:0.9 PushGossipNumValidators:100 PushGossipNumPeers:0 PushRegossipNumValidators:10 PushRegossipNumPeers:0 PushGossipFrequency:100ms PullGossipFrequency:1s RegossipFrequency:30s TxRegossipFrequency:0s LogLevel:info LogJSONFormat:false OfflinePruning:false OfflinePruningBloomFilterSize:512 OfflinePruningDataDirectory: MaxOutboundActiveRequests:16 StateSyncEnabled:<nil> StateSyncSkipResume:false StateSyncServerTrieCache:64 StateSyncIDs: StateSyncCommitInterval:16384 StateSyncMinBlocks:300000 StateSyncRequestSize:1024 InspectDatabase:false SkipUpgradeCheck:false AcceptedCacheSize:32 TransactionHistory:0 TxLookupLimit:0 SkipTxIndexing:false WarpOffChainMessages:[] HttpBodyLimit:0}"
[05-16|22:16:14.818] INFO <C Chain> core/state_processor_ext.go:54 Activating new precompile                name=warpConfig config="{\"blockTimestamp\":1607144400,\"quorumNumerator\":0,\"requirePrimaryNetworkSigners\":false}"
[05-16|22:16:14.818] INFO <C Chain> /go/pkg/mod/github.com/ava-labs/libevm@v1.13.14-0.2.0.release/triedb/hashdb/database.go:447 Persisted trie from memory database      nodes=3 size=406.00B time="3.084µs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=0 livesize=0.00B
[05-16|22:16:14.819] INFO <C Chain> plugin/evm/vm.go:461 "lastAccepted = 0x17a7011ebbed7c97c7858cec856bd462a1fe9c216ef5f110b40c3b573dc84c6f"
[05-16|22:16:14.819] INFO <C Chain> eth/backend.go:146 Allocated memory caches                  "trie clean"=512.00MiB "trie dirty"=512.00MiB "snapshot clean"=256.00MiB
[05-16|22:16:14.820] INFO <C Chain> /go/pkg/mod/github.com/ava-labs/libevm@v1.13.14-0.2.0.release/core/rawdb/accessors_trie.go:334 State schema set to default              scheme=hash
[05-16|22:16:14.820] INFO <C Chain> eth/backend.go:194 Initialising Ethereum protocol           network=43112 dbversion=<nil>
[05-16|22:16:14.820] WARN <C Chain> eth/backend.go:200 Upgrade blockchain database version      from=<nil> to=8
[05-16|22:16:14.821] INFO <C Chain> core/genesis.go:138 Writing genesis to database
[05-16|22:16:14.821] INFO <C Chain> core/state_processor_ext.go:54 Activating new precompile                name=warpConfig config="{\"blockTimestamp\":1607144400,\"quorumNumerator\":0,\"requirePrimaryNetworkSigners\":false}"
[05-16|22:16:14.821] INFO <C Chain> triedb/hashdb/database.go:562 Persisted trie from memory database      nodes=3 size=406.00B time="42.708µs" gcnodes=0 gcsize=0.00B gctime=0s livenodes=0 livesize=0.00B
[05-16|22:16:14.821] INFO <C Chain> core/blockchain.go:378
[05-16|22:16:14.821] INFO <C Chain> core/blockchain.go:379 ---------------------------------------------------------------------------------------------------------------------------------------------------------
[05-16|22:16:14.822] INFO <C Chain> core/blockchain.go:381 Chain ID:  43112 (unknown)
[05-16|22:16:14.822] INFO <C Chain> core/blockchain.go:381 Consensus: unknown
[05-16|22:16:14.822] INFO <C Chain> core/blockchain.go:381
[05-16|22:16:14.822] INFO <C Chain> core/blockchain.go:381 Pre-Merge hard forks (block based):
[05-16|22:16:14.823] INFO <C Chain> core/blockchain.go:381  - Homestead:                   #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/homestead.md)
[05-16|22:16:14.823] INFO <C Chain> core/blockchain.go:381  - DAO Fork:                    #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/dao-fork.md)
[05-16|22:16:14.823] INFO <C Chain> core/blockchain.go:381  - Tangerine Whistle (EIP 150): #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/tangerine-whistle.md)
[05-16|22:16:14.823] INFO <C Chain> core/blockchain.go:381  - Spurious Dragon/1 (EIP 155): #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)
[05-16|22:16:14.824] INFO <C Chain> core/blockchain.go:381  - Spurious Dragon/2 (EIP 158): #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)
[05-16|22:16:14.824] INFO <C Chain> core/blockchain.go:381  - Byzantium:                   #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/byzantium.md)
[05-16|22:16:14.824] INFO <C Chain> core/blockchain.go:381  - Constantinople:              #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/constantinople.md)
[05-16|22:16:14.824] INFO <C Chain> core/blockchain.go:381  - Petersburg:                  #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/petersburg.md)
[05-16|22:16:14.824] INFO <C Chain> core/blockchain.go:381  - Istanbul:                    #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/istanbul.md)
[05-16|22:16:14.825] INFO <C Chain> core/blockchain.go:381  - Muir Glacier:                #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/muir-glacier.md)
[05-16|22:16:14.825] INFO <C Chain> core/blockchain.go:381  - Berlin:                      #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/berlin.md)
[05-16|22:16:14.825] INFO <C Chain> core/blockchain.go:381  - London:                      #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/london.md)
[05-16|22:16:14.825] INFO <C Chain> core/blockchain.go:381
:                      #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/london.md)
[05-16|22:16:14.825] INFO <C Chain> core/blockchain.go:381

After changes:

{"level":"info","timestamp":"2025-05-16T22:01:39.406Z","caller":"chains/manager.go:1157","msg":"creating proposervm wrapper","activationTime":"2020-12-05T05:00:00.000Z","minPChainHeight":0,"minBlockDelay":1000000000,"numHistoricalBlocks":0}
{"timestamp":"2025-05-16T22:01:39.406879426Z","level":"info","msg":"Initializing Coreth VM","Version":"v0.15.1","libevm version":"1.13.14-0.2.0.release","Config":{"snowman-api-enabled":false,"admin-api-enabled":false,"admin-api-dir":"","coreth-admin-api-enabled":false,"coreth-admin-api-dir":"","warp-api-enabled":false,"eth-apis":["eth","eth-filter","net","web3","internal-eth","internal-blockchain","internal-transaction"],"continuous-profiler-dir":"","continuous-profiler-frequency":"15m0s","continuous-profiler-max-files":5,"rpc-gas-cap":50000000,"rpc-tx-fee-cap":100,"trie-clean-cache":512,"trie-dirty-cache":512,"trie-dirty-commit-target":20,"trie-prefetcher-parallelism":16,"snapshot-cache":256,"preimages-enabled":false,"snapshot-wait":false,"snapshot-verification-enabled":false,"pruning-enabled":true,"accepted-queue-limit":64,"commit-interval":4096,"allow-missing-tries":false,"populate-missing-tries-parallelism":1024,"prune-warp-db-enabled":false,"historical-proof-query-window":43200,"metrics-expensive-enabled":true,"local-txs-enabled":false,"price-options-slow-fee-percentage":95,"price-options-fast-fee-percentage":105,"price-options-max-tip":20000000000,"tx-pool-price-limit":1,"tx-pool-price-bump":10,"tx-pool-account-slots":16,"tx-pool-global-slots":5120,"tx-pool-account-queue":64,"tx-pool-global-queue":1024,"tx-pool-lifetime":"10m0s","api-max-duration":"0s","ws-cpu-refill-rate":"0s","ws-cpu-max-stored":"0s","api-max-blocks-per-request":0,"allow-unfinalized-queries":false,"allow-unprotected-txs":false,"allow-unprotected-tx-hashes":["0xfefb2da535e927b85fe68eb81cb2e4a5827c905f78381a01ef2322aa9b0aee8e"],"keystore-directory":"","keystore-external-signer":"","keystore-insecure-unlock-allowed":false,"push-gossip-percent-stake":0.9,"push-gossip-num-validators":100,"push-gossip-num-peers":0,"push-regossip-num-validators":10,"push-regossip-num-peers":0,"push-gossip-frequency":"100ms","pull-gossip-frequency":"1s","regossip-frequency":"30s","tx-regossip-frequency":"0s","log-level":"info","log-json-format":true,"offline-pruning-enabled":false,"offline-pruning-bloom-filter-size":512,"offline-pruning-data-directory":"","max-outbound-active-requests":16,"state-sync-enabled":null,"state-sync-skip-resume":false,"state-sync-server-trie-cache":64,"state-sync-ids":"","state-sync-commit-interval":16384,"state-sync-min-blocks":300000,"state-sync-request-size":1024,"inspect-database":false,"skip-upgrade-check":false,"accepted-cache-size":32,"transaction-history":0,"tx-lookup-limit":0,"skip-tx-indexing":false,"warp-off-chain-messages":null,"http-body-limit":0},"logger":"C Chain","caller":"plugin/evm/vm.go:380"}
{"timestamp":"2025-05-16T22:01:39.407871843Z","level":"info","msg":"Activating new precompile","name":"warpConfig","config":"{\"blockTimestamp\":1607144400,\"quorumNumerator\":0,\"requirePrimaryNetworkSigners\":false}","logger":"C Chain","caller":"core/state_processor_ext.go:54"}
{"timestamp":"2025-05-16T22:01:39.408266676Z","level":"info","msg":"Persisted trie from memory database","nodes":3,"size":"406.00 B","time":"3.042µs","gcnodes":0,"gcsize":"0.00 B","gctime":"0s","livenodes":0,"livesize":"0.00 B","logger":"C Chain","caller":"/go/pkg/mod/github.com/ava-labs/libevm@v1.13.14-0.2.0.release/triedb/hashdb/database.go:447"}
{"timestamp":"2025-05-16T22:01:39.408621718Z","level":"info","msg":"lastAccepted = 0x17a7011ebbed7c97c7858cec856bd462a1fe9c216ef5f110b40c3b573dc84c6f","logger":"C Chain","caller":"plugin/evm/vm.go:461"}
{"timestamp":"2025-05-16T22:01:39.409713801Z","level":"info","msg":"Allocated memory caches","trie clean":"512.00 MiB","trie dirty":"512.00 MiB","snapshot clean":"256.00 MiB","logger":"C Chain","caller":"eth/backend.go:146"}
{"timestamp":"2025-05-16T22:01:39.40982901Z","level":"info","msg":"State schema set to default","scheme":"hash","logger":"C Chain","caller":"/go/pkg/mod/github.com/ava-labs/libevm@v1.13.14-0.2.0.release/core/rawdb/accessors_trie.go:334"}
{"timestamp":"2025-05-16T22:01:39.409928218Z","level":"info","msg":"Initialising Ethereum protocol","network":43112,"dbversion":"<nil>","logger":"C Chain","caller":"eth/backend.go:194"}
{"timestamp":"2025-05-16T22:01:39.410080426Z","level":"warn","msg":"Upgrade blockchain database version","from":"<nil>","to":8,"logger":"C Chain","caller":"eth/backend.go:200"}
{"timestamp":"2025-05-16T22:01:39.411635135Z","level":"info","msg":"Writing genesis to database","logger":"C Chain","caller":"core/genesis.go:138"}
{"timestamp":"2025-05-16T22:01:39.411916885Z","level":"info","msg":"Activating new precompile","name":"warpConfig","config":"{\"blockTimestamp\":1607144400,\"quorumNumerator\":0,\"requirePrimaryNetworkSigners\":false}","logger":"C Chain","caller":"core/state_processor_ext.go:54"}
{"timestamp":"2025-05-16T22:01:39.412292718Z","level":"info","msg":"Persisted trie from memory database","nodes":3,"size":"406.00 B","time":"64.083µs","gcnodes":0,"gcsize":"0.00 B","gctime":"0s","livenodes":0,"livesize":"0.00 B","logger":"C Chain","caller":"triedb/hashdb/database.go:562"}
{"timestamp":"2025-05-16T22:01:39.412709051Z","level":"info","msg":"","logger":"C Chain","caller":"core/blockchain.go:378"}
{"timestamp":"2025-05-16T22:01:39.413269051Z","level":"info","msg":"---------------------------------------------------------------------------------------------------------------------------------------------------------","logger":"C Chain","caller":"core/blockchain.go:379"}
{"timestamp":"2025-05-16T22:01:39.414877635Z","level":"info","msg":"Chain ID:  43112 (unknown)","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.415059593Z","level":"info","msg":"Consensus: unknown","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.415283218Z","level":"info","msg":"","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.415394176Z","level":"info","msg":"Pre-Merge hard forks (block based):","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.415603093Z","level":"info","msg":" - Homestead:                   #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/homestead.md)","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.415851635Z","level":"info","msg":" - DAO Fork:                    #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/dao-fork.md)","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.416068051Z","level":"info","msg":" - Tangerine Whistle (EIP 150): #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/tangerine-whistle.md)","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.416561801Z","level":"info","msg":" - Spurious Dragon/1 (EIP 155): #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.416706926Z","level":"info","msg":" - Spurious Dragon/2 (EIP 158): #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/spurious-dragon.md)","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.416911885Z","level":"info","msg":" - Byzantium:                   #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/byzantium.md)","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.416989135Z","level":"info","msg":" - Constantinople:              #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/constantinople.md)","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.417211926Z","level":"info","msg":" - Petersburg:                  #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/petersburg.md)","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.417325635Z","level":"info","msg":" - Istanbul:                    #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/istanbul.md)","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.41765401Z","level":"info","msg":" - Muir Glacier:                #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/muir-glacier.md)","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.417772468Z","level":"info","msg":" - Berlin:                      #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/berlin.md)","logger":"C Chain","caller":"core/blockchain.go:381"}
{"timestamp":"2025-05-16T22:01:39.417952468Z","level":"info","msg":" - London:                      #0        (https://github.com/ethereum/execution-specs/blob/master/network-upgrades/mainnet-upgrades/london.md)","logger":"C Chain","caller":"core/blockchain.go:381"}

Need to be documented in RELEASES.md?

N/A

@Copilot Copilot AI review requested due to automatic review settings May 16, 2025 22:19
Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR adds a configuration file for the C-Chain to ensure logs are output in JSON format during antithesis tests with docker-compose.

  • Adds logic in tests/antithesis/compose.go to create a config.json when the volume path indicates the C-Chain configuration directory.
  • Updates the docker-compose project to mount the new configuration directory.

Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR ensures C-Chain logs are output in JSON format during Antithesis tests by adding a config.json for the C-Chain directory and mounting it in Docker Compose.

  • Write config.json in the C-Chain configs directory to set "log-json-format": true
  • Mount the local C-Chain configs directory into the container
  • Add isCChainConfigDir helper to identify the C-Chain config directory
Comments suppressed due to low confidence (2)

tests/antithesis/compose.go:128

  • [nitpick] Add a unit test in the Antithesis suite to verify that config.json is created in the C-Chain config directory and contains the expected setting.
if isCChainConfigDir(volumePath) {

tests/antithesis/compose.go:184

  • [nitpick] Add a brief comment above this volume mount to explain that it maps the local C-Chain config directory so that config.json is applied inside the container.
{ Type:   types.VolumeTypeBind, Source: fmt.Sprintf("./volumes/%s/configs/chains/C", serviceName), Target: "/root/.avalanchego/configs/chains/C", },

Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR adds a configuration file (config.json) for the C-Chain during antithesis tests to enforce JSON-formatted logging.

  • Adds a new cChainConfig type and logic to generate and write config.json when the volume path matches the expected C-Chain config directory
  • Updates the docker-compose volume mappings in tests/antithesis/compose.go to include the C-Chain configuration directory
Comments suppressed due to low confidence (1)

tests/antithesis/compose.go:133

  • Consider adding unit tests to verify that isCChainConfigDir correctly identifies the expected C-Chain configuration directory paths and that config.json is generated as expected.
if isCChainConfigDir(volumePath) {

@aleksandarknezevic aleksandarknezevic changed the title adds config.json for C-Chain during antithesis docker-compose - log-j… adds config.json for C-Chain during antithesis - json logs May 16, 2025
@maru-ava
Copy link
Contributor

Your initiative is appreciated! Given that we currently supply node configuration via flags, I would ask that you similarly provide the C-Chain configuration via a json-encoded flag rather than as a file on disk. For future, it may make sense to discuss details like this with maintainers in advance of implementation.

Example of composing chain configuration for provision as a flag value: https://github.com/ava-labs/avalanchego/blob/master/tests/fixture/tmpnet/network.go#L859

@aleksandarknezevic
Copy link
Contributor Author

aleksandarknezevic commented May 18, 2025

@maru-ava Thank you for review.

If I understand well configurations for networks are already stored on disk.

Also latest tests are being run in docker compose. Docker compose uses images built from the default Dockerfile. Building them here or here (Depending if it is avalanchego or xsvm).

I am not sure if changing flags could configure it, would appreciate suggestion. Here is originally built docker-compose.yaml:

services:
    avalanche-bootstrap-node:
        container_name: avalanche-bootstrap-node
        environment:
            AVAGO_API_ADMIN_ENABLED: "true"
            AVAGO_HEALTH_CHECK_FREQUENCY: 2s
            AVAGO_HTTP_HOST: 0.0.0.0
            AVAGO_INDEX_ENABLED: "true"
            AVAGO_LOG_DISPLAY_LEVEL: TRACE
            AVAGO_LOG_FORMAT: json
            AVAGO_LOG_LEVEL: DEBUG
            AVAGO_NETWORK_ID: local
            AVAGO_NETWORK_MAX_RECONNECT_DELAY: 1s
            AVAGO_NETWORK_PEER_LIST_PULL_GOSSIP_FREQUENCY: 250ms
            AVAGO_PUBLIC_IP: 10.0.20.3
            AVAGO_STAKING_SIGNER_KEY_FILE_CONTENT: QXZhbGFuY2hlTG9jYWxOZXR3b3JrVmFsaWRhdG9yMDE=
            AVAGO_STAKING_TLS_CERT_FILE_CONTENT:content==
            AVAGO_STAKING_TLS_KEY_FILE_CONTENT:content
        hostname: avalanche-bootstrap-node
        image: antithesis-xsvm-node:993ae109
        networks:
            avalanche-testnet:
                ipv4_address: 10.0.20.3
        volumes:
            - type: bind
              source: ./volumes/avalanche-bootstrap-node/logs
              target: /root/.avalanchego/logs
    avalanche-node-1:
        container_name: avalanche-node-1
        environment:
            AVAGO_API_ADMIN_ENABLED: "true"
            AVAGO_BOOTSTRAP_IDS: NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg
            AVAGO_BOOTSTRAP_IPS: 10.0.20.3:9651
            AVAGO_HEALTH_CHECK_FREQUENCY: 2s
            AVAGO_HTTP_HOST: 0.0.0.0
            AVAGO_INDEX_ENABLED: "true"
            AVAGO_LOG_DISPLAY_LEVEL: TRACE
            AVAGO_LOG_FORMAT: json
            AVAGO_LOG_LEVEL: DEBUG
            AVAGO_NETWORK_ID: local
            AVAGO_NETWORK_MAX_RECONNECT_DELAY: 1s
            AVAGO_NETWORK_PEER_LIST_PULL_GOSSIP_FREQUENCY: 250ms
            AVAGO_PUBLIC_IP: 10.0.20.4
            AVAGO_STAKING_SIGNER_KEY_FILE_CONTENT: QXZhbGFuY2hlTG9jYWxOZXR3b3JrVmFsaWRhdG9yMDQ=
            AVAGO_STAKING_TLS_CERT_FILE_CONTENT: content==
            AVAGO_STAKING_TLS_KEY_FILE_CONTENT:content
            AVAGO_TRACK_SUBNETS: BKBZ6xXTnT86B4L5fp8rvtcmNSpvtNz8En9jG61ywV2uWyeHy
        hostname: avalanche-node-1
        image: antithesis-xsvm-node:993ae109
        networks:
            avalanche-testnet:
                ipv4_address: 10.0.20.4
        volumes:
            - type: bind
              source: ./volumes/avalanche-node-1/logs
              target: /root/.avalanchego/logs
    avalanche-node-2:
        container_name: avalanche-node-2
        environment:
            AVAGO_API_ADMIN_ENABLED: "true"
            AVAGO_BOOTSTRAP_IDS: NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg
            AVAGO_BOOTSTRAP_IPS: 10.0.20.3:9651
            AVAGO_HEALTH_CHECK_FREQUENCY: 2s
            AVAGO_HTTP_HOST: 0.0.0.0
            AVAGO_INDEX_ENABLED: "true"
            AVAGO_LOG_DISPLAY_LEVEL: TRACE
            AVAGO_LOG_FORMAT: json
            AVAGO_LOG_LEVEL: DEBUG
            AVAGO_NETWORK_ID: local
            AVAGO_NETWORK_MAX_RECONNECT_DELAY: 1s
            AVAGO_NETWORK_PEER_LIST_PULL_GOSSIP_FREQUENCY: 250ms
            AVAGO_PUBLIC_IP: 10.0.20.5
            AVAGO_STAKING_SIGNER_KEY_FILE_CONTENT: QXZhbGFuY2hlTG9jYWxOZXR3b3JrVmFsaWRhdG9yMDI=
            AVAGO_STAKING_TLS_CERT_FILE_CONTENT: content==
            AVAGO_STAKING_TLS_KEY_FILE_CONTENT: content==
            AVAGO_TRACK_SUBNETS: BKBZ6xXTnT86B4L5fp8rvtcmNSpvtNz8En9jG61ywV2uWyeHy
        hostname: avalanche-node-2
        image: antithesis-xsvm-node:993ae109
        networks:
            avalanche-testnet:
                ipv4_address: 10.0.20.5
        volumes:
            - type: bind
              source: ./volumes/avalanche-node-2/logs
              target: /root/.avalanchego/logs
    avalanche-node-3:
        container_name: avalanche-node-3
        environment:
            AVAGO_API_ADMIN_ENABLED: "true"
            AVAGO_BOOTSTRAP_IDS: NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg
            AVAGO_BOOTSTRAP_IPS: 10.0.20.3:9651
            AVAGO_HEALTH_CHECK_FREQUENCY: 2s
            AVAGO_HTTP_HOST: 0.0.0.0
            AVAGO_INDEX_ENABLED: "true"
            AVAGO_LOG_DISPLAY_LEVEL: TRACE
            AVAGO_LOG_FORMAT: json
            AVAGO_LOG_LEVEL: DEBUG
            AVAGO_NETWORK_ID: local
            AVAGO_NETWORK_MAX_RECONNECT_DELAY: 1s
            AVAGO_NETWORK_PEER_LIST_PULL_GOSSIP_FREQUENCY: 250ms
            AVAGO_PUBLIC_IP: 10.0.20.6
            AVAGO_STAKING_SIGNER_KEY_FILE_CONTENT: QXZhbGFuY2hlTG9jYWxOZXR3b3JrVmFsaWRhdG9yMDM=
            AVAGO_STAKING_TLS_CERT_FILE_CONTENT: content==
            AVAGO_STAKING_TLS_KEY_FILE_CONTENT: content
            AVAGO_TRACK_SUBNETS: BKBZ6xXTnT86B4L5fp8rvtcmNSpvtNz8En9jG61ywV2uWyeHy
        hostname: avalanche-node-3
        image: antithesis-xsvm-node:993ae109
        networks:
            avalanche-testnet:
                ipv4_address: 10.0.20.6
        volumes:
            - type: bind
              source: ./volumes/avalanche-node-3/logs
              target: /root/.avalanchego/logs
    avalanche-node-4:
        container_name: avalanche-node-4
        environment:
            AVAGO_API_ADMIN_ENABLED: "true"
            AVAGO_BOOTSTRAP_IDS: NodeID-7Xhw2mDxuDS44j42TCB6U5579esbSt3Lg
            AVAGO_BOOTSTRAP_IPS: 10.0.20.3:9651
            AVAGO_HEALTH_CHECK_FREQUENCY: 2s
            AVAGO_HTTP_HOST: 0.0.0.0
            AVAGO_INDEX_ENABLED: "true"
            AVAGO_LOG_DISPLAY_LEVEL: TRACE
            AVAGO_LOG_FORMAT: json
            AVAGO_LOG_LEVEL: DEBUG
            AVAGO_NETWORK_ID: local
            AVAGO_NETWORK_MAX_RECONNECT_DELAY: 1s
            AVAGO_NETWORK_PEER_LIST_PULL_GOSSIP_FREQUENCY: 250ms
            AVAGO_PUBLIC_IP: 10.0.20.7
            AVAGO_STAKING_SIGNER_KEY_FILE_CONTENT: QXZhbGFuY2hlTG9jYWxOZXR3b3JrVmFsaWRhdG9yMDU=
            AVAGO_STAKING_TLS_CERT_FILE_CONTENT: content==
            AVAGO_STAKING_TLS_KEY_FILE_CONTENT: content
            AVAGO_TRACK_SUBNETS: BKBZ6xXTnT86B4L5fp8rvtcmNSpvtNz8En9jG61ywV2uWyeHy
        hostname: avalanche-node-4
        image: antithesis-xsvm-node:993ae109
        networks:
            avalanche-testnet:
                ipv4_address: 10.0.20.7
        volumes:
            - type: bind
              source: ./volumes/avalanche-node-4/logs
              target: /root/.avalanchego/logs
    workload:
        container_name: workload
        environment:
            AVAWL_CHAIN_IDS: 2fRVf81H2AvG8qicdez81T8pJJiQCz5nRZ49otVK3VEDZjLgGM
            AVAWL_URIS: http://10.0.20.3:9650,http://10.0.20.4:9650,http://10.0.20.5:9650,http://10.0.20.6:9650,http://10.0.20.7:9650
        hostname: workload
        image: antithesis-xsvm-workload:993ae109
        networks:
            avalanche-testnet:
                ipv4_address: 10.0.20.129
networks:
    avalanche-testnet:
        driver: bridge
        ipam:
            config:
                - subnet: 10.0.20.0/24

As a conclusion I am not sure if we need to set any flags in docker image build from the original Dockerfile. On another side, I am not aware if it is possible to set config parameter(s) for C-Chain using environment variables. Per C-chain documentation and chain-config documentation we should add config.json to configure C-chain. Also, some volumes (logs and db) + docker-compose.yml are already being written to the disk.

Maybe @StephenButtolph has some inputs here?

@StephenButtolph
Copy link
Contributor

@aleksandarknezevic I think we typically try to pass all arguments as environment variables. In this case, I think that means we should use the "chain-config-content" flag (which should be the AVAGO_CHAIN_CONFIG_CONTENT environment variable).

Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR adds a new configuration file for the C-Chain to switch its log format to JSON during antithesis tests, avoiding the mix of json and text log formats.

  • Introduces new types (CChainConfig and ChainConfig) and the function encodeChainConfig() to build and base64‑encode the configuration.
  • Updates the antithesis compose project to include the encoded chain configuration in the service environment.

Copy link

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR introduces a new configuration mechanism for the C-Chain by adding a config.json file to enable JSON log formatting during Antithesis tests with docker-compose.

  • Added types and a helper function (encodeChainConfig) to generate a nested, base64-encoded chain configuration.
  • Modified environment variable setup in newComposeProject to include the encoded chain config when available.


chainConfigB64, err := encodeChainConfig()
if err != nil {
fmt.Printf("Failed to encode chain config: %v\n", err)
Copy link
Preview

Copilot AI May 20, 2025

Choose a reason for hiding this comment

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

The error returned by encodeChainConfig is only printed and not propagated. Consider returning the error or handling it more robustly to avoid silent failures during configuration setup.

Suggested change
fmt.Printf("Failed to encode chain config: %v\n", err)
return nil, fmt.Errorf("failed to encode chain config: %w", err)

Copilot uses AI. Check for mistakes.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

chainConfigB64 is optional, don't want to break tests and docker-compose.yaml creation. It is fine to omit chain configuration.

Copy link
Contributor

Choose a reason for hiding this comment

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

It should actually be mandatory (i.e. a failure to compose the key value should be propagated) otherwise we aren't guaranteed of the c-chain emitting logs in json format.

@maru-ava
Copy link
Contributor

maru-ava commented May 20, 2025

Apologies for not responding sooner, I somehow missed notification of your reply.

Also apologies for the lack of clarity in my original response, it shouldn't be necessary to duplicate the creation of the flag value since the network already has this ability:

                 // outside the loop (once for all nodes)
                 
                 // Configure the network
                 if network.PrimaryChainConfigs["C"] == nil {
                     network.PrimaryChainConfigs["C"] = tmpnet.ConfigMap{}
                 } 
                 network.PrimaryChainConfigs["C"]["log-json-format"] = true
   
                 // Use the network to create the flag value
		 chainConfigContent, err := network.GetChainConfigContent()
		 if err != nil {
                     return fmt.Errorf("failed to get chain config content: %w", err)
		 }
                 
                 ...
                 
                 // inside the loop (for each node)
      
		env := types.Mapping{
                     ... 
                     // The value should always be non-empty here since we are setting the format and checking the error 
                     // that could result from composing the flag value
	             config.ChainConfigContentKey: chainConfigContent,
	  	 }

Note that this will require updating newComposeProject to return an error. Which is fine, the only caller is initComposeConfig in the same file and it is already capable of returning an error.

Edit1: Updated to use correct c-chain flag key and value
Edit2: Updated to include value for each node without condition

@aleksandarknezevic
Copy link
Contributor Author

Thank you @maru-ava for the awesome explanation. I've just updated PR with your recommendations (tested locally and confirmed that C-chain logs are in json format. Would appreciate your review.

Copy link
Contributor

@maru-ava maru-ava left a comment

Choose a reason for hiding this comment

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

One nit and then LGTM

maru-ava
maru-ava previously approved these changes May 20, 2025
Copy link
Contributor

@maru-ava maru-ava left a comment

Choose a reason for hiding this comment

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

LGTM, thank you!

@maru-ava maru-ava moved this to Ready 🚦 in avalanchego May 20, 2025
@maru-ava maru-ava added the testing This primarily focuses on testing label May 20, 2025
@maru-ava maru-ava self-requested a review May 20, 2025 15:18
@maru-ava maru-ava dismissed their stale review May 20, 2025 15:19

Rescinding approval pending resolution of test failure

Copy link
Contributor

@maru-ava maru-ava left a comment

Choose a reason for hiding this comment

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

Thank you for your patience, the tests look happy now. Will just need to wait for a second approval to merge.

Copy link
Contributor

@Elvis339 Elvis339 left a comment

Choose a reason for hiding this comment

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

Deluje dobro, hvala za doprinos!

Translation from Serbian: Looks good, thank you for your contribution!

@maru-ava maru-ava enabled auto-merge May 20, 2025 15:56
@aleksandarknezevic
Copy link
Contributor Author

@maru-ava It seems, I am missing permissions to merge:

Commits must have verified signatures.
You're not authorized to push to this branch. Visit https://docs.github.com/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches for more information.

Could you merge it please?

@maru-ava
Copy link
Contributor

@maru-ava It seems, I am missing permissions to merge:

Commits must have verified signatures.
You're not authorized to push to this branch. Visit https://docs.github.com/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/about-protected-branches for more information.

Could you merge it please?

Nobody is allowed to merge to master, we use a merge queue.

I previously put it in the merge queue, but since you pushed a merge commit it got kicked out and we have to re-run CI and re-trigger merge. For future, please avoid pushing anything to avoid interrupting merge. It's fine if the branch isn't current with master so long as there are no conflicts.

@aleksandarknezevic
Copy link
Contributor Author

Thank you for explanation. Didn't notice information about merge queue. Sorry about that.

@maru-ava
Copy link
Contributor

Oh, I see what the problem is... You'll need to sign your commits. We have this enabled as a safety measure.

auto-merge was automatically disabled May 20, 2025 17:24

Head branch was pushed to by a user without write access

@aleksandarknezevic
Copy link
Contributor Author

@maru-ava Now I force pushed in one signed commit. Hope it is fine. Thank you!

@maru-ava maru-ava enabled auto-merge May 20, 2025 17:28
@maru-ava maru-ava added this pull request to the merge queue May 20, 2025
Merged via the queue into ava-labs:master with commit 409ad90 May 20, 2025
24 checks passed
@github-project-automation github-project-automation bot moved this from Ready 🚦 to Done 🎉 in avalanchego May 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
testing This primarily focuses on testing
Projects
Status: Done 🎉
Development

Successfully merging this pull request may close these issues.

Convert Antithesis C-Chain Logs to JSON
4 participants