Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
bb88f3e
feat: generate runtime signer and init validation checks (#4) (#6)
jimmy-claw Feb 20, 2026
474c0ff
feat: support external Instruction enum via #[nssa_program(instructio…
jimmy-claw Feb 20, 2026
40ab93a
feat: support arg-based and multi-seed PDA derivation (#1) (#8)
jimmy-claw Feb 20, 2026
5e3ed33
feat: support variable-length account lists via Vec<AccountWithMetada…
jimmy-claw Feb 20, 2026
1a0eefb
chore: add smoke test script
jimmy-claw Feb 20, 2026
1c6724e
fix: codegen bugs from merged PRs #6 and #9
jimmy-claw Feb 20, 2026
dc79736
feat: migrate all deps from schouhy/full-bedrock-integration to lssa …
jimmy-claw Feb 20, 2026
2b7518c
fix: smoke test finds guest binary in correct path (#12)
jimmy-claw Feb 20, 2026
6395eca
feat: smoke test with sequencer deploy/submit (#14)
jimmy-claw Feb 20, 2026
8b61cab
fix: use nssa_framework:: instead of nssa_framework_core:: in macro c…
jimmy-claw Feb 20, 2026
7f15ec3
Rename nssa-framework → lez-framework (#17)
jimmy-claw Feb 23, 2026
aa6f64b
feat: add lez-client-gen crate for IDL-based client/FFI codegen (#20)
jimmy-claw Feb 24, 2026
f812d36
feat: extend IDL with lssa-lang compatible fields (#18)
jimmy-claw Feb 25, 2026
ece5ad0
fix: cfg-gate generated main() to enable inline unit tests (#25)
danisharora099 Feb 25, 2026
5f4ef34
fix: recognize AccountId as a known IDL type (#28)
jimmy-claw Feb 25, 2026
d5101bb
feat: e2e test suite for scaffold → build → IDL → FFI → test pipeline…
jimmy-claw Feb 25, 2026
8b0d088
fix: replace PDA XOR with SHA-256 concat to match on-chain derivation…
jimmy-claw Feb 25, 2026
5c21f41
feat(ffi-codegen): emit tx-building FFI that calls generated client (…
jimmy-claw Feb 25, 2026
b73b950
fix: pin lssa deps to dee3f7fa (matches logos-scaffold template)
Feb 25, 2026
3476a0b
fix: pin lssa deps to 767b5afd (lssa main HEAD 2026-02-24)
Feb 25, 2026
1e14697
Merge pull request #33 from jimmy-claw/jimmy/pin-lssa-rev
jimmy-claw Feb 25, 2026
c73378a
fix: emit instruction_type in IDL for external instruction enums (#35)
jimmy-claw Feb 26, 2026
d82b485
feat: lez-client-gen generates PDA compute helpers from IDL (#40)
jimmy-claw Feb 26, 2026
a41c9de
feat: lez-client-gen supports u64 arg seeds in PDA helpers
jimmy-claw Feb 26, 2026
7129ac5
fix: emit .to_le_bytes() for u64 arg seeds in instruction builder PDA
jimmy-claw Feb 26, 2026
28a1676
Fix: skip rest:true accounts in required args check (execute without …
Feb 27, 2026
801478f
Fix: skip rest:true accounts in tx building when not provided
Feb 27, 2026
8a276a5
fix: handle rest accounts with 0 entries in display and account_ids
Feb 27, 2026
8149afc
feat(lez-cli): add pda subcommand to compute PDAs from IDL (#47)
jimmy-claw Feb 27, 2026
a041fc4
feat(lez-cli): raw pda command — compute arbitrary PDA without IDL (#49)
jimmy-claw Feb 27, 2026
0d2ee3e
fix: make rest accounts optional in CLI (#43)
jimmy-claw Feb 27, 2026
a567481
fix(lez-cli): raw pda dispatch — program-id consumed by global parser…
jimmy-claw Feb 27, 2026
864fbb5
fix(serialize): handle Vec<u32> — both U32Array and Raw CSV string fo…
jimmy-claw Feb 27, 2026
7b2104b
fix: parse and serialize Vec<u8> and Vec<u32> properly (#53)
jimmy-claw Feb 27, 2026
eed4ad7
fix: correct program-id endianness in hex parsing and PDA derivation …
jimmy-claw Feb 28, 2026
eefd20d
docs: rename to SPEL, update README with acronym and ecosystem table
Feb 28, 2026
233a066
docs: fix SPEL acronym — Smart Program Engine for Logos
Feb 28, 2026
3276fa8
chore: update URLs for logos-co org transfer
Mar 6, 2026
d6992d4
Merge pull request #58 from logos-co/jimmy/logos-co-transfer-urls
vpavlin Mar 9, 2026
976d103
docs: add pda subcommand, Vec types, and --program-id flag to README
Mar 9, 2026
0678a16
Merge pull request #59 from jimmy-claw/jimmy/readme-pda-docs
vpavlin Mar 9, 2026
7cd8189
chore: add PR template with README checklist
jimmy-claw Mar 10, 2026
c117260
feat: add `inspect` subcommand for account data decoding (#60)
Mar 15, 2026
ced4bb6
Merge pull request #72 from jimmy-claw/jimmy/inspect-command
vpavlin Mar 15, 2026
6dd72f6
chore: add PR template with README checklist
jimmy-claw Mar 10, 2026
aa7d5a1
chore: add MIT and Apache-2.0 license files
Mar 15, 2026
b488a91
chore: add PR template with README checklist
jimmy-claw Mar 10, 2026
bebe8c2
feat: expose generic compute_pda() utility in lez-framework-core
Mar 15, 2026
f0a9213
Merge pull request #71 from jimmy-claw/jimmy/expose-compute-pda
vpavlin Mar 15, 2026
8c942d6
Merge branch 'main' into jimmy/pr-template
vpavlin Mar 15, 2026
d64955b
Merge pull request #67 from jimmy-claw/jimmy/pr-template
vpavlin Mar 15, 2026
54fc4f4
fix(init): fix scaffolded projects failing cargo risczero build (#73)
Mar 15, 2026
6465f70
Merge pull request #74 from jimmy-claw/jimmy/fix-init-template
vpavlin Mar 15, 2026
fe457db
Merge branch 'main' into jimmy/add-license-files
vpavlin Mar 16, 2026
021041d
fix(cli)!: remove `-account` suffix
0x-r4bbit Mar 18, 2026
f4370bf
feat(lez-cli): add `generate-idl` subcommand for runtime IDL generation
0x-r4bbit Mar 18, 2026
68e5f6a
fix(init): extract project name from path to support absolute paths
Mar 20, 2026
689207d
Merge pull request #77 from 0x-r4bbit/feat/idl-generation
vpavlin Mar 20, 2026
6674fd0
Merge branch 'main' into fix/remove-account-suffix
vpavlin Mar 20, 2026
5f17f71
Merge branch 'main' into jimmy/fix-init-absolute-path
vpavlin Mar 20, 2026
2785438
feat(client-gen): generate PDA compute and state query helpers
Mar 16, 2026
2953fb1
Merge pull request #76 from 0x-r4bbit/fix/remove-account-suffix
vpavlin Mar 20, 2026
68965b2
Merge branch 'main' into jimmy/fix-init-absolute-path
vpavlin Mar 20, 2026
83e1712
Merge branch 'main' into jimmy/issue-39
vpavlin Mar 20, 2026
046b39a
Merge pull request #80 from jimmy-claw/jimmy/fix-init-absolute-path
vpavlin Mar 20, 2026
4e3396d
Merge branch 'main' into jimmy/issue-39
vpavlin Mar 20, 2026
eb05263
fix(client-gen): use lez_framework_core::pda::compute_pda for correct…
Mar 20, 2026
9d2cd3c
test(fixture): add arg and multi-seed PDA examples to fixture program
Mar 20, 2026
600ea8a
fix(e2e): update instruction count after adding PDA fixtures
Mar 20, 2026
2d6f08b
Merge pull request #75 from jimmy-claw/jimmy/issue-39
vpavlin Mar 20, 2026
bf289dc
Merge branch 'main' into jimmy/add-license-files
vpavlin Mar 20, 2026
d5df688
Merge pull request #69 from jimmy-claw/jimmy/add-license-files
vpavlin Mar 20, 2026
034a39b
rename: lez-* crates to spel-*, binary as spel (fixes #57)
Mar 20, 2026
e45857e
Merge pull request #81 from jimmy-claw/jimmy/issue-57
vpavlin Mar 25, 2026
3621a26
feat: update to latest LEZ (ffcbc159) and fix spel-client-gen API
Mar 31, 2026
e595485
Merge pull request #91 from jimmy-claw/jimmy/update-lssa-latest-clean
vpavlin Mar 31, 2026
57201f6
feat(spel-cli): detect Private/ prefix, build PrivacyPreservingTransa…
jimmy-claw Apr 1, 2026
8f059c2
ci(release): PR-based flow with categorized changelog (#95)
jimmy-claw Apr 1, 2026
d3ccd60
fix(release): add logos-blockchain-circuits to release workflow (#96)
jimmy-claw Apr 1, 2026
93c9aff
fix(release): use gh pr create instead of peter-evans action (#97)
jimmy-claw Apr 1, 2026
05ec85b
fix(release): fix broken YAML in gh pr create body (#98)
jimmy-claw Apr 1, 2026
dc933d9
fix(release): delete stale remote branch before push (#99)
jimmy-claw Apr 1, 2026
8a67c6b
fix(release): create issue with PR link instead of PR directly (#100)
jimmy-claw Apr 1, 2026
c0aabe9
chore: release v0.2.0 (#101)
vpavlin Apr 1, 2026
72fc226
fix(release): split publish into separate workflow triggered on PR me…
jimmy-claw Apr 1, 2026
201fae4
fix(release): fix grep patterns for categorized changelog (#103)
jimmy-claw Apr 1, 2026
62f91e2
feat: add #[account_type] annotation for IDL-driven account inspectio…
0x-r4bbit Apr 7, 2026
7eedca2
ci: add weekly RC workflow (#105)
jimmy-claw Apr 7, 2026
9a51acb
fix(ci): use correct package name spel instead of spel-cli in LEZ com…
jimmy-claw Apr 7, 2026
2e6f278
fix(ci): install logos-blockchain-circuits in LEZ compat check (#108)
jimmy-claw Apr 7, 2026
69fc8e2
fix(ci): rewrite LEZ compat into persistent bump PR workflow (#109)
jimmy-claw Apr 7, 2026
cdd4229
fix(ci): add git identity for github-actions in LEZ bump workflow (#110)
jimmy-claw Apr 7, 2026
ce485a4
fix(ci): handle existing branch in LEZ bump workflow (#111)
jimmy-claw Apr 7, 2026
1edf6ea
fix(ci): use gh CLI for PR create (fixes 403 permission error) (#112)
jimmy-claw Apr 7, 2026
e17b75a
fix(ci): parse PR URL from gh create output (no jq needed) (#113)
jimmy-claw Apr 7, 2026
40971a5
fix(ci): dump gh output to see error, disable set -e, fix grep failur…
jimmy-claw Apr 7, 2026
40804ce
fix(ci): verbose logging + hardcode REPO + better fallback (#116)
jimmy-claw Apr 7, 2026
3807efd
fix(ci): simplify LEZ bump workflow (#117)
jimmy-claw Apr 7, 2026
d660ef0
fix(ci): post issue on failure, no PR creation (#118)
jimmy-claw Apr 7, 2026
fb77094
Add LEZ compatibility check workflow (#121)
waclaw-claw Apr 7, 2026
90fa9d3
chore(bump): use LEZ v0.2.0-rc1 release tag (#122)
jimmy-claw Apr 9, 2026
f33ee08
Improve privacy smoke test CI and script (#127)
waclaw-claw Apr 9, 2026
9005e9f
fix(cli): parse PDA seed args through IDL type system (#129)
fryorcraken Apr 13, 2026
2384881
feat: SpelOutput::execute() with auto-claim support (#126)
jimmy-claw Apr 13, 2026
da99947
fix(cli): separate CLI flags from instruction args to avoid parsing c…
fryorcraken Apr 14, 2026
bb7c2d6
feat(spel-cli): enhance --dry-run with full tx summary and JSON output
marclawclaw Apr 14, 2026
b348018
ci: Add SonarCloud code quality analysis
marclawclaw Apr 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
## Description
<!-- What does this PR do? Why? -->

## Changes
<!-- List key changes -->

## Checklist
- [ ] Builds cleanly (`make build` or `cmake --build`)
- [ ] Tests pass (`make test` or `ctest -V`)
- [ ] README updated if new features, CLI commands, or behaviour changed
- [ ] New public methods have doc comments
- [ ] Branch is off `main` (not another feature branch)
162 changes: 156 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,165 @@ on:
push:
branches: [main]

env:
CARGO_TERM_COLOR: always

jobs:
test:
name: Tests
sonarcloud:
name: SonarCloud Scan
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Shallow clones are fine for SonarCloud
- uses: SonarSource/sonarcloud-github-action@master
with:
organization: logos-co
projectKey: logos-co_spel
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
unit-tests:
name: Unit Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Build (core + macros)
run: cargo build -p nssa-framework -p nssa-framework-core -p nssa-framework-macros
- name: Test (core + macros)
run: cargo test -p nssa-framework -p nssa-framework-core -p nssa-framework-macros
with:
prefix-key: "unit"
- name: Build (framework + codegen)
run: cargo build -p spel-framework -p spel-framework-core -p spel-framework-macros -p spel-client-gen
- name: Unit tests
run: cargo test -p spel-framework-core -p spel-framework-macros -p spel-client-gen

e2e-tests:
name: E2E Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
prefix-key: "e2e"
- name: Install logos-blockchain-circuits
run: |
curl -sSL https://raw.githubusercontent.com/logos-blockchain/logos-blockchain/main/scripts/setup-logos-blockchain-circuits.sh | bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Build (all packages including spel)
run: cargo build -p spel-framework -p spel-framework-core -p spel-framework-macros -p spel-client-gen -p spel
- name: E2E tests
run: cargo test -p spel-framework

privacy-smoke-test:
name: Privacy Smoke Test
runs-on: ubuntu-latest
timeout-minutes: 30
env:
RISC0_VERSION: "3.0.5"
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
with:
prefix-key: "privacy"

- name: Generate Cargo.lock
run: cargo generate-lockfile

- name: Extract LEZ revision from spel-framework/Cargo.toml
id: lez-ref
run: |
# Support both tag = "..." and rev = "..." formats
LEZ_REV=$(grep 'nssa_core' spel-framework/Cargo.toml | grep -oE '(tag|rev) = "[^"]*"' | cut -d'"' -f2)
if [ -z "$LEZ_REV" ]; then
echo "ERROR: Could not extract LEZ revision from spel-framework/Cargo.toml"
exit 1
fi
echo "LEZ_REV=$LEZ_REV" >> $GITHUB_OUTPUT
echo "LEZ_TAG=$LEZ_REV" >> $GITHUB_OUTPUT
echo "Using LEZ revision: $LEZ_REV"

- name: Determine SPEL ref for testing
id: spel-ref
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
# For PRs, use the PR head commit
SPEL_REF="refs/pull/${{ github.event.pull_request.number }}/head"
else
# For pushes to main, use the current commit
SPEL_REF="${{ github.sha }}"
fi
echo "SPEL_REF=$SPEL_REF" >> $GITHUB_OUTPUT
echo "Using SPEL ref: $SPEL_REF"

- name: Install risc0 toolchain
run: |
curl -L https://risc0.com/install | bash
echo "$HOME/.risc0/bin" >> $GITHUB_PATH
export PATH="$HOME/.risc0/bin:$PATH"
rzup install cargo-risczero ${{ env.RISC0_VERSION }}
rzup install rust

- name: Install logos-blockchain-circuits
run: |
curl -sSL https://raw.githubusercontent.com/logos-blockchain/logos-blockchain/main/scripts/setup-logos-blockchain-circuits.sh | bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Install spel
run: cargo install --path spel-cli --locked

- name: Clone LEZ at correct revision
run: |
rm -rf /tmp/lssa
git clone https://github.com/logos-blockchain/logos-execution-zone.git /tmp/lssa
cd /tmp/lssa
# Fetch the specific tag/revision
git fetch --depth 1 origin ${{ steps.lez-ref.outputs.LEZ_REV }}
git checkout ${{ steps.lez-ref.outputs.LEZ_REV }}

- name: Cache sequencer binary
id: cache-sequencer
uses: actions/cache/restore@v4
with:
path: /tmp/lssa/target/release/sequencer_service
key: sequencer-${{ steps.lez-ref.outputs.LEZ_REV }}
restore-keys: |
sequencer-
fail-on-cache-miss: false

- name: Build sequencer
if: steps.cache-sequencer.outputs.cache-hit != 'true'
run: |
cd /tmp/lssa
cargo build --release --features standalone -p sequencer_service

- name: Save sequencer cache
if: always()
uses: actions/cache/save@v4
with:
path: /tmp/lssa/target/release/sequencer_service
key: sequencer-${{ steps.lez-ref.outputs.LEZ_REV }}

- name: Build wallet
run: |
cd /tmp/lssa
cargo build --release -p wallet

- name: Setup wallet
run: |
mkdir -p /tmp/wallet
echo '{"sequencer_addr":"http://127.0.0.1:3040","seq_poll_timeout":"30s","seq_tx_poll_max_blocks":15,"seq_poll_max_retries":10,"seq_block_poll_max_amount":100,"initial_accounts":[{"Public":{"account_id":"CbgR6tj5kWx5oziiFptM7jMvrQeYY3Mzaao6ciuhSr2r","pub_sign_key":"7f273098f25b71e6c005a9519f2678da8d1c7f01f6a27778e2d9948abdf901fb"}},{"Public":{"account_id":"2RHZhw9h534Zr3eq2RGhQete2Hh667foECzXPmSkGni2","pub_sign_key":"f434f8741720014586ae43356d2aec6257da086222f604ddb75d69733b86fc4c"}}]}' > /tmp/wallet/wallet_config.json

- name: Run privacy smoke test
env:
NSSA_WALLET_HOME_DIR: /tmp/wallet
LSSA_DIR: /tmp/lssa
LEZ_TAG: ${{ steps.lez-ref.outputs.LEZ_TAG }}
SPEL_TAG: ${{ steps.spel-ref.outputs.SPEL_REF }}
run: |
export PATH="/tmp/lssa/target/release:$PATH"
scripts/smoke-test-privacy.sh /tmp/privacy-smoke
Loading