# `ash_sdk` Crate `ash-rs` is a Rust SDK for [Avalanche](https://avax.network) and [Ash](https://ash.center) tools. It provides a higher level of abstraction than [avalanche-types-rs](https://github.com/ava-labs/avalanche-types-rs) and comes with a CLI that simplifies the interaction with Avalanche networks. ## Opinionated structs layout The library provides an opinionated layout to represent Avalanche networks, Subnets and blockchains. The layout could be represented as follows: ``` AvalancheNetwork └── subnets ├── AvalancheSubnet 1 │ ├── blockchains │ │ ├── AvalancheBlockchain 1 │ │ └── AvalancheBlockchain 2 │ └── validators │ ├── AvalancheSubnetValidator 1 │ └── AvalancheSubnetValidator 2 └── AvalancheSubnet 2 ├── blockchains │ ├── AvalancheBlockchain 3 │ └── AvalancheBlockchain 4 └── validators ├── AvalancheSubnetValidator 1 └── AvalancheSubnetValidator 2 ``` ### Avalanche networks An `AvalancheNetwork` is a top level struct that represents an Avalanche network. It contains the list of its `AvalancheSubnet`s. Most of the updating methods are implemented on this struct (e.g. `update_subnet`, `update_blockchains`, etc.). ### Avalanche Subnets and validators An `AvalancheSubnet` is a struct that represents an Avalanche Subnet. It contains all the Subnet metadata, the list of its `AvalancheBlockchain`s and the list of its validators (as `AvalancheSubnetsValidator`s). ### Avalanche blockchains An `AvalancheBlockchain` is a struct that represents an Avalanche blockchain. It contains all the blockchain metadata. ### Avalanche nodes An `AvalancheNode` is a struct that represents an Avalanche node. An `AvalancheNode` is not directly linked to an `AvalancheNetwork` as its metadata are retrieved directly from its endpoint. ## Configuration The library relies on YAML configuration files that contains the list of known Avalanche networks. For each network, at least the P-Chain configuration has to be provided (in the Primary Network) with its ID and RPC endpoint. All the other Subnets/blockchains will be retrieved/enriched from the P-Chain. A default configuration is embedded in the library (see [conf/default.yaml](https://github.com/AshAvalanche/ash-rs/blob/main/crates/ash_sdk/conf/default.yml)) and contains the following networks: - `mainnet` and `fuji` use the default Avalanche public endpoints - `mainnet-ankr` and `fuji-ankr` use the Ankr Avalanche public endpoints - `mainnet-blast` and `fuji-blast` use the Blast Avalanche public endpoints Configuration example: ```yaml # Default configuration of the mainnet network avalancheNetworks: - name: mainnet subnets: - id: 11111111111111111111111111111111LpoYY controlKeys: [] threshold: 0 blockchains: - id: 11111111111111111111111111111111LpoYY name: P-Chain vmType: PlatformVM rpcUrl: https://api.avax.network/ext/bc/P - id: 2q9e4r6Mu3U68nU1fYjgbR6JvwrRx36CohpAX5UQxse55x1Q5 name: C-Chain vmID: mgj786NP7uDwBCcq6YwThhaN8FLyybkCa4zBWTQbNgmK6k9A6 vmType: Coreth rpcUrl: https://api.avax.network/ext/bc/C/rpc - id: 2oYMBNV4eNHyqk2fjjV5nVQLDbtmNJzq5s3qs3Lo6ftnC6FByM name: X-Chain vmID: jvYyfQTxGMJLuGWa55kdP2p2zSUYsQ5Raupu4TW34ZAUBAbtq vmType: AvalancheVM rpcUrl: https://api.avax.network/ext/bc/X ``` **Note:** You can generate a configuration file with the CLI using the `ash conf init` command. ## Usage One can check out the [CLI code](https://github.com/AshAvalanche/ash-rs/tree/main/crates/ash_cli) to see examples of how to use the library. ## Modules See the [docs.rs documentation](https://docs.rs/ash_sdk) for more details.