mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-22 21:58:00 +00:00
b6b9ac65c7
* TransactionExtensions basic support for V5 VerifySignature and renames * WIP: subxt-core v5 transaction support * Subxt to support V5 extrinsics * WIP tests failing with wsm trap error * Actually encode mortality to fix tx encode issue * fmt * rename to sign_with_account_and_signature * Add explicit methods for v4 and v5 ext construction * clippy * fix wasm example and no mut self where not needed * fix doc example * another doc fix * Add tests for tx encoding and fix v5 encode issue * add copyright and todo * refactor APIs to have clear v4/v5 split in core and slightly nicer split in subxt proper * rename Partial/SubmittableExtrinsic to *Transaction * Remove SignerT::address since it's not needed * doc fixes * fmt * doc fixes * Fix comment number * Clarify panic behaviour of inject_signature * fmt
54 lines
1.7 KiB
Rust
54 lines
1.7 KiB
Rust
#![allow(missing_docs)]
|
|
use subxt::{OnlineClient, PolkadotConfig};
|
|
use subxt_signer::sr25519::dev;
|
|
|
|
type BoxedError = Box<dyn std::error::Error + Send + Sync + 'static>;
|
|
|
|
#[subxt::subxt(runtime_metadata_path = "../artifacts/polkadot_metadata_small.scale")]
|
|
pub mod polkadot {}
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<(), BoxedError> {
|
|
// Spawned tasks require things held across await points to impl Send,
|
|
// so we use one to demonstrate that this is possible with `PartialTransaction`
|
|
tokio::spawn(signing_example()).await??;
|
|
Ok(())
|
|
}
|
|
|
|
async fn signing_example() -> Result<(), BoxedError> {
|
|
let api = OnlineClient::<PolkadotConfig>::new().await?;
|
|
|
|
// Build a balance transfer extrinsic.
|
|
let dest = dev::bob().public_key().into();
|
|
let balance_transfer_tx = polkadot::tx().balances().transfer_allow_death(dest, 10_000);
|
|
|
|
let alice = dev::alice();
|
|
|
|
// Create partial tx, ready to be signed.
|
|
let mut partial_tx = api
|
|
.tx()
|
|
.create_partial(
|
|
&balance_transfer_tx,
|
|
&alice.public_key().to_account_id(),
|
|
Default::default(),
|
|
)
|
|
.await?;
|
|
|
|
// Simulate taking some time to get a signature back, in part to
|
|
// show that the `PartialTransaction` can be held across await points.
|
|
tokio::time::sleep(tokio::time::Duration::from_millis(100)).await;
|
|
let signature = alice.sign(&partial_tx.signer_payload());
|
|
|
|
// Sign the transaction.
|
|
let tx = partial_tx
|
|
.sign_with_account_and_signature(&alice.public_key().to_account_id(), &signature.into());
|
|
|
|
// Submit it.
|
|
tx.submit_and_watch()
|
|
.await?
|
|
.wait_for_finalized_success()
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|