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:
Copy public protocol SystemModule : AnyObject {
func runtimeVersion () async throws -> RuntimeVersion ?
func account ( accountId : AccountId) async throws -> Account ?
func account ( accountIdHex : String ) async throws -> Account ?
func account ( publicKey : Data) async throws -> Account ?
func account ( publicKeyHex : String ) async throws -> Account ?
func account ( keyPair : KeyPair) async throws -> Account ?
}
Runtime version
Runtime version is declared like this:
Copy public struct RuntimeVersion : Codable {
public let specName: String
public let implName: String
public let authoringVersion: Index
public let specVersion: Index
public let implVersion: Index
public let apis: [RuntimeVersionApi]
public let txVersion: Index
public let stateVersion: UInt8
}
public struct RuntimeVersionApi : Codable {
@Array8 public var id: [ UInt8 ]
public let 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:
Copy let client: SubstrateClient
let metadata = try await client.modules.system. runtimeVersion ()
Account details
You can take a look at Account details struct below:
Copy public struct Account : Codable {
public let nonce: Index
public let consumers: Index
public let providers: Index
public let sufficients: Index
public let data: AccountData
public struct AccountData : Codable {
public let free: Balance
public let reserved: Balance
public let miscFrozen: Balance
public let 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:
Copy let client: SubstrateClient
let keyPair: KeyPair
let account: Account ? = try await client.modules.system. account ( keyPair : keyPair )
let publicKey = keyPair.publicKey
let account: Account ? = try await client.modules.system. account ( publicKey : publicKey )
let account: Account ? = try await client.modules.system. account ( publicKeyHex : publicKey.hex.encode ())
let accountId: AccountId = try publicKey.ss58. accountId ()
let account: Account ? = try await client.modules.system. account ( accountId : accountId )
let account1: Account ? = try await client.modules.system. account ( accountIdHex : accountId.hex.encode ())