mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-12 13:31:10 +00:00
Support constructing and submitting V5 transactions (#1931)
* 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
This commit is contained in:
@@ -95,7 +95,7 @@ impl TypeSet {
|
||||
self.insert(ty);
|
||||
}
|
||||
|
||||
for signed in &extrinsic.signed_extensions {
|
||||
for signed in &extrinsic.transaction_extensions {
|
||||
self.insert(signed.extra_ty);
|
||||
self.insert(signed.additional_ty);
|
||||
}
|
||||
@@ -294,7 +294,7 @@ fn iterate_metadata_types(metadata: &mut Metadata) -> impl Iterator<Item = &mut
|
||||
types.push(ty);
|
||||
}
|
||||
|
||||
for signed in &mut metadata.extrinsic.signed_extensions {
|
||||
for signed in &mut metadata.extrinsic.transaction_extensions {
|
||||
types.push(&mut signed.extra_ty);
|
||||
types.push(&mut signed.additional_ty);
|
||||
}
|
||||
|
||||
@@ -292,14 +292,25 @@ fn get_extrinsic_hash(
|
||||
let signature_hash = get_type_hash(registry, extrinsic.signature_ty, outer_enum_hashes);
|
||||
let extra_hash = get_type_hash(registry, extrinsic.extra_ty, outer_enum_hashes);
|
||||
|
||||
// Supported versions are just u8s and we will likely never have more than 32 of these, so put them into
|
||||
// an array of u8s and panic if more than 32.
|
||||
if extrinsic.supported_versions.len() > 32 {
|
||||
panic!("The metadata validation logic does not support more than 32 extrinsic versions.");
|
||||
}
|
||||
let supported_extrinsic_versions = {
|
||||
let mut a = [0u8; 32];
|
||||
a[0..extrinsic.supported_versions.len()].copy_from_slice(&extrinsic.supported_versions);
|
||||
a
|
||||
};
|
||||
|
||||
let mut bytes = concat_and_hash4(
|
||||
&address_hash,
|
||||
&signature_hash,
|
||||
&extra_hash,
|
||||
&[extrinsic.version; 32],
|
||||
&supported_extrinsic_versions,
|
||||
);
|
||||
|
||||
for signed_extension in extrinsic.signed_extensions.iter() {
|
||||
for signed_extension in extrinsic.transaction_extensions.iter() {
|
||||
bytes = concat_and_hash4(
|
||||
&bytes,
|
||||
&hash(signed_extension.identifier.as_bytes()),
|
||||
|
||||
Reference in New Issue
Block a user