Marketplace
Marketplace exposes published contracts as Spectrum JSON-RPC methods. Contract addresses and ABIs come from the marketplace catalog — each selected ABI item is callable by its own method name:
spectrum_<appId>_<chain>_<deploymentName>_<operation>_<abiName>
- Concrete deployments bake
chainand contractaddressinto that name, so callers do not pass them. - Template apps omit the chain segment (
spectrum_<appId>_<deploymentName>_<operation>_<abiName>). Callers must supplychainandaddressin the call body. - The same deployment name may be reused on other chains (names are unique per chain within an app).
operationencodes how the ABI item is invoked, keeping reads, simulations, and log queries distinct:
| Operation | Kind | Behavior |
|---|---|---|
call | Function (view / pure) | Read via eth_call. Returns positional outputs. |
simulateCall | Function (state-changing) | Simulated via eth_simulateV1, so nothing is broadcast on-chain. Response adds status, gasUsed, and logs. |
getLogs | Event | Queried via eth_getLogs with decoded args. Same block-window / cursor pagination as getLogs (max 10,000 blocks). |
EVM chains only. Argument mismatches and overloaded names return 400. Unpublished method names return 404.
SDK: spectrum.marketplace — see Namespaces.
Published apps
Open an app for its deployments and a request example per published method. The endpoints further down return the same catalog programmatically.
- Lido API: API for Lido contracts. 45 methods on Ethereum
- ERC721 API: API for ERC721 (NFT) Contracts. 10 methods
- ERC20 API: API for ERC20 Contracts. 8 methods
- ether.fi weETH API: API for ether.fi weETH contracts. 10 methods on Ethereum
- Ethena sUSDe API: API for Ethena sUSDe contracts. 11 methods on Ethereum
- cbETH API: API for cbETH contracts. 10 methods on Ethereum
- Rocket Pool Contracts API: API for Rocket Pool Contracts. 13 methods on Ethereum
- 1Inch Contracts API: API for 1Inch contracts. 18 methods on Arbitrum, Avalanche, Base, BNB Chain, Ethereum, Polygon
- Safe Multisig API: API for Safe Multisig. 8 methods
API for Lido contracts
API for ERC721 (NFT) Contracts
API for ERC20 Contracts
API for ether.fi weETH contracts
API for Ethena sUSDe contracts
API for cbETH contracts
API for Rocket Pool Contracts
API for 1Inch contracts
API for Safe Multisig
List methods
Discover published functions and events. Filter by chain, appId, and/or abiType.
listMarketplaceMethods
Lists published marketplace methods: functions and events. Each entry is uniquely callable by its `method` name (`spectrum_<appId>_<chain>_<deploymentName>_<operation>_<abiName>`, where `operation` is `call`, `simulateCall`, or `getLogs`). Concrete deployments bake chain and address into that name; template methods (no chain segment) require `chain` and `address` when called.
curl -X POST https://your-endpoint.simplystaking.xyz/v1 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "listMarketplaceMethods",
"params": {
"chain": "ethereum",
"appId": "lido"
},
"id": 1
}'import { Spectrum } from '@spectrumnodes/sdk';
const spectrum = new Spectrum({ api: 'https://your-endpoint.simplystaking.xyz/YOUR_API_KEY/' });
const result = await spectrum.marketplace.listMethods({
chain: 'ethereum',
appId: 'lido'
});
console.log(result);{
"jsonrpc": "2.0",
"result": {
"data": {
"methods": [
{
"method": "spectrum_lido_ethereum_wsteth_call_balanceOf",
"abiName": "balanceOf",
"abiType": "function",
"description": null,
"params": [
{
"name": "account",
"type": "address",
"kind": "input"
},
{
"name": "output_0",
"type": "uint256",
"kind": "output"
}
],
"appId": "lido",
"contractName": "Lido API",
"deploymentName": "wsteth",
"isTemplate": false,
"chain": "ethereum",
"address": "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0"
}
]
}
},
"id": 1
}Parameters
| Name | Required | Description |
|---|---|---|
| chain | no | Filter by marketplace chain slug e.g. ethereum |
| appId | no | Filter by marketplace app id e.g. lido |
| abiType | no | Filter by ABI item type Options: function, event |
Response Fields
| Field | Type |
|---|---|
data.methods | array |
data.methods[].method | string |
data.methods[].abiName | string |
data.methods[].abiType | string |
data.methods[].params | array |
data.methods[].appId | string |
data.methods[].deploymentName | string |
data.methods[].isTemplate | boolean |
data.methods[].chain | string | null |
data.methods[].address | string | null |
Get contract
Fetch one app by appId: metadata, deployments (ABI + address), and selected methods.
getMarketplaceContract
Returns one marketplace contract by `appId`: metadata, deployments (chain, address, ABI), and selected published methods.
curl -X POST https://your-endpoint.simplystaking.xyz/v1 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "getMarketplaceContract",
"params": {
"appId": "lido"
},
"id": 1
}'import { Spectrum } from '@spectrumnodes/sdk';
const spectrum = new Spectrum({ api: 'https://your-endpoint.simplystaking.xyz/YOUR_API_KEY/' });
const result = await spectrum.marketplace.getContract('lido');
console.log(result);{
"jsonrpc": "2.0",
"result": {
"data": {
"appId": "lido",
"name": "Lido API",
"description": "API for Lido contracts",
"isTemplate": false,
"deployments": [
{
"name": "wsteth",
"chain": "ethereum",
"address": "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",
"abi": [],
"methods": [
{
"method": "spectrum_lido_ethereum_wsteth_call_stEthPerToken",
"abiName": "stEthPerToken",
"abiType": "function",
"description": null,
"params": [
{
"name": "output_0",
"type": "uint256",
"kind": "output"
}
]
},
{
"method": "spectrum_lido_ethereum_wsteth_call_tokensPerStEth",
"abiName": "tokensPerStEth",
"abiType": "function",
"description": null,
"params": [
{
"name": "output_0",
"type": "uint256",
"kind": "output"
}
]
},
{
"method": "spectrum_lido_ethereum_wsteth_call_getStETHByWstETH",
"abiName": "getStETHByWstETH",
"abiType": "function",
"description": null,
"params": [
{
"name": "_wstETHAmount",
"type": "uint256",
"kind": "input"
},
{
"name": "output_0",
"type": "uint256",
"kind": "output"
}
]
},
{
"method": "spectrum_lido_ethereum_wsteth_call_getWstETHByStETH",
"abiName": "getWstETHByStETH",
"abiType": "function",
"description": null,
"params": [
{
"name": "_stETHAmount",
"type": "uint256",
"kind": "input"
},
{
"name": "output_0",
"type": "uint256",
"kind": "output"
}
]
},
{
"method": "spectrum_lido_ethereum_wsteth_call_stETH",
"abiName": "stETH",
"abiType": "function",
"description": null,
"params": [
{
"name": "output_0",
"type": "address",
"kind": "output"
}
]
},
{
"method": "spectrum_lido_ethereum_wsteth_call_name",
"abiName": "name",
"abiType": "function",
"description": null,
"params": [
{
"name": "output_0",
"type": "string",
"kind": "output"
}
]
},
{
"method": "spectrum_lido_ethereum_wsteth_call_symbol",
"abiName": "symbol",
"abiType": "function",
"description": null,
"params": [
{
"name": "output_0",
"type": "string",
"kind": "output"
}
]
},
{
"method": "spectrum_lido_ethereum_wsteth_call_decimals",
"abiName": "decimals",
"abiType": "function",
"description": null,
"params": [
{
"name": "output_0",
"type": "uint8",
"kind": "output"
}
]
}
]
}
]
}
},
"id": 1
}Parameters
| Name | Required | Description |
|---|---|---|
| appId | yes | Marketplace app id e.g. lido |
Response Fields
| Field | Type |
|---|---|
data.appId | string |
data.name | string |
data.isTemplate | boolean |
data.deployments | array |
data.deployments[].name | string |
data.deployments[].chain | string | null |
data.deployments[].address | string | null |
data.deployments[].methods | array |
Call a method
Use the method string returned by list / get contract as the JSON-RPC method.
Functions — outputs is positional (one entry per ABI output). Integers are decimal strings; nested tuples are arrays. Names and types come from the params metadata on list.
Events — response matches getLogs pagination (count, limit, hasMore, cursor, logs). Each log includes positional decoded args. Non-indexed event inputs cannot be used as topic filters and must be null/omitted in args.
Example below calls a published balanceOf function. Swap the method name for any published function or event from list.
spectrum_lido_ethereum_wsteth_call_balanceOf
Calls a published marketplace method by its JSON-RPC name (`spectrum_<appId>_<chain>_<deploymentName>_<operation>_<abiName>` from list). Operation is `call` (view/pure via `eth_call`), `simulateCall` (non-view via `eth_simulateV1`, so nothing is broadcast; response includes `status`/`gasUsed`/`logs`), or `getLogs` (decoded event logs with the same block-window / cursor pagination as `getLogs`, max 10,000 blocks). EVM only. Concrete deployments resolve chain/address from the method name; template methods (no chain segment) require `chain` and `address` in params.
curl -X POST https://your-endpoint.simplystaking.xyz/v1 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "spectrum_lido_ethereum_wsteth_call_balanceOf",
"params": {
"args": [
"0x0000000000000000000000000000000000000001"
],
"from": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
"height": "latest",
"chain": "ethereum"
},
"id": 1
}'import { Spectrum } from '@spectrumnodes/sdk';
const spectrum = new Spectrum({ api: 'https://your-endpoint.simplystaking.xyz/YOUR_API_KEY/' });
const result = await spectrum.marketplace.call(
'spectrum_lido_ethereum_wsteth_call_balanceOf',
{ args: ['0x0000000000000000000000000000000000000001'] }
);
console.log(result);{
"jsonrpc": "2.0",
"result": {
"data": {
"chain": "ethereum",
"address": "0x7f39c581f595b53c5cb19bd0b3f8da6c935e2ca0",
"method": "spectrum_lido_ethereum_wsteth_call_balanceOf",
"abiName": "balanceOf",
"deploymentName": "wsteth",
"operation": "call",
"abiType": "function",
"outputs": [
"5567301793"
]
}
},
"id": 1
}Parameters
| Name | Required | Description |
|---|---|---|
| args | no | Function arguments, or positional topic filters for indexed event inputs (default []) e.g. 0x0000000000000000000000000000000000000001 |
| from | no | Sender for function simulation (`msg.sender`) e.g. 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 |
| value | no | Wei value for payable function simulation |
| height | no | Block height for function simulation (`latest` or a block number) e.g. latest |
| chain | no | Required for template methods only |
| address | no | Required for template methods only |
| fromBlock | no | Start block for event queries (same as getLogs) |
| toBlock | no | End block for event queries (default latest) |
| cursor | no | Pagination cursor for event queries |
Response Fields
| Field | Type |
|---|---|
data.operation | string |
data.abiType | string |
data.outputs | array |
data.status | string |
data.gasUsed | string |
data.logs | array |
data.count | number |
data.hasMore | boolean |
data.cursor | string | number | null |








