mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-04-25 12:57:58 +00:00
fc5a18aaa0
* integrate scale-typegen, remove types mod * reintroduce default substitutes and derives * support runtime_types only again * generating polkadot.rs ok * update scale-typegen to discrete error types * scale-typegen-api-changes * add note about UncheckedExtrinsic in default substitutes * add resursive attributes and derives * adjust example where Clone bound recursive * move scale-typegen dependency to workspace * expose default typegen settings * lightclient: Fix wasm socket closure called after being dropped (#1289) * lightclient: Close wasm socket while dropping from connecting state Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * lightclient: Construct one time only closures Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * testing: Enable console logs for lightclient WASM testing Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * lightclient: Separate wakes and check connectivity on poll_read Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * lightclient: Close the socket depending on internal state Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * Revert "lightclient: Separate wakes and check connectivity on poll_read" This reverts commit 866094001d4c0b119a80ed681a74b323f74eae1b. * lightclient: Return pending if socket is opening from poll_read Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * lightclient: Close the socket on `poll_close` Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * lightclient: Reset closures on Drop to avoid recursive invokation Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * lightclient: Close the socket if not already closing Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> --------- Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * workflows: Install rustup component for building substrate (#1295) Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * cli: Command to fetch chainSpec and optimise its size (#1278) * cli: Add chainSpec command Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * cli/chainSpec: Move to dedicated module Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * cli: Compute the state root hash Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * cli: Remove code substitutes Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * artifacts: Update polkadot.json Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * scripts: Generate the chain spec Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * cli: Remove testing artifacts Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * cli: Fix clippy Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * cli: Apply rustfmt Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * cli: Introduce feature flag for smoldot dependency Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * cli: Rename chain-spec to chain-spec-pruning Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * scripts: Update chain-spec command Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> --------- Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> * remove comments and unused args * Update substrate- and signer-related dependencies (#1297) * update crypto dependencies, adjust keypair * add scale_info::TypeInfo derive in some places * add multi signature derive * fix lock file * fix lock file again :| * adjust to new interface in scale-typegen * use released scale typegen * reintroduce type aliases * introduce type aliases again using scale-typegen * cargo fmt and clippy * reconcile changes with master branch * update polkadot.rs * bump scale-typgen to fix substitution * implemented Alex suggestions, regenerated polkadot.rs (did not change) * resolve conflicts in Cargo.lock * make expect messages more clear * correct typos --------- Signed-off-by: Alexandru Vasile <alexandru.vasile@parity.io> Co-authored-by: Alexandru Vasile <60601340+lexnv@users.noreply.github.com>
106 lines
3.1 KiB
Rust
106 lines
3.1 KiB
Rust
#![allow(missing_docs)]
|
|
use codec::Encode;
|
|
use subxt::client::OfflineClientT;
|
|
use subxt::config::{Config, ExtrinsicParams, ExtrinsicParamsEncoder, ExtrinsicParamsError};
|
|
use subxt_signer::sr25519::dev;
|
|
|
|
#[subxt::subxt(
|
|
runtime_metadata_path = "../artifacts/polkadot_metadata_full.scale",
|
|
derive_for_type(
|
|
path = "xcm::v2::multilocation::MultiLocation",
|
|
derive = "Clone",
|
|
recursive
|
|
)
|
|
)]
|
|
pub mod runtime {}
|
|
use runtime::runtime_types::xcm::v2::multilocation::MultiLocation;
|
|
|
|
// We don't need to construct this at runtime,
|
|
// so an empty enum is appropriate:
|
|
pub enum CustomConfig {}
|
|
|
|
impl Config for CustomConfig {
|
|
type Hash = subxt::utils::H256;
|
|
type AccountId = subxt::utils::AccountId32;
|
|
type Address = subxt::utils::MultiAddress<Self::AccountId, ()>;
|
|
type Signature = subxt::utils::MultiSignature;
|
|
type Hasher = subxt::config::substrate::BlakeTwo256;
|
|
type Header = subxt::config::substrate::SubstrateHeader<u32, Self::Hasher>;
|
|
type ExtrinsicParams = CustomExtrinsicParams<Self>;
|
|
type AssetId = MultiLocation;
|
|
}
|
|
|
|
// This represents some arbitrary (and nonsensical) custom parameters that
|
|
// will be attached to transaction extra and additional payloads:
|
|
pub struct CustomExtrinsicParams<T: Config> {
|
|
genesis_hash: T::Hash,
|
|
tip: u128,
|
|
foo: bool,
|
|
}
|
|
|
|
// We can provide a "pretty" interface to allow users to provide these:
|
|
#[derive(Default)]
|
|
pub struct CustomExtrinsicParamsBuilder {
|
|
tip: u128,
|
|
foo: bool,
|
|
}
|
|
|
|
impl CustomExtrinsicParamsBuilder {
|
|
pub fn new() -> Self {
|
|
Default::default()
|
|
}
|
|
pub fn tip(mut self, value: u128) -> Self {
|
|
self.tip = value;
|
|
self
|
|
}
|
|
pub fn enable_foo(mut self) -> Self {
|
|
self.foo = true;
|
|
self
|
|
}
|
|
}
|
|
|
|
// Describe how to fetch and then encode the params:
|
|
impl<T: Config> ExtrinsicParams<T> for CustomExtrinsicParams<T> {
|
|
type OtherParams = CustomExtrinsicParamsBuilder;
|
|
|
|
// Gather together all of the params we will need to encode:
|
|
fn new<Client: OfflineClientT<T>>(
|
|
_nonce: u64,
|
|
client: Client,
|
|
other_params: Self::OtherParams,
|
|
) -> Result<Self, ExtrinsicParamsError> {
|
|
Ok(Self {
|
|
genesis_hash: client.genesis_hash(),
|
|
tip: other_params.tip,
|
|
foo: other_params.foo,
|
|
})
|
|
}
|
|
}
|
|
|
|
// Encode the relevant params when asked:
|
|
impl<T: Config> ExtrinsicParamsEncoder for CustomExtrinsicParams<T> {
|
|
fn encode_extra_to(&self, v: &mut Vec<u8>) {
|
|
(self.tip, self.foo).encode_to(v);
|
|
}
|
|
fn encode_additional_to(&self, v: &mut Vec<u8>) {
|
|
self.genesis_hash.encode_to(v)
|
|
}
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
// With the config defined, it can be handed to Subxt as follows:
|
|
let client = subxt::OnlineClient::<CustomConfig>::new().await.unwrap();
|
|
|
|
let tx_payload = runtime::tx().system().remark(b"Hello".to_vec());
|
|
|
|
// Build your custom "OtherParams":
|
|
let tx_config = CustomExtrinsicParamsBuilder::new().tip(1234).enable_foo();
|
|
|
|
// And provide them when submitting a transaction:
|
|
let _ = client
|
|
.tx()
|
|
.sign_and_submit_then_watch(&tx_payload, &dev::alice(), tx_config)
|
|
.await;
|
|
}
|