A Swift wrapper for the smoldot Rust-based Polkadot light client.
Add the package declaration to your project's manifest dependencies array:
.package(url: "https://github.com/finsig/smoldot-swift.git", from: "0.1.0")A Chain Specification file must be provided to initialize a chain. A Chain Specification is a JSON Object that describes a Polkadot-based blockchain network.
Example Chain Specification JSON files for Polkadot, Kusama, Rococo, and Westend can be copied for use from /Tests/SmoldotSwiftTests/Resources.
Initialize a chain from a specification file:
var chain = Chain(specificationFile: {Resource file URL})Add the chain to the client to connect to the network:
try Client.shared.add(chain: &chain)RPC requests must conform to the JSON-RPC 2.0 protocol. A request can be built programatically:
let request = try JSONRPC2Request(method: "chain_getHeader", identifier: .int(1))or initialized from a String in the JSON data format:
let request = try JSONRPC2Request(string: "{\"id\":1,\"jsonrpc\":\"2.0\",\"method\":\"chain_getHeader\",\"params\":[]}")To send the request use:
try Client.shared.send(request: request, to: chain)To wait for a response use:
try await Client.shared.response(from: chain)Alternatively, an asynchronous stream of responses may be read using:
try await Client.shared.responses(from: chain)To disconnect the client from the network use:
try Client.shared.remove(chain: &chain)For additional information about usage see reference documentation.
You may enable logging of the smoldot Rust FFI library with an environment variable at runtime (RUST_LOG). The library uses the Rustenv_logger framework and levels can be set accordingly.
There is a build_xcframework.sh script in the repo which can be used to build the XCode Framework target from the smoldot Rust FFI library.
$ zsh build_xcframework.sh devOmitting the dev argument will modify the package settings to use a remote binary target and create a compressed framework file (along with the checksum value).
In addition to unit tests please see this project for memory usage profiling.
See GitHub issues regarding log noise.