Overview
AssetsUp ships extensive Soroban smart contracts (contracts/assetsup — registry, tokenization, dividends, voting, audit; plus maintenance and multisig contracts), but nothing connects to them. The Stellar SDK is installed in the backend and completely unused. This issue creates the single bridge service every other blockchain feature builds on.
What to Build
A StellarModule in backend/src/stellar/ exposing a SorobanService:
- Config from env:
STELLAR_NETWORK (testnet/futurenet/mainnet), SOROBAN_RPC_URL, ASSETSUP_CONTRACT_ID, backend signing keypair (STELLAR_SECRET_KEY) for server-signed operations
- Core primitives: build → simulate → sign → send a contract invocation; read-only calls via simulation; decode XDR results into typed JS objects
- Typed wrappers for the first methods needed by [SC-02]:
register_asset, asset getters, and the audit-log reads (contracts/assetsup/src/lib.rs / asset.rs / audit.rs define the entrypoints)
- Health: a startup check that logs contract reachability; graceful degradation — when Stellar env vars are absent, the module loads in "disabled" mode and dependents no-op (contributors without Stellar setup must be unaffected)
- Error mapping: contract errors (
contracts/assetsup/src/error.rs) surfaced as typed exceptions
References
- Contract source:
contracts/assetsup/src/
- Blocked by nothing on the web2 side; consumed by [SC-02], [SC-07], [SC-08]
Acceptance Criteria
Overview
AssetsUp ships extensive Soroban smart contracts (
contracts/assetsup— registry, tokenization, dividends, voting, audit; plus maintenance and multisig contracts), but nothing connects to them. The Stellar SDK is installed in the backend and completely unused. This issue creates the single bridge service every other blockchain feature builds on.What to Build
A
StellarModuleinbackend/src/stellar/exposing aSorobanService:STELLAR_NETWORK(testnet/futurenet/mainnet),SOROBAN_RPC_URL,ASSETSUP_CONTRACT_ID, backend signing keypair (STELLAR_SECRET_KEY) for server-signed operationsregister_asset, asset getters, and the audit-log reads (contracts/assetsup/src/lib.rs/asset.rs/audit.rsdefine the entrypoints)contracts/assetsup/src/error.rs) surfaced as typed exceptionsReferences
contracts/assetsup/src/Acceptance Criteria
SorobanServiceinvokes and reads the deployed testnet contract (document the deploy steps used for testing in the PR)register_assetand one read method wrapped and demonstrated