Skip to content

Starknet 0.14.3 readiness: starknet.go v0.17.1, devnet-rs 0.8.2, G++ 2.6.6 - #695

Merged
cawthorne merged 45 commits into
developfrom
feature/bump-starknet-go
Jun 16, 2026
Merged

Starknet 0.14.3 readiness: starknet.go v0.17.1, devnet-rs 0.8.2, G++ 2.6.6#695
cawthorne merged 45 commits into
developfrom
feature/bump-starknet-go

Conversation

@cawthorne

@cawthorne cawthorne commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Summary

Starknet 0.14.3 readiness for chainlink-starknet: upgrades github.com/NethermindEth/starknet.go from v0.9.0 → v0.17.1 (and juno to v0.15.11) across relayer, monitoring, and integration-tests; bumps devnet to starknet-devnet-rs 0.8.2; and updates smoke CI to use Gauntlet++ 2.6.6 nops tarballs.

core ref: feature/bump-starknet-plugin-0.14

Companion Chainlink core PR: chainlink #22849 (add build-publish label for temporary smoke image)

Relayer (starknet.go v0.17.1)

  • Removes the custom rpc_raw.go workaround — v0.17.1 has native pre_confirmed block tag support
  • Routes nonce, fee estimation, call, and event queries through the SDK provider
  • Adapts TXM to v0.17 transaction types (BroadcastInvokeTxnV3 alias, FeeUnit/FriUnit renames, pointer ResourceBounds, SkipValidate)
  • Tolerates ErrIncompatibleVersion when connecting to RPC 0.10.x nodes (warn + continue; documented in relayer/CONFIG.md)
  • Block tags: pre_confirmed for TXM nonce/fees; latest for read-only calls (STOM, OCR cache); pre_confirmed event fallback when a block is ahead of chain tip

