Commit Graph
111 Commits
Author SHA1 Message Date
Marvin Jones 7ce202c64e refactor(lee): migrate ChainedCall/Message program reference from ProgramId to AccountId
Chained-call and public-transaction dispatch now address the target
program directly by AccountId instead of routing through ProgramId and
converting internally, closing the gap that blocked PDA-addressed
program invocation. The field is named program_account_id (not
account_id) to stay unambiguous next to the account_ids list it sits
beside in the same structs.

Execution/PDA-derivation logic that fundamentally needs the RISC0 image
id (self_program_id, caller_program_id, env::verify, PDA seed
derivation) stays ProgramId-typed, recovering it from the dispatched
AccountId via the existing bijection where needed.
2026-08-14 15:54:50 -04:00
Marvin Jones 087f6a6c69 feat(lee): migrate Account.program_owner from ProgramId to AccountId
Account.program_owner is now AccountId-typed instead of ProgramId,
via a new bijective From<ProgramId> for AccountId / From<AccountId>
for ProgramId conversion pair (pure byte reinterpretation, not a
hash - both types are exactly 32 bytes). Adds DEFAULT_PROGRAM_OWNER
as the AccountId-typed counterpart to DEFAULT_PROGRAM_ID, used at
every program_owner comparison/claim site instead of an inline
AccountId::default().

Touches every call site across lee_core, lee (including the
guest-side privacy-preserving circuit), all 16 deployed guest
programs, wallet/wallet-ffi, indexer_ffi/indexer_service/
indexer_service_protocol, sequencer_core, testnet_initial_state,
system_accounts, cross_zone, storage, cycle_bench, and
integration_tests - mostly mechanical .into() conversions, plus two
simplifications: wallet's manual base58 encode/decode of
program_owner was dead code once it's AccountId (which already has
Display/FromStr), and the FFI crates' program_owner field now reuses
the existing generic FfiBytes32 wrapper instead of the now-unused
FfiProgramId one.

