Commit Graph
3436 Commits
Author SHA1 Message Date
Marvin Jones 6ed4ad8957 feat(lee): remove public_pre_states from privacy-preserving circuit output
Public accounts' pre-transaction values no longer need to be part of the
circuit's proven public output. Materialization already replays
public_diffs against live sequencer state, never the witnessed
pre-state, and proof-internal consistency has nothing left to check
once the field isn't part of the output at all. Duplicate/inconsistent
witnessing was already structurally impossible via the circuit's own
post_states tracking, independent of whether pre_state was exported, so
no new in-circuit assertion is needed to compensate.

Drop the field from PrivacyPreservingCircuitOutput and Message;
reimplement Message::public_account_ids() from deduped public_diffs
account ids. Update every downstream mirror (indexer protocol/FFI,
explorer UI, mock service) to the same id-only shape, and rebuild the
guest ELF, program artifacts, and prebuilt sequencer fixture to match
the changed journal layout.
2026-08-22 11:41:07 -04:00
Marvin Jones 58cc795ae8 docs(lee): trim/dedup docstrings introduced in PR3, fix clippy debt
Trim the signer_account_ids/PublicDiff explanation down to one canonical
location per concept instead of restating it at every call site, drop
dangling "See X" pointers in favor of letting readers look up the code
directly, and shorten the two malicious-victim test docstrings that
re-derived the same mechanism already covered elsewhere.

