System module

The system module has nothing more than just runtime version and getting account details. But for your convenience we've added a huge list for all possible account retrieval options:

interface SystemModule {
    suspend fun runtimeVersion(): RuntimeVersion?
    suspend fun accountByAccountId(accountId: ByteArrayConvertible): Account?
    suspend fun accountByAccountId(accountId: AccountId): Account?
    suspend fun accountByAccountId(accountIdHex: String): Account?
    suspend fun accountByPublicKey(publicKey: ByteArray): Account?
    suspend fun accountByPublicKey(publicKeyHex: String): Account?
    suspend fun accountByKeyPair(keyPair: KeyPair): Account?
}

Runtime version

Runtime version is declared like this:

data class RuntimeVersion(
    val specName: String,
    val implName: String,
    val authoringVersion: Index,
    val specVersion: Index,
    val implVersion: Index,
    val apis: List<RuntimeVersionApi>,
    val txVersion: Index,
    val stateVersion: UInt8
)

data class RuntimeVersionApi(
    @FixedArray(size = 8) val id: List<Byte>,
    val index: Index
)

Index is a dynamic type, and you can read more about this here.

And to get runtime version, it's simple as that:

val client: SubstrateClient
val runtimeVersion: RuntimeVersion? = client.modules.system.runtimeVersion()

Account details

You can take a look at Account details class below:

data class Account(
    val nonce: Index,
    val consumers: Index,
    val providers: Index,
    val sufficients: Index,
    val data: Data
) {
    data class Data(
        val free: Balance,
        val reserved: Balance,
        val miscFrozen: Balance,
        val feeFrozen: Balance
    )
}

In addition to Index, here you can find Balance type, which is also another dynamic type.

So here are all examples of how to get account details using different approaches:

val client: SubstrateClient

val keyPair: KeyPair
val account: Account? = client.modules.system.accountByKeyPair(keyPair)

val publicKey: ByteArray = keyPair.publicKey
val account: Account? = client.modules.system.accountByPublicKey(publicKey)
val account: Account? = client.modules.system.accountByPublicKey(publicKey.hex.encode())

val accountId: AccountId = publicKey.ss58.accountId()
val account: Account? = client.modules.system.accountByAccountId(accountId)
val account: Account? = client.modules.system.accountByAccountId(accountId.hex.encode())
val account: Account? = client.modules.system.accountByAccountId(accountId.asByteArrayConvertible())

Last updated