Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
57 changes: 45 additions & 12 deletions .github/workflows/typescript-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ jobs:
cache: 'npm'
cache-dependency-path: sdk/package-lock.json

- name: Install npm dependencies
run: npm ci

- name: Install Scarb
uses: software-mansion/setup-scarb@v1
with:
Expand All @@ -35,19 +38,49 @@ jobs:
- name: Install starknet-foundry via asdf
uses: asdf-vm/actions/install@v3
with:
tool_versions: starknet-foundry nightly-2026-02-03
tool_versions: |
starknet-foundry nightly-2026-02-03

- name: Build Cairo contracts
working-directory: .
run: scarb build
- name: Regenerate Cairo contract artifacts
run: npm run generate

- name: Run tests
run: npm run test:fast

devnet:
name: Devnet Test
runs-on: ubuntu-latest
# FIXME: set continue-on-error to false once starknet-devnet supports get_execution_info_v3_syscall
continue-on-error: true
defaults:
run:
working-directory: sdk

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: sdk/package-lock.json

- name: Install dependencies
- name: Install Scarb
uses: software-mansion/setup-scarb@v1
with:
scarb-version: "2.15.0"

- name: Install starknet-devnet via asdf
uses: asdf-vm/actions/install@v3
with:
tool_versions: |
starknet-devnet 0.7.2

- name: Install npm dependencies
run: npm ci

- name: Build, lint, and test
run: |
if npm run ci --if-present 2>/dev/null; then
echo "Ran npm run ci"
else
npm run check
fi
- name: Build Cairo contracts
run: scarb build