Rebuilds every guest ELF artifact and the prebuilt sequencer test
fixture via just build-artifacts, since execute_and_prove runs
against the checked-in precompiled privacy_preserving_circuit.bin,
which isn't rebuilt automatically by cargo test/check.
2026-08-13 16:55:51 -04:00
moudyellaz b9173e675f Merge remote-tracking branch 'origin/dev' into moudy/cross-zone-outbox-log
# Conflicts:
#	test_fixtures/fixtures/prebuilt_sequencer_db.dump
#	tools/cross_zone_chat/src/main.rs
2026-08-13 09:35:37 +02:00
Pravdyvy f0861d2497 Merge branch 'dev' into Pravdyvy/multi-sequencer-integration-tests 2026-08-13 04:10:13 +03:00
moudyellaz ae3fd849e3 Merge remote-tracking branch 'origin/dev' into moudy/cross-zone-outbox-log
# Conflicts:
#	artifacts/lez/programs/amm.bin
#	artifacts/lez/programs/associated_token_account.bin
#	artifacts/lez/programs/authenticated_transfer.bin
#	artifacts/lez/programs/bridge.bin
#	artifacts/lez/programs/bridge_lock.bin
#	artifacts/lez/programs/clock.bin
#	artifacts/lez/programs/cross_zone_inbox.bin
#	artifacts/lez/programs/cross_zone_outbox.bin
#	artifacts/lez/programs/faucet.bin
#	artifacts/lez/programs/pinata.bin
#	artifacts/lez/programs/pinata_token.bin
#	artifacts/lez/programs/ping_receiver.bin
#	artifacts/lez/programs/ping_sender.bin
#	artifacts/lez/programs/token.bin
#	artifacts/lez/programs/vault.bin
#	artifacts/lez/programs/wrapped_token.bin
#	test_fixtures/fixtures/prebuilt_sequencer_db.dump
2026-08-12 22:37:45 +02:00
Daniil Polyakov a4fa9e08e2 fix(sequencer): fixes after rebase 2026-08-12 23:00:22 +03:00
Daniil Polyakov f91d0da8e1 refactor(sequencer): add test for mempool and bring back standalone feature 2026-08-12 22:50:50 +03:00
Daniil Polyakov 9e54af0ce4 fix(sequencer): bring back Drop for SequencerHandle and remove StoreRelease 2026-08-12 22:50:50 +03:00
Pravdyvy e146f9ff5a Merge branch 'dev' into Pravdyvy/multi-sequencer-integration-tests 2026-08-12 18:43:09 +03:00
moudyellaz f846e7ac73 feat(sequencer)!: suffix the sequencer db directory with its channel id
BREAKING CHANGE: the sequencer database moves from <home>/rocksdb to <home>/rocksdb-<channel id>; an existing home fresh-starts (with a warning naming the old directory) unless the directory is renamed.
2026-08-12 15:25:01 +02:00
moudyellaz f26193eedc fix(cross-zone)!: drop the inbox route allowlist now targets authorize themselves
BREAKING CHANGE: InboxConfig is just self_zone; allowed_routes, InboxConfig::permits
and routes_permit are gone, and build_inbox_init_config_tx no longer takes the
cross-zone config. The operator's per-peer routes still configure the same thing,
fanned out at genesis into each target's own config instead. The watcher keeps
only a hygiene filter refusing a peer that names a sequencer-only program, kept
host-side so it cannot make the verifier disagree.
2026-08-10 14:15:57 +02:00
moudyellaz 6a15eaec93 feat(cross-zone)!: have ping_receiver authorize its own peer sources
BREAKING CHANGE: ping_receiver gains a config PDA holding the deliverer and the
peer sources it accepts, ReceiverInstruction gains InitConfig, and Record takes
[source marker, config, record] instead of the record alone. Every emitter aimed
at ping_receiver must name its config account in target_accounts. The
ping_receiver and ping_sender image ids move, and a fresh genesis is required.
2026-08-10 13:30:28 +02:00
moudyellaz 03033f0f41 feat(cross-zone)!: have wrapped_token authorize its own peer sources
BREAKING CHANGE: the wrapped-token config PDA holds a borsh WrappedTokenConfig
(minter plus authorized source pairs) rather than a bare minter id, and
Instruction::InitConfig takes it as a single field. Mint now refuses a source the
token has not authorized, checked against the inbox's source marker. The
wrapped_token image id moves, and bridge_lock's with it, since it links
wrapped_token_core.
2026-08-10 11:59:00 +02:00
moudyellaz 421e76b946 feat(cross-zone)!: pin bridge_lock's outbox, mint target, and mint accounts
BREAKING CHANGE: Instruction::Lock drops outbox_program_id and takes the
bridge-lock config PDA as its first account, changing both the instruction
encoding and the account list. bridge_lock's image id moves, relocating its
escrow and config PDAs and requiring a fresh genesis. Sequencer, indexer and
every peer zone must upgrade together: a stale decoder re-derives a different
dispatch and reports Forged.
2026-08-09 19:02:28 +02:00
moudyellaz a04b3eeaa9 feat(cross-zone)!: pin ping_sender's outbox to a genesis-seeded config
BREAKING CHANGE: SenderInstruction::Send drops outbox_program_id and takes the
sender config PDA as its first account, changing both the instruction encoding
and the account list. ping_sender's image id moves, relocating its PDAs and
requiring a fresh genesis. Sequencer, indexer and every peer zone must upgrade
together: a stale decoder re-derives a different dispatch and reports Forged.
2026-08-09 18:01:38 +02:00
moudyellaz bb54bd0581 docs: simplify comments 2026-08-07 18:30:14 +02:00
Pravdyvy f7b9abdc1e Merge branch 'dev' into Pravdyvy/multi-sequencer-integration-tests 2026-08-07 14:43:13 +03:00
Pravdyvy 3cf35096d1 fix: suggestions fix 2026-08-07 14:39:06 +03:00
moudyellaz 5cbd821261 fix(cross-zone)!: shard the inbox seen-set per peer block, keyed by tx index
Closes #676.

