In the Substrate ecosystem, each wallet is associated with a unique Public Key that remains consistent across all Substrate-based networks. However, each network (or platform) derives its dedicated address format from this shared Public Key.
For example,
For Public Key = 0xf5d5714c084c112843aca74f8c498da06cc5a2d63153b825189baa51043b1f0b,
There are dedicated addresses per platform
Although these addresses differ, they all resolve to the same underlying Public Key.
You can use the Subscan address converter to transform the public key between different formats - https://polkadot.subscan.io/tools/format_transform
How TRES Handles This
At TRES, we use the Public Key as the primary identifier for wallets across the entire Substrate ecosystem. This approach ensures that a single wallet is recognized consistently, even when it appears on multiple networks under different address formats.
To provide a better user experience and avoid confusion, TRES also automatically detects the platforms on which a given Public Key is active.
However, we recognize that some users prefer to identify wallets using the network-specific address format (e.g., a Polkadot or Nodle address). To support this use case, TRES includes an automatic address-to-Public-Key parser, which converts any valid Substrate address into its corresponding Public Key. This allows users to input familiar address formats while maintaining consistency in our backend.
Example of Using TRES API to Register Substrate Address
1. Create / Update Batch Internal Accounts - Register a new Substrate address from any format.
We used the address 16ZL8yLyXv3V3L3z9ofR1ovFLziyXaN1DPq4yffMAZ9czzBD (check the request).
TRES auto-formatted the dedicated address to the Substrate Public Key (check the response).
2. Trigger a Parallel Commit - Trigger a data collection using the Substrate address from any format.
Example:
{
"internalAccountIds": [],
"fromDate": "2025-07-01T00:00:00+00:00",
"toDate": "2025-07-09T00:00:00+00:00",
"commitId": "8b16a104-462a-4f68-bafd-b4634eafc802",
"assetsToCollect": ["substrate_polkadot_native"],
"internalAccountIdentifiers": ["16ZL8yLyXv3V3L3z9ofR1ovFLziyXaN1DPq4yffMAZ9czzBD"]
}
3. Filter Sub Transactions (Transfers, Balance Changing Events) using the Substrate address from any format.
Example:
{
"limit": 100,
"offset": 0,
"timestamp_Lt": "2025-07-20T17:25:25.805453+00:00",
"timestamp_Gt": "2025-01-01T17:25:25.805453+00:00",
"belongsTo_Identifier_In": ["16ZL8yLyXv3V3L3z9ofR1ovFLziyXaN1DPq4yffMAZ9czzBD"],
"asset_In": ["substrate_polkadot_native"]
}
As you can see, the filter is by the network's dedicated address.
However, the addresses in the response refer to the Public Key, which is only used to ensure we capture cross-network (parachains) transactions.
4. Check Parallel Commit Reconciliation Status - returns metrics about the data collection.
Request:
{
"commitId": "6a16a104-422a-4f68-bafd-b4634eafc801"
}
Response:
[
{
"fromDate": "2025-06-01T00:00:00+00:00",
"toDate": "2025-07-09T00:00:00+00:00",
"inflowAmount": 0.0032838007,
"outflowAmount": -5000000.0,
"feeAmount": -0.049850441,
"totalAmount": -5000000.04656664,
"openingBalance": 97111595.10644071,
"closingBalance": 92111595.05987407,
"balanceDiff": -5000000.046566635,
"reconciliationDiff": -4.6566128730773926e-09,
"isReconciled": true
}
]