Skip to content
Closed
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
26 changes: 13 additions & 13 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -230,12 +230,12 @@ jobs:
with:
name: html-assets
- name: Install Surfnet helper dependencies
working-directory: tests/interop
working-directory: harness
run: pnpm install --frozen-lockfile
- name: Start Surfnet
working-directory: .
run: |
node tests/interop/start-surfnet-proxy.mjs &
node harness/start-surfnet-proxy.mjs &
ready=0
for i in $(seq 1 50); do
if curl -sf -X POST http://localhost:8899 \
Expand Down Expand Up @@ -270,12 +270,12 @@ jobs:
with:
name: html-assets
- name: Install Surfnet helper dependencies
working-directory: tests/interop
working-directory: harness
run: pnpm install --frozen-lockfile
- name: Start Surfnet
working-directory: .
run: |
node tests/interop/start-surfnet-proxy.mjs &
node harness/start-surfnet-proxy.mjs &
ready=0
for i in $(seq 1 50); do
if curl -sf -X POST http://localhost:8899 \
Expand Down Expand Up @@ -344,12 +344,12 @@ jobs:
with:
name: html-assets
- name: Install Surfnet helper dependencies
working-directory: tests/interop
working-directory: harness
run: pnpm install --frozen-lockfile
- name: Start Surfnet
working-directory: .
run: |
node tests/interop/start-surfnet-proxy.mjs &
node harness/start-surfnet-proxy.mjs &
ready=0
for i in $(seq 1 50); do
if curl -sf -X POST http://localhost:8899 \
Expand Down Expand Up @@ -419,42 +419,42 @@ jobs:
working-directory: rust
run: cargo build -p solana-mpp --bin interop_client --bin interop_server
- name: Install interop harness
working-directory: tests/interop
working-directory: harness
run: pnpm install --frozen-lockfile
- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
bundler-cache: true
working-directory: ruby
- name: Typecheck interop harness
working-directory: tests/interop
working-directory: harness
run: pnpm typecheck
- name: Run Rust client interop smoke
working-directory: tests/interop
working-directory: harness
run: pnpm exec vitest run test/e2e.test.ts --testNamePattern "rust client pays typescript server"
env:
MPP_INTEROP_CLIENTS: rust
MPP_INTEROP_SERVERS: typescript
- name: Run Rust server interop smoke
working-directory: tests/interop
working-directory: harness
run: pnpm exec vitest run test/e2e.test.ts --testNamePattern "typescript client pays rust server"
env:
MPP_INTEROP_CLIENTS: typescript
MPP_INTEROP_SERVERS: rust
- name: Run Rust end-to-end interop smoke
working-directory: tests/interop
working-directory: harness
run: pnpm exec vitest run test/e2e.test.ts --testNamePattern "rust client pays rust server"
env:
MPP_INTEROP_CLIENTS: rust
MPP_INTEROP_SERVERS: rust
- name: Run Ruby server interop smoke
working-directory: tests/interop
working-directory: harness
run: pnpm exec vitest run test/e2e.test.ts --testNamePattern "typescript client pays ruby server"
env:
MPP_INTEROP_CLIENTS: typescript
MPP_INTEROP_SERVERS: ruby
- name: Run Rust client to Ruby server interop smoke
working-directory: tests/interop
working-directory: harness
run: pnpm exec vitest run test/e2e.test.ts --testNamePattern "rust client pays ruby server"
env:
MPP_INTEROP_CLIENTS: rust
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/lua.yml
Original file line number Diff line number Diff line change
Expand Up @@ -142,19 +142,19 @@ jobs:
run: cargo build --bin interop_client

- name: Install interop harness deps
working-directory: tests/interop
working-directory: harness
run: pnpm install --frozen-lockfile

- name: TS-to-Lua focused matrix
working-directory: tests/interop
working-directory: harness
env:
MPP_INTEROP_CLIENTS: typescript
MPP_INTEROP_SERVERS: lua
MPP_INTEROP_SCENARIOS: charge-basic,charge-split-ata,charge-network-mismatch,charge-cross-route-replay
run: pnpm exec vitest run test/e2e.test.ts --testNamePattern "typescript client pays lua server"