BREAKING CHANGE: the seen-shard PDA address and its data layout both change, so
every message delivered under the old layout becomes deliverable again at the new
address, and the old shards are orphaned. A fresh genesis is required.
2026-08-07 11:48:56 +02:00
moudyellaz af2a025b8f feat(cross-zone)!: bind a delivery to the peer block hash it came from
BREAKING CHANGE: `CrossZoneMessage` gains `src_block_hash`, changing the risc0
encoding of `cross_zone_inbox::Instruction::Dispatch` and the inbox image id,
and with it the inbox config and seen-shard PDA addresses. A pending dispatch
record written by earlier code no longer names a registered program, so it fails
production and is dead-lettered rather than delivered. Drain the pending list
before upgrading, or accept that in-flight deliveries are lost.
2026-08-07 11:01:16 +02:00
moudyellaz e274a4b29d feat(sequencer): count and expose the cross-zone deliveries given up on 2026-08-07 10:13:30 +02:00
moudyellaz c245434f09 feat(sequencer): dead-letter the cross-zone deliveries this node gives up on 2026-08-07 02:57:34 +02:00
Moudy cfc7942c3c Merge branch 'dev' into moudy/cross-zone-content-bound-key 2026-08-06 20:59:46 +02:00
erhant 80a56be5aa fix(sequencer): properly adopt / orphan blocks in false-pos from L1 2026-08-06 20:44:48 +03:00
moudyellaz c7739733db fix(indexer): deliver only from peer blocks inside the verified run 2026-08-06 10:17:12 +02:00
moudyellaz 5c28c4cc0c fix(sequencer): deliver only from a peer block on its verified chain 2026-08-05 20:49:41 +02:00
moudyellaz e4dcc39277 feat(storage): add a durable per-peer cross-zone chain tip 2026-08-05 19:27:06 +02:00
Pravdyvy b802e1f324 Merge branch 'dev' into Pravdyvy/multi-sequencer-integration-tests 2026-08-04 17:03:41 +03:00
Daniil Polyakov 409ebb48cc feat(sequencer): expose zone_sdk priority_fee in config 2026-08-04 14:07:06 +03:00
Pravdyvy 9e4b489512 Merge branch 'dev' into Pravdyvy/multi-sequencer-integration-tests 2026-08-04 07:23:35 +03:00
Daniil Polyakov cd835bd0c9 feat(sequencer): add possibility to disable metrics 2026-08-03 23:46:35 +03:00
Daniil Polyakov 218955dd19 feat(sequencer): add status label to transaction application time 2026-08-03 23:46:35 +03:00
Daniil Polyakov 037901fe94 fix(sequencer): differentiate between height and blocks produced by this sequencer 2026-08-03 23:46:35 +03:00
Daniil Polyakov 97152b8df6 chore(sequencer): apply snake_case convention to labels 2026-08-03 23:46:35 +03:00
Daniil Polyakov f2e92a9c1f feat(sequencer): add metrics_address config field 2026-08-03 23:46:35 +03:00
Daniil Polyakov d0ae9c2768 chore(metrics): rename writing feature to record 2026-08-03 23:46:35 +03:00
Daniil Polyakov aa6969386e refactor(metrics): improve metrics setup 2026-08-03 23:46:35 +03:00
Daniil Polyakov 849bb6bbe1 feat(metrics): improve mempool and failed transaction metrics & panels 2026-08-03 23:46:35 +03:00
Daniil Polyakov ea36fa2e93 refactor(metrics): move metrics into a separate crates and reuse names in dashboard generation 2026-08-03 23:46:35 +03:00
Daniil Polyakov 8afd2cea66 feat(docker): introduce monitoring 2026-08-03 23:46:34 +03:00
Daniil Polyakov 97071b575a feat(sequencer): add initial metrics 2026-08-03 23:46:34 +03:00
Pravdyvy 0def5631d9 feat(integration tests): working cross-zone test context, in progress, may break usual tests. 2026-08-03 17:40:41 +03:00
moudyellaz 09f4bfdd03 feat(cross-zone)!: authorize deliveries by source program and target
BREAKING CHANGE: `CrossZonePeer.allowed_targets` is replaced by `allowed_routes`,
a list of `{src_program_id, target_program_id}` pairs. `InboxConfig.allowed_peers`
is removed.
2026-08-03 04:40:05 +02:00
Daniil Polyakov 3d009acb9c fix(sequencer): resubmit orphaned tx which comes only after final tip 2026-07-31 19:54:58 +03:00
erhant 9d9b75d42f fix(sequencer): fund channel config transaction via node wallet" 2026-07-31 18:26:34 +03:00
Daniil Polyakov 93a93c6b96 feat(sequencer): disable withdraws 2026-07-31 18:26:33 +03:00
Daniil Polyakov 50ac64c37d fix(bedrock): fix new bedrock image setup 2026-07-31 18:26:33 +03:00
Daniil Polyakov 7e283f5fed fix(sequencer): rework WithdrawalReconciliationKey by using released note id 2026-07-31 18:26:33 +03:00
Daniil Polyakov b9a0ebef6c feat(zone_sdk): update to a new bedrock & zone sdk 2026-07-31 18:25:56 +03:00
moudyellaz c14bfe3f9f feat(cross-zone): record peer deliveries instead of injecting them 2026-07-31 16:01:41 +02:00