Skip to content

Commit f774408

Browse files
brunopgalvaonhussein110xlukemeshaben
authored
Add runtime API calls guide with SDK examples (#1325)
* Add runtime API calls guide with SDK examples Add comprehensive guide for calling runtime APIs using PAPI, Polkadot.js, Dedot, Python Substrate Interface, and Subxt. Examples demonstrate AccountNonceApi and Metadata runtime API calls with complete, tested code snippets for each SDK. * Refactor runtime API calls guide to use Polkadot Hub TestNet - Update all examples to use Paseo Asset Hub endpoint (wss://asset-hub-paseo.dotters.network) - Change PAPI types generation to use polkadotTestNet descriptor - Update console output messages to show "Connected to Polkadot Hub TestNet" - Update HTML output snippets to reflect testnet connection - Update Python output to show asset-hub-paseo spec name * Update .chain-interactions/query-data/runtime-api-calls.md Co-authored-by: Nicolás Hussein <[email protected]> * Update .snippets/code/chain-interactions/query-data/runtime-api-calls/psi/runtime_apis.py Co-authored-by: Nicolás Hussein <[email protected]> * Update .chain-interactions/query-data/runtime-api-calls.md Co-authored-by: Nicolás Hussein <[email protected]> * Update .snippets/code/chain-interactions/query-data/runtime-api-calls/dedot/runtime-apis.ts Co-authored-by: Nicolás Hussein <[email protected]> * Rename ASSET_HUB_RPC to POLKADOT_TESTNET_RPC in all code snippets * Rename Subxt metadata file to polkadot_testnet_metadata.scale * Update .snippets/code/chain-interactions/query-data/runtime-api-calls/papi/runtime-apis.ts Co-authored-by: Nicolás Hussein <[email protected]> * formating review * Update .chain-interactions/query-data/runtime-api-calls.md * Update .chain-interactions/query-data/runtime-api-calls.md --------- Co-authored-by: Nicolás Hussein <[email protected]> Co-authored-by: 0xlukem <[email protected]> Co-authored-by: Erin Shaben <[email protected]>
1 parent 13b59f9 commit f774408

File tree

12 files changed

+606
-1
lines changed

12 files changed

+606
-1
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<div class="termynal" data-termynal>
2+
<span data-ty="input"><span class="file-path"></span>npx tsx runtime-apis.ts</span>
3+
<span data-ty="progress"></span>
4+
<span data-ty>Connected to Polkadot Hub TestNet</span>
5+
<span data-ty>Querying runtime APIs for: 15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5</span>
6+
<span data-ty></span>
7+
<span data-ty>AccountNonceApi Results:</span>
8+
<span data-ty> Account Nonce: 11</span>
9+
<span data-ty></span>
10+
<span data-ty>Metadata API Results:</span>
11+
<span data-ty> Supported Metadata Versions: [14, 15, 16]</span>
12+
</div>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { DedotClient, WsProvider } from 'dedot';
2+
import type { PolkadotAssetHubApi } from '@dedot/chaintypes';
3+
4+
const POLKADOT_TESTNET_RPC = 'INSERT_WS_ENDPOINT';
5+
6+
// Example address to query
7+
const ADDRESS = 'INSERT_ADDRESS';
8+
9+
async function main() {
10+
// Initialize provider and client with Polkadot TestNet types
11+
const provider = new WsProvider(POLKADOT_TESTNET_RPC);
12+
const client = await DedotClient.new<PolkadotAssetHubApi>(provider);
13+
14+
console.log('Connected to Polkadot Hub TestNet');
15+
console.log(`Querying runtime APIs for: ${ADDRESS}\n`);
16+
17+
// Call AccountNonceApi to get the account nonce
18+
const nonce = await client.call.accountNonceApi.accountNonce(ADDRESS);
19+
console.log('AccountNonceApi Results:');
20+
console.log(` Account Nonce: ${nonce}`);
21+
22+
// Query metadata versions using Metadata runtime API
23+
const metadataVersions = await client.call.metadata.metadataVersions();
24+
console.log('\nMetadata API Results:');
25+
console.log(` Supported Metadata Versions: [${metadataVersions.join(', ')}]`);
26+
27+
// Disconnect the client
28+
await client.disconnect();
29+
}
30+
31+
main().catch(console.error);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<div class="termynal" data-termynal>
2+
<span data-ty="input"><span class="file-path"></span>npx tsx runtime-apis.ts</span>
3+
<span data-ty="progress"></span>
4+
<span data-ty>Connected to Polkadot Hub TestNet</span>
5+
<span data-ty>Querying runtime APIs for: 15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5</span>
6+
<span data-ty></span>
7+
<span data-ty>AccountNonceApi Results:</span>
8+
<span data-ty> Account Nonce: 11</span>
9+
<span data-ty></span>
10+
<span data-ty>Metadata API Results:</span>
11+
<span data-ty> Supported Metadata Versions: [14, 15, 16]</span>
12+
</div>
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { createClient } from 'polkadot-api';
2+
import { getWsProvider } from 'polkadot-api/ws-provider/node';
3+
import { withPolkadotSdkCompat } from 'polkadot-api/polkadot-sdk-compat';
4+
import { polkadotTestNet } from '@polkadot-api/descriptors';
5+
6+
const POLKADOT_TESTNET_RPC = 'INSERT_WS_ENDPOINT';
7+
8+
// Example address to query
9+
const ADDRESS = 'INSERT_ADDRESS';
10+
11+
async function main() {
12+
// Create the client connection
13+
const client = createClient(
14+
withPolkadotSdkCompat(getWsProvider(POLKADOT_TESTNET_RPC))
15+
);
16+
17+
// Get the typed API for Polkadot Hub TestNet
18+
const api = client.getTypedApi(polkadotTestNet);
19+
20+
console.log('Connected to Polkadot Hub TestNet');
21+
console.log(`Querying runtime APIs for: ${ADDRESS}\n`);
22+
23+
// Call AccountNonceApi to get the account nonce
24+
const nonce = await api.apis.AccountNonceApi.account_nonce(ADDRESS);
25+
console.log('AccountNonceApi Results:');
26+
console.log(` Account Nonce: ${nonce}`);
27+
28+
// Query metadata versions using Metadata runtime API
29+
const metadataVersions = await api.apis.Metadata.metadata_versions();
30+
console.log('\nMetadata API Results:');
31+
console.log(` Supported Metadata Versions: [${metadataVersions.join(', ')}]`);
32+
33+
// Disconnect the client
34+
client.destroy();
35+
}
36+
37+
main().catch(console.error);
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<div class="termynal" data-termynal>
2+
<span data-ty="input"><span class="file-path"></span>node runtime-apis.js</span>
3+
<span data-ty="progress"></span>
4+
<span data-ty>Connected to Polkadot Hub TestNet</span>
5+
<span data-ty>Querying runtime APIs for: 15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5</span>
6+
<span data-ty></span>
7+
<span data-ty>AccountNonceApi Results:</span>
8+
<span data-ty> Account Nonce: 11</span>
9+
<span data-ty></span>
10+
<span data-ty>Metadata API Results:</span>
11+
<span data-ty> Supported Metadata Versions: [14, 15, 16]</span>
12+
</div>
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { ApiPromise, WsProvider } from '@polkadot/api';
2+
3+
const POLKADOT_TESTNET_RPC = 'INSERT_WS_ENDPOINT';
4+
5+
// Example address to query
6+
const ADDRESS = 'INSERT_ADDRESS';
7+
8+
async function main() {
9+
// Create a WebSocket provider
10+
const wsProvider = new WsProvider(POLKADOT_TESTNET_RPC);
11+
12+
// Initialize the API
13+
const api = await ApiPromise.create({ provider: wsProvider });
14+
15+
console.log('Connected to Polkadot Hub TestNet');
16+
console.log(`Querying runtime APIs for: ${ADDRESS}\n`);
17+
18+
// Call AccountNonceApi to get the account nonce
19+
const nonce = await api.call.accountNonceApi.accountNonce(ADDRESS);
20+
console.log('AccountNonceApi Results:');
21+
console.log(` Account Nonce: ${nonce.toString()}`);
22+
23+
// Query metadata versions using Metadata runtime API
24+
const metadataVersions = await api.call.metadata.metadataVersions();
25+
console.log('\nMetadata API Results:');
26+
console.log(
27+
` Supported Metadata Versions: [${metadataVersions.map((v) => v.toString()).join(', ')}]`
28+
);
29+
30+
// Disconnect from the node
31+
await api.disconnect();
32+
}
33+
34+
main().catch(console.error);
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<div class="termynal" data-termynal>
2+
<span data-ty="input"><span class="file-path"></span>python runtime_apis.py</span>
3+
<span data-ty="progress"></span>
4+
<span data-ty>Connected to Polkadot Hub TestNet</span>
5+
<span data-ty>Querying runtime APIs for: 15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5</span>
6+
<span data-ty></span>
7+
<span data-ty>AccountNonceApi Results:</span>
8+
<span data-ty> Account Nonce: 11</span>
9+
<span data-ty></span>
10+
<span data-ty>Core API Results:</span>
11+
<span data-ty> Spec Name: asset-hub-paseo</span>
12+
<span data-ty> Spec Version: 1004001</span>
13+
<span data-ty> Impl Version: 0</span>
14+
</div>
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from substrateinterface import SubstrateInterface
2+
3+
POLKADOT_TESTNET_RPC = "INSERT_WS_ENDPOINT"
4+
5+
# Example address to query
6+
ADDRESS = "INSERT_ADDRESS"
7+
8+
9+
def main():
10+
# Connect to Polkadot Hub TestNet
11+
substrate = SubstrateInterface(url=POLKADOT_TESTNET_RPC)
12+
13+
print("Connected to Polkadot Hub TestNet")
14+
print(f"Querying runtime APIs for: {ADDRESS}\n")
15+
16+
# Call AccountNonceApi to get the account nonce
17+
nonce = substrate.runtime_call("AccountNonceApi", "account_nonce", [ADDRESS])
18+
print("AccountNonceApi Results:")
19+
print(f" Account Nonce: {nonce.value}")
20+
21+
# Query runtime version using Core runtime API
22+
version = substrate.runtime_call("Core", "version", [])
23+
print("\nCore API Results:")
24+
print(f" Spec Name: {version.value['spec_name']}")
25+
print(f" Spec Version: {version.value['spec_version']}")
26+
print(f" Impl Version: {version.value['impl_version']}")
27+
28+
# Close connection
29+
substrate.close()
30+
31+
32+
if __name__ == "__main__":
33+
main()
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[package]
2+
name = "subxt-runtime-api-example"
3+
version = "0.1.0"
4+
edition = "2021"
5+
6+
[[bin]]
7+
name = "runtime_apis"
8+
path = "src/bin/runtime_apis.rs"
9+
10+
[dependencies]
11+
subxt = "0.44.0"
12+
tokio = { version = "1", features = ["rt", "macros"] }
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<div class="termynal" data-termynal>
2+
<span data-ty="input"><span class="file-path"></span>cargo run --bin runtime_apis</span>
3+
<span data-ty="progress"></span>
4+
<span data-ty>Connected to Polkadot Hub TestNet</span>
5+
<span data-ty>Querying runtime APIs for: 15oF4uVJwmo4TdGW7VfQxNLavjCXviqxT9S1MgbjMNHr6Sp5</span>
6+
<span data-ty></span>
7+
<span data-ty>AccountNonceApi Results:</span>
8+
<span data-ty> Account Nonce: 11</span>
9+
<span data-ty></span>
10+
<span data-ty>Metadata API Results:</span>
11+
<span data-ty> Supported Metadata Versions: (14, 15, 16)</span>
12+
</div>

0 commit comments

Comments
 (0)