Labels: Stellar Wave, test, interop, stellar, drips, help-wanted
Tier: L (1–2 weeks)
Type: test
Context
Each chain module in the SDK implements deriveStealthKeys, generateStealthAddress, scanAnnouncements, etc. — the same conceptual operations, adapted to each chain's curve and hashing. The tests for each chain live in isolation. There's nothing that verifies all four chains satisfy the same behavioral contract.
We want a parameterized test suite that runs every chain through the same scenarios.
Scope
Create test/conformance/ with a single test file that imports a chain module by name and runs a battery of operations:
The contract every chain must satisfy
// pseudo-code
for chain of ['evm', 'stellar', 'solana', 'ckb']:
const m = chainModule(chain)
test('round-trip: derive → encode → decode → match'):
keys = m.deriveStealthKeys(TEST_SIGNATURE)
metaAddress = m.encodeStealthMetaAddress(keys.spendingPubKey, keys.viewingPubKey)
decoded = m.decodeStealthMetaAddress(metaAddress)
assert decoded.spendingPubKey === keys.spendingPubKey
assert decoded.viewingPubKey === keys.viewingPubKey
test('stealth payment scan correctness'):
generated = m.generateStealthAddress(keys.spendingPubKey, keys.viewingPubKey)
announcement = mockAnnouncement(generated)
matches = m.scanAnnouncements([announcement], keys.viewingKey, keys.spendingPubKey, keys.spendingKey)
assert matches.length === 1
assert matches[0].stealthAddress === generated.stealthAddress
test('stealth private key spends'):
p_stealth = m.deriveStealthPrivateKey(keys.spendingKey, generated.ephemeralPubKey, keys.viewingKey)
pub = pointMul(p_stealth, G)
assert pub === generated.stealthPubKey
test('view-tag false-positive rate'):
// 1000 random announcements not destined for us
// assert ~ 1000/256 ≈ 4 pass the view-tag filter
Why parameterize
When a new chain (Hedera? Aptos?) is added, plugging it into the conformance harness immediately tells us if the implementation matches the protocol-level invariants. Right now we have no such safety net.
Things to avoid
- Don't test chain-specific quirks here (e.g., StrKey encoding details). Those belong in the per-chain test directory.
- Don't network-call. Conformance tests must be deterministic and offline.
Acceptance criteria
Files to start with
sdk/src/chains/{evm,stellar,solana,ckb}/index.ts for the exports surface
test/chains/*/e2e.test.ts for per-chain reference scenarios
Labels:
Stellar Wave,test,interop,stellar,drips,help-wantedTier: L (1–2 weeks)
Type: test
Context
Each chain module in the SDK implements
deriveStealthKeys,generateStealthAddress,scanAnnouncements, etc. — the same conceptual operations, adapted to each chain's curve and hashing. The tests for each chain live in isolation. There's nothing that verifies all four chains satisfy the same behavioral contract.We want a parameterized test suite that runs every chain through the same scenarios.
Scope
Create
test/conformance/with a single test file that imports a chain module by name and runs a battery of operations:The contract every chain must satisfy
Why parameterize
When a new chain (Hedera? Aptos?) is added, plugging it into the conformance harness immediately tells us if the implementation matches the protocol-level invariants. Right now we have no such safety net.
Things to avoid
Acceptance criteria
test/conformance/index.test.tscovering at least 8 conformance properties across all 4 chains.test/conformance/README.mdexplaining the contract.Files to start with
sdk/src/chains/{evm,stellar,solana,ckb}/index.tsfor the exports surfacetest/chains/*/e2e.test.tsfor per-chain reference scenarios