- name: Rust-to-Lua focused matrix
working-directory: tests/interop
working-directory: harness
env:
MPP_INTEROP_CLIENTS: rust
MPP_INTEROP_SERVERS: lua
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/php.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,23 +70,23 @@ jobs:
working-directory: rust
run: cargo build -p solana-mpp --bin interop_client
- name: Install interop harness
working-directory: tests/interop
working-directory: harness
run: pnpm install --frozen-lockfile
- name: Install PHP interop dependencies
working-directory: php
run: composer install --no-interaction --no-progress
- name: Typecheck interop harness
working-directory: tests/interop
working-directory: harness
run: pnpm typecheck
- name: Run PHP server interop smoke
working-directory: tests/interop
working-directory: harness
run: pnpm exec vitest run test/e2e.test.ts --testNamePattern "typescript client pays php server"
env:
MPP_INTEROP_CLIENTS: typescript
MPP_INTEROP_SERVERS: php
MPP_INTEROP_SCENARIOS: charge-basic,charge-split-ata,charge-network-mismatch,charge-cross-route-replay
- name: Run Rust client PHP server interop smoke
working-directory: tests/interop
working-directory: harness
run: pnpm exec vitest run test/e2e.test.ts --testNamePattern "rust client pays php server"
env:
MPP_INTEROP_CLIENTS: rust
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/python.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ jobs:
python -m pip install --upgrade pip
pip install -e ".[dev]"
# Critical order: install + build the TypeScript workspace BEFORE
# installing the interop harness. tests/interop has
# installing the interop harness. harness has
# ``"@solana/mpp": "file:../../typescript/packages/mpp"`` which
# pnpm copies into node_modules at install time. If the typescript
# package has no dist/ at that moment, the TS interop client crashes
Expand All @@ -95,16 +95,16 @@ jobs:
working-directory: rust
run: cargo build --bin interop_client --bin interop_server
- name: Install interop harness
working-directory: tests/interop
working-directory: harness
run: pnpm install --frozen-lockfile
- name: Focused TS-to-Python interop
working-directory: tests/interop
working-directory: harness
env:
MPP_INTEROP_CLIENTS: typescript
MPP_INTEROP_SERVERS: python
run: pnpm exec vitest run test/e2e.test.ts
- name: Focused Rust-to-Python interop
working-directory: tests/interop
working-directory: harness
env:
MPP_INTEROP_CLIENTS: rust
MPP_INTEROP_SERVERS: python
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/swift.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,25 +44,25 @@ jobs:
working-directory: typescript
run: pnpm --filter @solana/mpp build
- name: Install interop harness
working-directory: tests/interop
working-directory: harness
run: pnpm install --frozen-lockfile
- name: Build Swift interop client
working-directory: tests/interop/swift-client
working-directory: harness/swift-client
run: swift build
- name: Build Rust interop server
working-directory: rust
run: cargo build --bin interop_server
- name: Typecheck interop harness
working-directory: tests/interop
working-directory: harness
run: pnpm typecheck
- name: Run Swift client interop smoke against TypeScript server
working-directory: tests/interop
working-directory: harness
env:
MPP_INTEROP_CLIENTS: swift
MPP_INTEROP_SERVERS: typescript
run: pnpm exec vitest run test/e2e.test.ts --testNamePattern "swift client pays typescript server"
- name: Run Swift client interop smoke against Rust server
working-directory: tests/interop
working-directory: harness
env:
MPP_INTEROP_CLIENTS: swift
MPP_INTEROP_SERVERS: rust
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,11 @@ __pycache__/
.coverage
.venv/
*.pyc
tests/interop/go-client/go-client
harness/go-client/go-client
.claude/
.gocache
mpp-sdk-self-learning/
.build/
go/coverage.out
notes/codex-review/
notes/codex-review-*.md
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,9 +62,9 @@ The interop harness can run a full client/server cross-product, but CI keeps the
| Python | ![Python](https://img.shields.io/badge/coverage-87%25-green) | `just py-test` |
| Lua | ![Lua](https://img.shields.io/badge/coverage-41_tests-blue) | `just lua-test` |
| Ruby | ![Ruby](https://img.shields.io/badge/coverage-98%25-green) | `just rb-test-cover` |
| Interop | ![Interop](https://img.shields.io/badge/interop-TypeScript_harness-brightgreen) | `cd tests/interop && pnpm test` |
| Interop | ![Interop](https://img.shields.io/badge/interop-TypeScript_harness-brightgreen) | `cd harness && pnpm test` |

See [`tests/interop/README.md`](tests/interop/README.md) for the process adapter contract used by the Surfpool-backed client/server matrix.
See [`harness/README.md`](harness/README.md) for the process adapter contract used by the Surfpool-backed client/server matrix.

## Install

Expand Down
6 changes: 3 additions & 3 deletions docs/security/compute-budget-caps.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ this monorepo.
| Go (#101) | `go/server/server.go` (`maxComputeUnitLimit`) | pending PR #101 merge |
| Python (#106) | `python/src/solana_mpp/server/mpp.py` | pending PR #106 merge |

`tests/interop/test/compute-budget-caps.test.ts` parses each file above
`harness/test/compute-budget-caps.test.ts` parses each file above
and asserts byte-identical literals against the canonical pair. Go and
Python rows are marked `optional: true` until their PRs land, then
flip to required and surface drift the same way as the other SDKs.
Expand All @@ -66,8 +66,8 @@ flip to required and surface drift the same way as the other SDKs.
code when either limit is exceeded; include the cap value in the
reason string for parity with the existing SDKs.
3. Append a row to `SDKS` in
`tests/interop/test/compute-budget-caps.test.ts` and to the table
`harness/test/compute-budget-caps.test.ts` and to the table
above. Append a fixture row to
`charge-compute-budget-over-cap` in
`tests/interop/src/intents/charge.ts` once the SDK is wired into the
`harness/src/intents/charge.ts` once the SDK is wired into the
interop harness.
12 changes: 6 additions & 6 deletions go/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ localnet fixture.
## Running the interop adapters

```bash
cd tests/interop/go-server
cd harness/go-server
go run . # starts a Surfpool-backed protected endpoint on a random port

cd ../go-client
Expand Down Expand Up @@ -193,7 +193,7 @@ same structural transaction verifier as pull mode, consumes the
signature through replay storage, and emits the same receipt shape.

The direct Go interop server at
[`tests/interop/go-server/main.go`](../tests/interop/go-server/main.go)
[`harness/go-server/main.go`](../harness/go-server/main.go)
exercises this end-to-end through Surfpool for both TypeScript and Rust
clients.

Expand Down Expand Up @@ -258,15 +258,15 @@ The CI Go job runs the SDK packages with `-coverprofile` and enforces a

## Interop

The cross-language interop harness lives in `../tests/interop`. The Go
SDK ships both a client (`tests/interop/go-client`) and a server
(`tests/interop/go-server`) adapter. Both are opt-in via the
The cross-language interop harness lives in `../harness`. The Go
SDK ships both a client (`harness/go-client`) and a server
(`harness/go-server`) adapter. Both are opt-in via the
`MPP_INTEROP_CLIENTS` and `MPP_INTEROP_SERVERS` env vars.

Focused harness commands:

```bash
cd tests/interop
cd harness
MPP_INTEROP_CLIENTS=go MPP_INTEROP_SERVERS=rust pnpm test
MPP_INTEROP_CLIENTS=typescript MPP_INTEROP_SERVERS=go pnpm test
MPP_INTEROP_CLIENTS=rust MPP_INTEROP_SERVERS=go pnpm test
Expand Down
2 changes: 1 addition & 1 deletion go/mpp.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// transaction builders live in the `client` subpackage. The wire format
// and module split mirror the Rust reference crate documented in
// skills/pay-sdk-implementation; cross-language behavior is locked via
// the interop harness at tests/interop.
// the interop harness at harness.
package mpp

import (
Expand Down
6 changes: 6 additions & 0 deletions kotlin/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.gradle/
build/
!gradle-wrapper.jar
local.properties
*.iml
.idea/
Loading