Separately, fix pre-existing clippy debt that was hidden behind compile
errors in the two guest binaries clippy could originally reach:
- update_from_diff implementations across most lez/programs/* guests,
  test_methods_guests, test_programs/guest, and the program_deployment
  examples returned Result<Data, Infallible> for no reason; now return
  Data directly.
- unchanged(...) helpers made const fn.
- Program::execute_update_from_diff/prove_update_from_diff took Account/Data
  by value without consuming them; now take references, dropping the
  now-unnecessary clones at every call site.
- One redundant clone, one redundant closure, one large enum variant
  (TxEvaluation::Accept now boxes its LeeTransaction), and four
  if-let/else patterns simplified to map_or_else/bool::then in the
  indexer FFI's AccountDiff/Claim conversions.

Rebuild every affected guest artifact and the prebuilt test fixture.
2026-08-22 11:37:57 -04:00
Marvin Jones fb5040781a docs(lee): drop no-content See pointer on Message::public_pre_states
A bare "See X" with nothing else doesn't add anything a reader
wouldn't already get from the matching field name and
from_circuit_output's mapping a few lines below. Matches the other
undocumented fields on Message.
2026-08-22 11:35:22 -04:00
Marvin Jones 1e2b0b16ee docs(lee): trim duplicated public_pre_states doc on Message
Message::public_pre_states restated PrivacyPreservingCircuitOutput::
public_pre_states's doc almost verbatim. Point to it instead, matching
the See-pointer style already used by Message's other two mirrored
fields (public_diffs, signer_account_ids).
2026-08-22 11:35:22 -04:00
Marvin Jones 71b545e385 fix(lee): adapt PR3 diff-emission cherry-pick to Data-typed diff_data
The cherry-picked PR3 commit predates the diff_data: Vec<u8> -> Data
refactor, so its diff_data-adjacent code needed re-threading through
Option<Data> instead of Option<Vec<u8>>. Also drops a duplicate
expected_diff() helper left behind by the merge, and fixes an
env::verify owner-resolution mismatch in execution_state.rs: it was
checking the calling program's update_from_diff receipt unconditionally,
while the host (circuit/mod.rs) proves that receipt against the
resolved owner program (falling back to the caller only when the
account is still unclaimed). The circuit-side check now mirrors the
host's resolution.
2026-08-22 11:35:22 -04:00
Marvin Jones c010843a6a feat(lee): decouple privacy proof verification from live public state (incremental update PR3)
The privacy-preserving circuit's output no longer commits materialized
public-account post-states; it commits the raw AccountDiffs it produced
instead, plus a signer_account_ids set the sequencer cross-checks
against real signatures. Proof verification now checks the proof
against exactly what the circuit witnessed, with no dependency on live
sequencer state, fixing the race condition where an unrelated public
transaction landing between proving and validation would invalidate an
otherwise-valid proof. Materialization moves to a separate step that
replays public_diffs against whatever the live account state actually
is at apply time, mirroring how the public-transaction path already
applies diffs.

Also updates lez/indexer and lez/explorer_service for the new Message
shape, and fixes the pre-existing clippy debt this surfaced across
lez/programs (needless_pass_by_value/missing_const_for_fn/etc.) now
that the workspace builds and lints clean end to end.
2026-08-22 11:32:22 -04:00
Marvin Jones 5160b9bb69 Fmt fixes 2026-08-22 10:28:06 -04:00
Marvin Jones 15dbd6f1a6 chore(lez,lee): fix clippy pedantic/nursery/restriction findings
Resolves needless_pass_by_value (take AccountWithMetadata/Account by
reference where only borrowed), unnecessary_wraps (drop Result<Data,
Infallible> from passthrough update_from_diff implementations),
missing_const_for_fn, useless_let_if_seq, arbitrary_source_item_ordering,
too_many_arguments, redundant_clone, and useless_conversion across the
guest programs and lee core touched by the incremental-updates rebase.
2026-08-22 02:03:43 -04:00
jonesmarvin8 b676c6c360 chore(lee,lez): fix pre-existing rustfmt violations (#776)
marvin/incremental-updates-2 was not cargo +nightly fmt --check clean;
these files had drifted since the last fmt pass (mostly unwrapped
long import lists). No functional changes.
2026-08-22 01:23:17 -04:00
Marvin Jones 687cc211f9 fix(lez): update programs for diff_data's move to Data
Rebasing onto marvin/incremental-updates-1's AccountDiff.diff_data:
Option<Data> change (was Option<Vec<u8>>) needed real fixes, not just a
mechanical rebase: every program's update_from_diff and every
diff_data-constructing call site was still written against the old
Vec<u8> shape. Several sites were doing a pointless Data -> Vec<u8> ->
Data round trip to satisfy the old field type; those now just pass the
Data value straight through. The host-side
execute_update_from_diff/prove_update_from_diff/write_update_from_diff_inputs
in lee/state_machine move to Data too, matching what now flows from
lee_core.
2026-08-22 01:22:31 -04:00
Marvin Jones cb41fa7918 docs(lez): drop repeated update_from_diff passthrough comment
The same "diff_data is already the fully-computed encoding, so this is
a passthrough" explanation was copy-pasted across 13 update_from_diff
implementations. The general contract is already documented once,
centrally, on ProgramCall::UpdateFromDiff in lee_core; each per-program
repeat added nothing beyond what the unused _pre_state parameter and a
one-line body already convey.
2026-08-22 01:18:26 -04:00
Marvin Jones e43611c7cc feat(lee): wire programs to diff-native execution (incremental update PR2)
Programs now report AccountDiff/AccountDiffOutput instead of full
post-states; balance changes are applied via apply_balance_diff's
checked arithmetic at the protocol level rather than checked in-guest,
and data changes are materialized through a new update_from_diff
guest entrypoint (trusted execution for public transactions, proven
via a recursive receipt for the privacy-preserving circuit). All 15
production programs and test/example guest programs are converted;
attack-surface guest programs that are now structurally impossible
(nonce/program_owner mutation) or redundant (manual balance-sufficiency
bypass) are moved to a dormant/ directory rather than deleted outright.
2026-08-22 01:15:25 -04:00
Marvin Jones cdfae3793c Merge remote-tracking branch 'origin/dev' into marvin/incremental-updates-1
# Conflicts:
#	test_fixtures/fixtures/prebuilt_sequencer_db.dump
2026-08-21 23:44:19 -04:00
Marvin Jones 3e7d2be961 fix(lee): clarify UpdateFromDiffOutput docs, drop needless clones, rebuild artifacts
UpdateFromDiffOutput's docstring didn't make clear that this journal is
never the privacy-preserving circuit's own output — it's a separate
program's inner receipt, reconstructed and checked via env::verify, then
discarded. Clarify that, and trim the rest of the comment down.

write_update_from_diff_output took its inputs by reference and cloned
them to build the owned UpdateFromDiffOutput it commits. It has no
callers yet on this branch and nothing else needs the values afterward,
so take them by value and move them in instead.

Rebuild every guest artifact and the prebuilt sequencer fixture: they
were stale relative to this branch's own committed source (confirmed via
mtimes — most of lee_core and every touched program's source postdated
the checked-in .bin files), causing spurious DeserializeBadBool failures
for anyone running tests against a fresh checkout without first running
`just build-artifacts`.
2026-08-21 23:40:07 -04:00
Sergio Chouhy 1adf2432b2 Merge pull request #725 from logos-blockchain/schouhy/lez-seqeuncer-self-join-finality-queue
feat(sequencer): Implement sequencer join/exit queues
2026-08-21 14:54:28 -03:00
Sergio Chouhy cade003868 fix(lez/sequencer): use slot to track finalized config ops 2026-08-21 11:33:01 -03:00
Sergio Chouhy c1644a8cc5 feat(sequencer): implement sequencer join/exit queues 2026-08-21 11:32:31 -03:00
Marvin Jones d0041fc909 Merge remote-tracking branch 'origin/dev' into marvin/incremental-updates-1
# Conflicts:
#	Cargo.lock
#	artifacts/lee/privacy_preserving_circuit/privacy_preserving_circuit.bin
#	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/sequencer_stake.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-20 22:31:14 -04:00
Marvin Jones a7ceef3879 chore(lee,lez): bump h2 to fix RUSTSEC-2026-0258, run cargo fmt, rebuild artifacts
h2 0.4.14 had an unbounded empty DATA frames flaw (low severity); bumped to
0.4.18 via cargo update -p h2. cargo deny check now passes clean
(advisories/bans/licenses/sources all ok).

Rebuild every guest artifact and the prebuilt test fixture to match the
dependency bump.
2026-08-20 22:16:18 -04:00
7dac077487 test: add cucumber environment with initial ported integration tests (#741)
This PR introduces the initial Cucumber-based integration test framework for the LEZ, building on the testing-framework integration work started by @andrussal, adds the first set of Cucumber integration scenarios and establishes reusable infrastructure for future Cucumber scenarios.

---------

Co-authored-by: Andrus Salumets <salumets.andrus@gmail.com>
Co-authored-by: Sergio Chouhy <sergio.chouhy@gmail.com>
Co-authored-by: Sergio Chouhy <41742639+schouhy@users.noreply.github.com>
Co-authored-by: Roman <zajic@zajic.net>
Co-authored-by: Daniil Polyakov <arjentix@gmail.com>
Co-authored-by: Moudy <m.ellaz@hotmail.com>
Co-authored-by: andrussal <salumets.andrus@gmail.com>
2026-08-20 21:15:05 +02:00
Marvin Jones 795b79a2ac refactor(lee_core): carry diff_data as Data instead of raw bytes
AccountDiff.diff_data, ProgramCall::UpdateFromDiff.diff_data,
UpdateFromDiffOutput.diff_data, and write_update_from_diff_output's
parameter all move from Vec<u8>/&[u8] to Data, so this payload carries
Data's length restriction (DATA_MAX_LENGTH) and validated deserialization
everywhere it flows, rather than only once it lands in account.data.
2026-08-20 12:32:48 -04:00
Moudy 03f46bf191 Merge pull request #731 from logos-blockchain/moudy/cross-zone-halt-operability 2026-08-20 13:00:44 +02:00
moudyellaz 2d7dbf4d85 Merge remote-tracking branch 'origin/dev' into moudy/cross-zone-halt-operability
# Conflicts:
#	artifacts/lez/programs/cross_zone_inbox.bin
#	artifacts/lez/programs/ping_receiver.bin
#	artifacts/lez/programs/wrapped_token.bin
#	test_fixtures/fixtures/prebuilt_sequencer_db.dump
2026-08-20 12:13:50 +02:00
Moudy 84eb345ea9 Merge pull request #771 from logos-blockchain/moudy/cross-zone-target-auth
feat(cross-zone)!: land source authority and guest cycle hygiene to dev
2026-08-20 08:34:18 +02:00
moudyellaz cbdb5e7646 Merge remote-tracking branch 'origin/dev' into moudy/cross-zone-target-auth
# Conflicts:
#	test_fixtures/fixtures/prebuilt_sequencer_db.dump
2026-08-20 02:37:25 +02:00
Daniil Polyakov 8f7a93e2ca Merge pull request #736 from logos-blockchain/arjentix/actors-phase-2
refactor(sequencer): actor architecture, phase 2: Storage Actor
2026-08-20 01:27:08 +03:00
moudyellaz 968a17f867 Merge remote-tracking branch 'origin/dev' into moudy/cross-zone-target-auth
# Conflicts:
#	Cargo.lock
#	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-19 23:40:53 +02:00
Daniil Polyakov 578350beea refactor(sequencer, storage): move transaction index into StorageActor 2026-08-20 00:37:23 +03:00
Daniil Polyakov 6290f09127 fix(executor): make GetBlockRange bounded, non-over-allocating and non-blocking 2026-08-20 00:37:23 +03:00
Daniil Polyakov 8af13dd29d fix(ci): pass GITHUB_ACTIONS in ci image 2026-08-20 00:37:23 +03:00
Daniil Polyakov 7249f2f881 refactor(sequencer): actor architecture, phase 2: Storage Actor 2026-08-20 00:37:23 +03:00
moudyellaz 3d9c10fbce Merge remote-tracking branch 'origin/moudy/cross-zone-peer-cache-bound' into moudy/cross-zone-halt-operability 2026-08-19 21:13:18 +02:00
Moudy 7bcf5f04c6 Merge pull request #763 from logos-blockchain/moudy/cross-zone-peer-key-set
feat(cross_zone)!: accept peer blocks signed by any key in a configured set
2026-08-19 21:04:11 +02:00
Moudy dbb8e9245c Merge pull request #743 from logos-blockchain/moudy/cross-zone-peer-cache-bound
feat(indexer): bound the peer-block cache behind a hash-certified refetch
2026-08-19 20:35:37 +02:00
Moudy 4993885b6e Merge pull request #712 from logos-blockchain/moudy/cross-zone-source-authority
feat(cross-zone)!: let a target's peer sources be updated by a named authority
2026-08-19 20:34:28 +02:00
Moudy 9a7a71abf2 Merge pull request #718 from logos-blockchain/moudy/pending-dispatch-per-key
fix(storage): store pending cross-zone dispatches as per-message entries
2026-08-19 02:35:03 +02:00
moudyellaz 7c9d9dac10 Merge remote-tracking branch 'origin/dev' into moudy/pending-dispatch-per-key
# Conflicts:
#	lez/sequencer/core/src/cross_zone_watcher.rs
2026-08-19 01:59:01 +02:00
jonesmarvin8 96c8577db8 refactor(lee): fold program storage into public_state (#723)
V03State.programs is gone; deployed programs now live directly in public_state, keyed by AccountId::from(program_id) same as any other account. insert_program sets program_owner to a new reserved sentinel, PROGRAM_STORAGE_OWNER, instead of leaving it at the default.

That ownership choice is load-bearing now in a way it wasn't before: once program accounts share the same map as everything else, they're reachable through ordinary dispatch, so program_owner determines whether they're claimable/writable. Left unclaimed, a program invocation could legitimately claim a program's storage account via the normal claim path and then rewrite its elf; self-ownership has the same flaw, since it authorizes exactly the program whose own invocation would touch its own storage account. The reserved sentinel makes every program account unwritable by construction, since no real chained_call.program_id will ever derive to it.

Also centralizes the program-ownership check behind V03State::get_program and applies the program_owner AccountId migration to code added after the earlier rebase.
2026-08-18 12:44:06 -04:00
moudyellaz 72782beb34 chore: regenerate artifacts and the test fixture, bump h2 for RUSTSEC-2026-0258 2026-08-18 18:35:15 +02:00
moudyellaz aeb71b73ad test(cross_zone): cover multi-key acceptance at every enforcement site 2026-08-18 18:20:49 +02:00
moudyellaz 4309c2a214 feat(cross_zone)!: accept peer blocks signed by any key in a configured set
BREAKING CHANGE: CrossZonePeer.expected_block_signing_pubkey (single optional
key) is renamed to expected_block_signing_pubkeys (a list, empty = unchecked),
and cross-zone config now refuses unknown fields at startup.
2026-08-18 18:06:25 +02:00
jonesmarvin8andClaude Sonnet 5 2ba1ecd609 refactor!(lee): Change program_owner: ProgramId to AccountId (#722)
* feat(lee): store deployed programs as Account-shaped state, keyed by AccountId

Program-as-Account migration, first slice: V03State.programs becomes
HashMap<AccountId, Account> instead of HashMap<ProgramId, Program>,
with the elf held directly in Account.data. The map key is derived
from ProgramId via a new 1:1 From<ProgramId> for AccountId conversion
(both types are exactly 32 bytes) rather than a hash, since ProgramId
is already content-derived from the elf.

Account.program_owner stays ProgramId-typed everywhere - this only
changes how deployed programs are stored and looked up host-side, not
the dispatch/authorization model any guest program logic depends on.
Dispatch resolves a ChainedCall's program_id by converting to
AccountId, fetching the Account, and reconstructing a Program via
new_unchecked for execution.

DATA_MAX_LENGTH is raised from 100 KiB to 700 KiB to fit real program
elfs (observed 375 KB-631 KB) directly in Account.data; noted in its
docstring as a rough placeholder pending real transaction/block-size
budget analysis.

* fix(lee): store deployed programs as Account-shaped state, correct SeenShard cap

Corrects lee/state_machine internals for the Program-as-Account migration
and fixes SeenShard::MAX_DELIVERIES, which was still calibrated for the
old 100 KiB DATA_MAX_LENGTH instead of the current 700 KiB cap. Rebuilds
program artifacts and the sequencer test fixture to match.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* address PR #720 review nits

- Use FIXME instead of TODO for the temporary ProgramId->AccountId
  conversion, per review convention for patches guaranteed to be
  fixed later.
- Derive cross_zone_inbox's MAX_DELIVERIES from DATA_MAX_LENGTH
  instead of a hand-recomputed literal, so it stays in sync
  automatically the next time the cap changes.

* 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.

* chore(lee): rebuild artifacts after rebase, drop unused base58 dep

Rebases marvin/program-as-account-2 onto the updated
marvin/program-as-account (SeenShard cap fix), regenerating program
and circuit artifacts plus the sequencer test fixture to match.
Also removes lez/wallet's now-unused base58 dependency, dead since
AccountId gained its own Display/FromStr base58 encoding.

* docs(lee): trim DEFAULT_PROGRAM_OWNER and From<AccountId> for ProgramId docs

* test(lee): add known-answer tests for ProgramId/AccountId conversion, rebuild artifacts

* fix(lee): apply program_owner AccountId migration to code added after rebase

dev grew new program_owner call sites (sequencer_stake genesis/config
handling, committee_discovery, a new selective_pda_delegator test
program, and related tests) after this branch's ProgramId->AccountId
migration commit was originally written, so they predated the .into()
sweep and didn't conflict during the rebase - they just still assumed
the old ProgramId-typed field. Converts all of them, fixes a stray
unseparated hex literal clippy caught along the way, and rebuilds
artifacts against the fixed source.

* chore(lee): regenerate test fixture after rebasing onto dev

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-18 11:26:57 -04:00
jonesmarvin8andClaude Sonnet 5 d52c76e2b5 refactor(lee): change programs shape (#720)
* feat(lee): store deployed programs as Account-shaped state, keyed by AccountId

Program-as-Account migration, first slice: V03State.programs becomes
HashMap<AccountId, Account> instead of HashMap<ProgramId, Program>,
with the elf held directly in Account.data. The map key is derived
from ProgramId via a new 1:1 From<ProgramId> for AccountId conversion
(both types are exactly 32 bytes) rather than a hash, since ProgramId
is already content-derived from the elf.

Account.program_owner stays ProgramId-typed everywhere - this only
changes how deployed programs are stored and looked up host-side, not
the dispatch/authorization model any guest program logic depends on.
Dispatch resolves a ChainedCall's program_id by converting to
AccountId, fetching the Account, and reconstructing a Program via
new_unchecked for execution.

DATA_MAX_LENGTH is raised from 100 KiB to 700 KiB to fit real program
elfs (observed 375 KB-631 KB) directly in Account.data; noted in its
docstring as a rough placeholder pending real transaction/block-size
budget analysis.

* fix(lee): store deployed programs as Account-shaped state, correct SeenShard cap

Corrects lee/state_machine internals for the Program-as-Account migration
and fixes SeenShard::MAX_DELIVERIES, which was still calibrated for the
old 100 KiB DATA_MAX_LENGTH instead of the current 700 KiB cap. Rebuilds
program artifacts and the sequencer test fixture to match.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* address PR #720 review nits

- Use FIXME instead of TODO for the temporary ProgramId->AccountId
  conversion, per review convention for patches guaranteed to be
  fixed later.
- Derive cross_zone_inbox's MAX_DELIVERIES from DATA_MAX_LENGTH
  instead of a hand-recomputed literal, so it stays in sync
  automatically the next time the cap changes.

* chore: regenerate artifacts after rebasing onto dev

Binary program artifacts and the prebuilt sequencer DB dump were left
as rebase-conflict placeholders; regenerated via `just build-artifacts`
against the fully rebased source.

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-18 10:06:42 -04:00
Artem Gureev 3a718c32f5 Merge pull request #683 from logos-blockchain/artem/private-authorization-longevity
fix!(lee): scope private PDA authorization to the callee subtree
2026-08-18 17:31:14 +04:00
agureev 9b75c38a6d chore: update dep to fix deny 2026-08-18 15:11:03 +04:00
Moudy f2058b4c38 Merge pull request #744 from logos-blockchain/moudy/guest-cycle-hygiene
perf(lez)!: borrow account data in the guests instead of cloning
2026-08-18 00:57:09 +02:00
moudyellaz af090f3ce9 refactor(indexer): make the cache window a NonZeroU32 2026-08-18 00:55:58 +02:00
Moudy 3e1412ee6a Merge pull request #721 from logos-blockchain/moudy/cross-zone-shared-acceptance
fix(cross-zone): one peer-block acceptance policy for watcher and verifier
2026-08-18 00:33:09 +02:00
agureev 7b6b439eb2 chore: artifacts 2026-08-17 22:20:01 +04:00
Artem Gureev f83cf9b300 perf(lee): extend the caller set for the child authorization scope 2026-08-17 17:29:56 +00:00