Monitoring (STOM)

  • Inherits relayer block-tag behaviour — no separate RPC logic in monitoring/pkg/*
  • monitoring/README.md documents RPC 0.9/0.10.x endpoint requirement

Integration tests

  • devnet-rs 0.8.2: JSON-RPC helpers (DevnetMint, FetchDevnetAccounts) in relayer/pkg/starknet/devnet/utils; starknet.js v8 contract test updates
  • G++ smoke: gauntlet-nops-v2.6.6 tarballs via download-gauntlet-plus-plus.sh (Starknet ops included after gauntlet-plus-plus #1708)
  • G++ client: vendored go-gauntlet is one-shot HTTP (/execute, /reports); async report polling lives in ops/gauntlet/gauntlet_plus_plus_starknet.go
  • Testenv: fresh container reuse (Reuse: false), G++ served on node:18-bookworm with linux/amd64 platform
  • Smoke CI: ctf-setup-go instead of Nix; integration-tests lint via nix develop (Go 1.26 shell)
  • Local smoke: optional Chainlink plugin overlay (build-chainlink-image.sh) — see docs/integration-tests/README.md

chainlink-common

  • Bumped to main at chainlink-common #2154 merge (bdae88e1) — chainlink-common/keystore v1.2.1-0.20260616124219-bdae88e1c732 (starknet.go v0.17 starkkey)

Toolchain

  • Nix dev shell bumped to Go 1.26; dedicated shell-ci.nix for soak image builds

External dependencies

Dependency Status Action after merge
chainlink #22849 Open Temporary core image for smoke; merge after #695 or fold into develop plugin bump
chainlink-common #2154 Merged starkkey for starknet.go v0.17.1
gauntlet-plus-plus #1708 Required for G++ 2.6.6 nops Confirm 2.6.6 nops tarball published with Starknet plugins

Test plan

  • cd relayer && go test ./...
  • cd monitoring && go test ./...
  • Relayer unit tests: ErrIncompatibleVersion, pre_confirmed RPC, events continuation token
  • DevnetMint / FetchDevnetAccounts unit tests (relayer/pkg/starknet/devnet/utils)
  • G++ polling/error handling unit tests (ops/gauntlet/gauntlet_plus_plus_starknet_test.go)
  • Local TestOCRBasic with G++ 2.6.6 nops tarball
  • Relayer check-tidy (make gomodtidy, make generate)
  • CI smoke green (pending G++ 2.6.6 nops publish + chainlink #22849 build-publish image)

Notes

  • Rebased onto develop; Add support for Starknet 0.14.3 #694 does not need to merge separately
  • starknet.go v0.17.x implements RPC spec 0.9.0; 0.10.x nodes are supported with connect-time warning
  • Follow-up: bump to starknet.go v0.18.x once stable for native RPC 0.10 types

cawthorne added 13 commits June 9, 2026 10:44
- Fix golangci-lint issues in rpc_raw.go (unconvert, embedded field selectors)
- Fall back from pre_confirmed to pending on legacy RPC nodes (fixes TXM
  integration tests against starknet-devnet-rs)
- Add tests for fallback paths and error detection
- Revert mock import formatting to match Linux mockery output (check-tidy)
TXM paths use pre_confirmed only. CI and local devnet updated to
starknet-devnet-rs 0.8.2 (RPC 0.10.x) which supports the tag natively.
starknet-devnet-rs 0.8+ removed the HTTP /predeployed_accounts endpoint.
Fetch seed=0 accounts via devnet_getPredeployedAccounts JSON-RPC instead.
starknet-devnet-rs 0.8+ returns 404 on GET /predeployed_accounts.
Use devnet_getPredeployedAccounts JSON-RPC in TS test helpers and fix
noctx lint in Go FetchDevnetAccounts.
Migrate L1-L2 postman helpers to JSON-RPC, update Contract constructors for starknet.js v8, and fetch smoke-test devnet accounts via devnet_getPredeployedAccounts.
Poll POST /reports after async /execute responses so deploy operations receive contractAddress, and return proper errors instead of panicking on empty results.
Return OPERATION_ERROR details from immediate /execute responses instead of empty contractAddress, and document smoke CI dependency on a gauntlet-plus-plus image with RPC 0.9+ block tag support.
Requires gauntlet-plus-plus#1691 to be merged and v2.5.21 published to ECR.
Upgrade NethermindEth/starknet.go from v0.9.0 to v0.17.1 across relayer,
monitoring, and integration-tests. Native pre_confirmed block tag support
lets us delete rpc_raw.go and route nonce, fee, call, and event queries
through the SDK provider instead.

Adapt TXM to v0.17 transaction types (BroadcastInvokeTxnV3 alias, FeeUnit
renames, pointer ResourceBounds). Tolerate ErrIncompatibleVersion when
connecting to RPC 0.10.x nodes while the SDK still advertises 0.9.0.
Run go mod tidy for direct gnark-crypto usage, fix goimports and unconvert
lint in relayer, and vendor a patched chainlink-common/keystore so
integration-tests build against starknet.go v0.17 (upstream still uses
removed curve.Curve API).
Prune stale indirect module entries from the keystore fork go.sum so
check-tidy passes in CI.
cawthorne added 11 commits June 15, 2026 20:07
Update nixpkgs for go_1_26, revert integration-tests lint to nix develop,
and pin keystore to latest chainlink-common #2154 commit.
Match the old ECR image behavior: download gauntlet-v* ubuntu/macos assets,
install all bundle plugins on the CI host, and run gauntlet serve on node:18.
Align integration-tests with ad4255ca (fr.Modulus for OCR2 curve order).
Send install-plugins progress to stderr so eval "$(download-gauntlet-plus-plus.sh)"
only receives the export line. Also run Build Test Image in parallel without
gating smoke, and add integration test docs/clarity fixes.
Drop nix from the smoke test job in favor of ctf-setup-go, add a minimal
ci dev shell for the soak test image, and filter dependencies.txt before
install-plugins.sh so CI skips cross-chain plugin installs.
Re-align GenericContainerRequest fields in gauntletplusplus.go and stark.go
so golangci-lint goimports passes in CI.
After gauntlet-plus-plus #1708, nops releases include Starknet ops plugins
pre-built. Drop the full-tarball dependencies.txt filter and install-plugins
workaround from f1e97f5.
Move FetchDevnetAccounts and DevnetMint out of txm; delete unused
PrivateKeys0Seed, TestKeys, and SetupLocalStarknetNode. Update
integration-test imports and README link.
Keep the vendored go-gauntlet client as one-shot HTTP (/execute and /reports only) and poll async reports in gauntlet_plus_plus_starknet. Relocate devnet JSON-RPC helpers under relayer/pkg/starknet/devnet/utils.
Move freeport to indirect in relayer/go.mod and refresh mockery import ordering.
Restore Linux mockery import grouping for check-tidy, and make test-integration-prep build only Go relayer and Cairo contracts so the minimal ci nix shell no longer needs yarn.
The minimal .#ci nix shell has no Rust/cargo, so scarb fails inside Docker.
Build contracts on the CI runner before docker build and only run build-go-relayer in buildTests.
Clarify that #2154 commit ad4255ca is pinned via replace until a semver
tag beats transitive v1.0.2 under MVS; tagging does not require merge.
blockHashAndNumber returns the chain tip; a follow-up getBlockWithTxs by
hash can fail with RPC code 24 when the tip moves before HeadReporter runs.
Drop the temporary keystore replace pin; use chainlink-common and
keystore at bdae88e1 (starknet.go v0.17 starkkey) across integration-tests,
relayer, and monitoring.
Refresh mockery import grouping after chainlink-common bump so
check-tidy generate step passes on ubuntu-latest.
HeadReporter used blockHashAndNumber then getBlockWithTxs by hash or
number; the tip can move between those calls on any RPC version, yielding
code 24 Block not found. Use one getBlockWithTxs with the "latest" tag.
Comment thread relayer/pkg/chainlink/chain/chain.go Outdated
Use timeutil.JitterPct(0.1).Apply after chainlink-common bump surfaced
SA1019 staticcheck errors in OCR2 caches and TXM confirm loop.
Add HeadReporter/Starknet RPC rationale on LatestHead for review. Use
services.DefaultJitter; allow empty block_hash in telemetry when absent.
@cl-sonarqube-production

Copy link
Copy Markdown

Quality Gate failed Quality Gate failed

Failed conditions
1 Security Hotspot
0.0% Coverage on New Code (required ≥ 75%)
1 New Blocker Issues (required ≤ 0)

See analysis details on SonarQube

Catch issues before they fail your Quality Gate with our IDE extension SonarQube IDE SonarQube IDE

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants