Official Elys Network asset registry providing standardized blockchain and token configurations for all Elys ecosystem projects. This registry serves as the single source of truth for chain metadata, RPC endpoints, token information, and feature capabilities across the entire Elys ecosystem.
- Universal Access: Consumable by any programming language (Go, Java, JavaScript, C++, Python, Rust)
- Centralized Configuration: Single source of truth for all blockchain assets
- Standardized Format: Standardized data structure with JSON Schema validation
- Automatic Updates: Centralized updates that propagate to all applications
- Multi-Environment: Support for mainnet, testnet and devnet
# Get all mainnet chains
curl https://registry.elys.network/v1/chains/mainnet
# Get all currencies across mainnet networks
curl https://registry.elys.network/v1/currencies/mainnet
# Check API health
curl https://registry.elys.network/health
Method | Endpoint | Description | Status |
---|---|---|---|
GET |
/v1/chains/mainnet |
List all mainnet chains | β Available |
GET |
/v1/chains/testnet |
List all testnet chains | β Available |
GET |
/v1/chains/devnet |
List all devnet chains | β Available |
Method | Endpoint | Description | Status |
---|---|---|---|
GET |
/v1/currencies/mainnet |
List all currencies across mainnet network | β Available |
GET |
/v1/currencies/testnet |
List all currencies across testnet network | β Available |
GET |
/v1/currencies/devnet |
List all currencies across devnet networks | β Available |
Method | Endpoint | Description | Status |
---|---|---|---|
GET |
/health |
API health status | β Available |
{
"chains": {
"elys": {
"chainId": "elys-1",
"chainName": "Elys",
"addressPrefix": "elys",
"rpcURL": "https://rpc.elys.network:443",
"restURL": "https://api.elys.network:443",
"explorerURL": {
"transaction": "https://mainnet.itrocket.net/elys/tx/{transaction}"
},
"channel": {
"source": "",
"destination": ""
},
"isEnabled": true,
"priority": 1,
"currencies": [
{
"coinDenom": "ELYS",
"coinMinimalDenom": "uelys",
"coinIbcDenom": "",
"coinDecimals": 6,
"coinGeckoId": "elys",
"coinImageUrl": "/tokens/elys.svg",
"isFeeCurrency": true,
"isStakeCurrency": false,
"canSwap": true,
"canWithdraw": true,
"canDeposit": true,
"canUseLiquidityMining": true,
"canUseLeverageLP": true,
"canUsePerpetual": false,
"canUseVaults": true,
"gasPriceStep": {
"low": 0.01,
"average": 0.025,
"high": 0.03
}
}
]
}
}
}
const response = await fetch('https://registry.elys.network/v1/chains/mainnet');
const registry = await response.json();
const elysChain = registry.chains.elys;
console.log(`RPC URL: ${elysChain.rpcURL}`);
const swappableCurrencies = Object.values(registry.chains)
.flatMap(chain => chain.currencies)
.filter(currency => currency.canSwap);
package main
import (
"encoding/json"
"fmt"
"net/http"
)
type AssetRegistry struct {
Chains map[string]ChainAsset `json:"chains"`
}
type ChainAsset struct {
ChainID string `json:"chainId"`
ChainName string `json:"chainName"`
RPCURL string `json:"rpcURL"`
RestURL string `json:"restURL"`
Currencies []Currency `json:"currencies"`
}
type Currency struct {
CoinDenom string `json:"coinDenom"`
CoinMinimalDenom string `json:"coinMinimalDenom"`
CoinDecimals int `json:"coinDecimals"`
CanSwap bool `json:"canSwap"`
CanDeposit bool `json:"canDeposit"`
}
func main() {
resp, err := http.Get("https://registry.elys.network/v1/chains/mainnet")
if err != nil {
panic(err)
}
defer resp.Body.Close()
var registry AssetRegistry
json.NewDecoder(resp.Body).Decode(®istry)
// Usar la chain de Elys
elysChain := registry.Chains["elys"]
fmt.Printf("Elys RPC: %s\n", elysChain.RPCURL)
}
import com.fasterxml.jackson.databind.ObjectMapper;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class ElysRegistryClient {
private static final String REGISTRY_URL = "https://registry.elys.network/v1/chains/mainnet";
public static class AssetRegistry {
public Map<String, ChainAsset> chains;
}
public static class ChainAsset {
public String chainId;
public String chainName;
public String rpcURL;
public String restURL;
public List<Currency> currencies;
}
public static class Currency {
public String coinDenom;
public String coinMinimalDenom;
public int coinDecimals;
public boolean canSwap;
public boolean canDeposit;
}
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(REGISTRY_URL))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
ObjectMapper mapper = new ObjectMapper();
AssetRegistry registry = mapper.readValue(response.body(), AssetRegistry.class);
ChainAsset elys = registry.chains.get("elys");
System.out.println("Elys RPC: " + elys.rpcURL);
}
}
import requests
import json
from dataclasses import dataclass
from typing import List, Dict, Optional
@dataclass
class Currency:
coinDenom: str
coinMinimalDenom: str
coinDecimals: int
canSwap: bool
canDeposit: bool
@dataclass
class ChainAsset:
chainId: str
chainName: str
rpcURL: str
restURL: str
currencies: List[Currency]
@dataclass
class AssetRegistry:
chains: Dict[str, ChainAsset]
def load_registry() -> AssetRegistry:
response = requests.get("https://registry.elys.network/mainnet")
data = response.json()
chains = {}
for key, chain_data in data["chains"].items():
currencies = [Currency(**curr) for curr in chain_data["currencies"]]
chains[key] = ChainAsset(**{**chain_data, "currencies": currencies})
return AssetRegistry(chains=chains)
# Uso
registry = load_registry()
elys_chain = registry.chains["elys"]
print(f"Elys RPC: {elys_chain.rpcURL}")
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[derive(Serialize, Deserialize, Debug)]
struct Currency {
#[serde(rename = "coinDenom")]
coin_denom: String,
#[serde(rename = "coinMinimalDenom")]
coin_minimal_denom: String,
#[serde(rename = "coinDecimals")]
coin_decimals: u8,
#[serde(rename = "canSwap")]
can_swap: bool,
#[serde(rename = "canDeposit")]
can_deposit: bool,
}
#[derive(Serialize, Deserialize, Debug)]
struct ChainAsset {
#[serde(rename = "chainId")]
chain_id: String,
#[serde(rename = "chainName")]
chain_name: String,
#[serde(rename = "rpcURL")]
rpc_url: String,
#[serde(rename = "restURL")]
rest_url: String,
currencies: Vec<Currency>,
}
#[derive(Serialize, Deserialize, Debug)]
struct AssetRegistry {
chains: HashMap# API Endpoints y Consumo Multi-Plataforma
elys-asset-registry/
βββ π data/
β βββ π mainnet/
β βββββ elys.json
β βββββ cosmos.json
β βββ π testnet/
β βββββ elys.json
β βββββ cosmos.json
βββ π schema/
β βββ asset-registry.schema.json # JSON Schema
βββ π examples/
β βββ javascript/ # JavaScript examples
β βββ go/ # Go examples
β βββ java/ # Java examples
β βββ python/ # Python examples
β βββ rust/ # Rust examples
βββ π .github/
β βββ workflows/
β ββ validate-registry.yml CI for validatio
βββπ .version
βββπ README.md
- β Valid and well-formatted JSON
- β Complies with defined JSON Schema
- β No duplicate chainIds
- β Valid URLs for RPC/REST endpoints
- β Required properties present
- β Valid date formats
- Fork the repository
- Add asset to
data/mainnet/chain-key.json
ordata/testnet/chain-key.json
following the schema - Create pull request
Each chain asset must include:
{
"chainId": "elys-1",
"chainName": "Elys",
"addressPrefix": "elys",
"rpcURL": "https://rpc.elys.network:443",
"restURL": "https://api.elys.network:443",
"explorerURL": {
"transaction": "https://mainnet.itrocket.net/elys/tx/{transaction}"
},
"channel": {
"source": "",
"destination": ""
},
"currencies": [
{
"coinDenom": "ELYS",
"coinDisplayDenom": "Elys",
"coinMinimalDenom": "uelys",
"coinIbcDenom": "",
"coinDecimals": 6,
"coinGeckoId": "elys",
"canSwap": true,
"isFeeCurrency": true,
"isStakeCurrency": true,
"canWithdraw": true,
"canDeposit": true,
"canUseLiquidityMining": true,
"canUseLeverageLP": false,
"canUsePerpetual": false,
"canUseVaults": true,
"gasPriceStep": {
"low": 0.01,
"average": 0.025,
"high": 0.03
}
}
]
}
- π― Accuracy: Verified and updated information
- π Reliability: Functional and stable endpoints
- π Completeness: All required information present
- π Performance: Endpoints with good latency
- π Maintenance: Regularly updated information
We follow Semantic Versioning:
- MAJOR: Breaking changes to data structure
- MINOR: New assets or compatible features
- PATCH: Bug fixes and data updates
This registry is used by:
- Frontend Applications: Elys web and mobile applications
- Backend Services: APIs and microservices
- CLI Tools: Command line tools
- Third-party Integrations: DeFi and wallet integrations
- Development Tools: SDKs and frameworks
- π¦ Total Assets: Multiple supported chains
- π Networks: Mainnet, Testnet, Devnet
- π Update Frequency: Updates as needed