paritytech / subxt

Interact with Substrate based nodes in Rust or WebAssembly
Other
411 stars 244 forks source link

Issue parameterizing a custom Nonce #1558

Closed Fiono11 closed 5 months ago

Fiono11 commented 5 months ago

I am trying to run the following example from https://docs.rs/subxt/latest/subxt/book/usage/transactions/index.html#constructing-a-transaction-payload:

#![allow(missing_docs)]
use subxt::config::polkadot::PolkadotExtrinsicParamsBuilder as Params;
use subxt::{OnlineClient, PolkadotConfig};
use subxt_signer::sr25519::dev;

#[subxt::subxt(runtime_metadata_path = "../artifacts/polkadot_metadata_small.scale")]
pub mod polkadot {}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Create a new API client, configured to talk to Polkadot nodes.
    let api = OnlineClient::<PolkadotConfig>::new().await?;

    // Build a balance transfer extrinsic.
    let dest = dev::bob().public_key().into();
    let tx = polkadot::tx().balances().transfer_allow_death(dest, 10_000);

    let latest_block = api.blocks().at_latest().await?;

    // Configure the transaction parameters; we give a small tip and set the
    // transaction to live for 32 blocks from the `latest_block` above.
    let tx_params = Params::new()
        .tip(1_000)
        .mortal(latest_block.header(), 32)
        .build();

    // submit the transaction:
    let from = dev::alice();
    let hash = api.tx().sign_and_submit(&tx, &from, tx_params).await?;
    println!("Balance transfer extrinsic submitted with hash : {hash}");

    Ok(())
}

But with the following params instead:

let tx_params = Params::new()
    .nonce(100)
    .build();

When I try to submit the transaction it gets stuck without any error. Any idea what may cause that?

Fiono11 commented 5 months ago

Managed to solve this by requesting the subsequent nonce to the legacy RPC. But it still should work with a random nonce, just like the one that comes from the last finalized block with the new RPC, right?