- name: Run devnet tests
run: npm run test:devnet
2 changes: 1 addition & 1 deletion .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Check if any sdk files are staged
if git diff --cached --name-only | grep -q '^sdk/'; then
cd sdk && npm run check
cd sdk && npm run check:fast
fi
2 changes: 1 addition & 1 deletion .tool-versions
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
github:software-mansion-labs/starknet-foundry-nightlies[exe=snforge] nightly-2026-02-03
starknet-foundry nightly-2026-02-03
scarb 2.15.1
starknet-devnet 0.7.2
starknet-foundry nightly-2026-02-03
6 changes: 3 additions & 3 deletions sdk/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@
"scarb:build": "cd .. && scarb build",
"generate:abi": "npx tsx scripts/generate-abi.ts",
"generate:client-actions": "npx tsx scripts/generate-client-actions.ts",
"generate:hashes": "npx tsx scripts/generate-hashes.ts && prettier --write src/utils/hashes.ts",
"generate:cairo-hashes": "npx tsx scripts/generate-hashes.ts && prettier --write src/utils/hashes.ts",
"generate:pool-interface": "npx tsx scripts/generate-pool-interface.ts",
"generate:cairo-refs": "cd .. && scarb test -p privacy -- --color always generate_reference --include-ignored 2>&1 | tee target/cairo-refs-output.txt && cd sdk && npx tsx scripts/generate-cairo-refs.ts ../target/cairo-refs-output.txt",
"generate": "npm run scarb:build && npm run generate:abi && npm run generate:client-actions && npm run generate:hashes && npm run generate:pool-interface && npm run generate:cairo-refs",
"generate": "npm run scarb:build && npm run generate:abi && npm run generate:client-actions && npm run generate:cairo-hashes && npm run generate:pool-interface && npm run generate:cairo-refs",
"build": "tsc -p tsconfig.build.json",
"build:browser": "npx tsx scripts/build-browser.ts",
"lint": "eslint src tests --fix",
Expand All @@ -42,12 +42,12 @@
"format:check": "prettier --check src tests",
"test": "vitest run",
"test:fast": "vitest run --exclude '**/devnet.test.ts' --exclude '**/parallel-discovery.test.ts'",
"test:devnet": "vitest run tests/devnet.test.ts",
"test:browser": "vitest run --browser.enabled --coverage.enabled=false --exclude '**/devnet.test.ts'",
"test:watch": "vitest watch",
"all": "npm run build && npm run lint && npm run format && npm run test",
"check": "npm run build && npm run lint:check && npm run format:check && npm run test",
"check:fast": "npm run build && npm run lint:check && npm run format:check && npm run test:fast",
"ci": "npm run generate && npm run check",
"clean": "rm -rf dist",
"decode-error": "npx tsx scripts/decode-error.ts",
"prepare": "cd .. && git config core.hooksPath .husky || true"
Expand Down
167 changes: 133 additions & 34 deletions sdk/src/internal/abi.ts
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ export const PrivacyPoolABI = [
"name": "privacy::actions::WithdrawInput",
"members": [
{
"name": "withdrawal_target",
"name": "to_addr",
"type": "core::starknet::contract_address::ContractAddress"
},
{
Expand All @@ -195,6 +195,62 @@ export const PrivacyPoolABI = [
}
]
},
{
"type": "struct",
"name": "core::array::Span::<core::felt252>",
"members": [
{
"name": "snapshot",
"type": "@core::array::Array::<core::felt252>"
}
]
},
{
"type": "struct",
"name": "privacy::actions::SwapInput",
"members": [
{
"name": "swap_executor",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "swap_contract",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "swap_selector",
"type": "core::felt252"
},
{
"name": "swap_calldata",
"type": "core::array::Span::<core::felt252>"
},
{
"name": "in_token",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "out_token",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "in_amount",
"type": "core::integer::u128"
},
{
"name": "channel_key",
"type": "core::felt252"
},
{
"name": "index",
"type": "core::integer::u32"
},
{
"name": "random",
"type": "core::felt252"
}
]
},
{
"type": "enum",
"name": "privacy::actions::ClientAction",
Expand Down Expand Up @@ -230,6 +286,10 @@ export const PrivacyPoolABI = [
{
"name": "Withdraw",
"type": "privacy::actions::WithdrawInput"
},
{
"name": "Swap",
"type": "privacy::actions::SwapInput"
}
]
},
Expand All @@ -243,16 +303,6 @@ export const PrivacyPoolABI = [
}
]
},
{
"type": "struct",
"name": "core::array::Span::<core::felt252>",
"members": [
{
"name": "snapshot",
"type": "@core::array::Array::<core::felt252>"
}
]
},
{
"type": "struct",
"name": "privacy::actions::WriteOnceInput",
Expand Down Expand Up @@ -304,7 +354,7 @@ export const PrivacyPoolABI = [
"name": "privacy::actions::TransferFromInput",
"members": [
{
"name": "sender_addr",
"name": "from_addr",
"type": "core::starknet::contract_address::ContractAddress"
},
{
Expand All @@ -322,7 +372,7 @@ export const PrivacyPoolABI = [
"name": "privacy::actions::TransferToInput",
"members": [
{
"name": "recipient_addr",
"name": "to_addr",
"type": "core::starknet::contract_address::ContractAddress"
},
{
Expand Down Expand Up @@ -412,7 +462,7 @@ export const PrivacyPoolABI = [
"type": "privacy::objects::EncUserAddr"
},
{
"name": "withdrawal_target",
"name": "to_addr",
"type": "core::starknet::contract_address::ContractAddress"
},
{
Expand Down Expand Up @@ -467,15 +517,39 @@ export const PrivacyPoolABI = [
},
{
"type": "struct",
"name": "privacy::actions::DepositToOpenNoteInput",
"name": "privacy::actions::SwapWithExecutorInput",
"members": [
{
"name": "note_id",
"name": "swap_executor",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "swap_contract",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "swap_selector",
"type": "core::felt252"
},
{
"name": "amount",
"name": "swap_calldata",
"type": "core::array::Span::<core::felt252>"
},
{
"name": "in_token",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "out_token",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "in_amount",
"type": "core::integer::u128"
},
{
"name": "note_id",
"type": "core::felt252"
}
]
},
Expand Down Expand Up @@ -520,8 +594,8 @@ export const PrivacyPoolABI = [
"type": "privacy::events::OpenNoteCreated"
},
{
"name": "DepositToOpenNote",
"type": "privacy::actions::DepositToOpenNoteInput"
"name": "SwapWithExecutor",
"type": "privacy::actions::SwapWithExecutorInput"
}
]
},
Expand Down Expand Up @@ -649,6 +723,22 @@ export const PrivacyPoolABI = [
],
"outputs": [],
"state_mutability": "external"
},
{
"type": "function",
"name": "deposit_to_open_note",
"inputs": [
{
"name": "note_id",
"type": "core::felt252"
},
{
"name": "amount",
"type": "core::integer::u128"
}
],
"outputs": [],
"state_mutability": "external"
}
]
},
Expand Down Expand Up @@ -1082,6 +1172,16 @@ export const PrivacyPoolABI = [
"name": "RolesImpl",
"interface_name": "starkware_utils::components::roles::interface::IRoles"
},
{
"type": "struct",
"name": "core::array::Span::<core::starknet::contract_address::ContractAddress>",
"members": [
{
"name": "snapshot",
"type": "@core::array::Array::<core::starknet::contract_address::ContractAddress>"
}
]
},
{
"type": "interface",
"name": "starkware_utils::components::roles::interface::IRoles",
Expand Down Expand Up @@ -1500,27 +1600,26 @@ export const PrivacyPoolABI = [
},
{
"type": "function",
"name": "has_legacy_role",
"name": "reclaim_legacy_roles",
"inputs": [],
"outputs": [],
"state_mutability": "external"
},
{
"type": "function",
"name": "reclaim_legacy_roles_for_accounts",
"inputs": [
{
"name": "account",
"type": "core::starknet::contract_address::ContractAddress"
},
{
"name": "role",
"type": "core::felt252"
"name": "accounts",
"type": "core::array::Span::<core::starknet::contract_address::ContractAddress>"
}
],
"outputs": [
{
"type": "core::bool"
}
],
"state_mutability": "view"
"outputs": [],
"state_mutability": "external"
},
{
"type": "function",
"name": "reclaim_legacy_roles",
"name": "disable_legacy_role_reclaim",
"inputs": [],
"outputs": [],
"state_mutability": "external"
Expand Down Expand Up @@ -2263,7 +2362,7 @@ export const PrivacyPoolABI = [
"kind": "data"
},
{
"name": "withdrawal_target",
"name": "to_addr",
"type": "core::starknet::contract_address::ContractAddress",
"kind": "key"
},
Expand Down
Loading
Loading