mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 10:01:17 +00:00
8329990a33
* WIP integrating new frame-decode and working out new storage APIS * WIP: first pass adding new storage things to subxt-core * Second pass over Address type and start impl in Subxt * WIP new storage APIs * WIP New storage APIs roughly completed, lots of errors still * Remove PlainorMap enum; plain and map values now use same struct to simplify usage * Begin 'fixing' errors * WIP splitting errors and tidying payload/address traits * Get subxt-core compiling * Small fixes in subxt-core and remove metadata mod * subxt-core: cargo check --all-targets passes * Fix test * WIP starting to update subxt from subxt-core changes * WIP splitting up subxt errors into smaller variants * WIP errors: add DispatchError errors * Port new Storage APIs to subxt-core * cargo check -p subxt passes * Quick-fix errors in subxt-cli (explore subcommand) * fmt * Finish fixing codegen up and start fixing examples * get Subxt examples compiling and bytes_at for constants * Add some arcs to limit lifetimes in subxt/subxt-core storage APIs * A little Arcing to allow more method chaining in Storage APIs, aligning with Subxt * Update codegen test * cargo check --all-targets passing * cargo check --features 'unstable-light-client' passing * clippy * Remove unused dep in subxt * use published frame-decode * fix wasm-example * Add new tx extension to fix daily tests * Remove unused subxt_core::dynamic::DecodedValue type * Update book to match changes * Update docs to fix more broken bits * Add missing docs * fmt * allow larger result errs for now * Add missing alloc imports in subxt-core * Fix doc tests and fix bug getting constant info * Fix V14 -> Metadata transform for storage & constants * Fix parachain example * Fix FFI example * BlockLength decodes t ostruct, not u128 * use fetch/iter shorthands rather than entry in most storage tests * Fix some integration tests * Fix Runtime codegen tests * Expose the dynamic custom_value selecter and use in a UI test * Update codegen metadata * Tidy CLI storage query and support (str,str) as a storage address * Add (str,str) as valid constant address too * Show string tuple in constants example * Via the magic of traits, avoid needing any clones of queries/addresses and accept references to them * clippy
81 lines
2.6 KiB
Rust
81 lines
2.6 KiB
Rust
use subxt::{
|
|
PolkadotConfig,
|
|
utils::{AccountId32, MultiAddress},
|
|
OnlineClient,
|
|
};
|
|
use subxt_signer::sr25519::dev::{self};
|
|
|
|
#[subxt::subxt(runtime_metadata_path = "statemint_metadata.scale")]
|
|
pub mod statemint {}
|
|
|
|
// PolkadotConfig or SubstrateConfig will suffice for this example at the moment,
|
|
// but PolkadotConfig is a little more correct, having the right `Address` type.
|
|
type StatemintConfig = PolkadotConfig;
|
|
|
|
#[tokio::main]
|
|
pub async fn main() {
|
|
if let Err(err) = run().await {
|
|
eprintln!("{err}");
|
|
}
|
|
}
|
|
|
|
async fn run() -> Result<(), Box<dyn std::error::Error>> {
|
|
// (the port 42069 is specified in the asset-hub-zombienet.toml)
|
|
let api = OnlineClient::<StatemintConfig>::from_url("ws://127.0.0.1:42069").await?;
|
|
println!("Connection with parachain established.");
|
|
|
|
let alice: MultiAddress<AccountId32, ()> = dev::alice().public_key().into();
|
|
let alice_pair_signer = dev::alice();
|
|
|
|
const COLLECTION_ID: u32 = 12;
|
|
const NTF_ID: u32 = 234;
|
|
|
|
// create a collection with id `12`
|
|
let collection_creation_tx = statemint::tx()
|
|
.uniques()
|
|
.create(COLLECTION_ID, alice.clone());
|
|
let _collection_creation_events = api
|
|
.tx()
|
|
.sign_and_submit_then_watch_default(&collection_creation_tx, &alice_pair_signer)
|
|
.await
|
|
.map(|e| {
|
|
println!("Collection creation submitted, waiting for transaction to be finalized...");
|
|
e
|
|
})?
|
|
.wait_for_finalized_success()
|
|
.await?;
|
|
println!("Collection created.");
|
|
|
|
// create an nft in that collection with id `234`
|
|
let nft_creation_tx = statemint::tx()
|
|
.uniques()
|
|
.mint(COLLECTION_ID, NTF_ID, alice.clone());
|
|
let _nft_creation_events = api
|
|
.tx()
|
|
.sign_and_submit_then_watch_default(&nft_creation_tx, &alice_pair_signer)
|
|
.await
|
|
.map(|e| {
|
|
println!("NFT creation submitted, waiting for transaction to be finalized...");
|
|
e
|
|
})?
|
|
.wait_for_finalized_success()
|
|
.await?;
|
|
println!("NFT created.");
|
|
|
|
// check in storage, that alice is the official owner of the NFT:
|
|
let nft_owner_storage_query = statemint::storage().uniques().asset();
|
|
let nft_storage_details = api
|
|
.storage()
|
|
.at_latest()
|
|
.await?
|
|
.fetch(nft_owner_storage_query, (COLLECTION_ID, NTF_ID))
|
|
.await?
|
|
.decode()?;
|
|
|
|
// make sure that alice is the owner of the NFT:
|
|
assert_eq!(nft_storage_details.owner, dev::alice().public_key().into());
|
|
println!("Storage Item Details: {:?}", nft_storage_details);
|
|
|
|
Ok(())
|
|
}
|