mirror of
https://github.com/pezkuwichain/pezkuwi-subxt.git
synced 2026-06-13 03:31:10 +00:00
b316301d61
* begin porting over traits; remove Config use of Hash * port over the Header bits that we need * sp_core_hashing where possible, move Verify to PairSigner, remove unused errors * tidy up Config things and move related bits into one place * fix codegen * copy Era over * move AccountId, Address, Signer to Signer trait and a pass over fixing examples * impl MultiAddress, MultiSignature, AccountId32 and add back to Config (for decoding later) * Copy over StorageKey, StorageData, StorageChangeSet * subxt core compiling with no sp_core or sp_runtime * Get examples compiling * pass over fixing tests * cargo fmt * clippy tweaks and update polkadot.rs * fix codegen docs * port over special DigestItem encoding/decoding * clippy and doc fixes * cargo fmt and example fix * more cargo fmt-ing... * substrate-extra to substrate-compat * cargo.toml comments * simplify PairSigner trait bounds * move RPC types to a separate file * fix docs * Add some tests for things and other PR feedback * bump to latest sp deps * avoid needing substrate-compat feature in a test
67 lines
2.4 KiB
Rust
67 lines
2.4 KiB
Rust
// Copyright 2019-2022 Parity Technologies (UK) Ltd.
|
|
// This file is dual-licensed as Apache-2.0 or GPL-3.0.
|
|
// see LICENSE for license details.
|
|
|
|
//! The "default" Substrate/Polkadot Address type. This is used in codegen, as well as signing related bits.
|
|
//! This doesn't contain much functionality itself, but is easy to convert to/from an `sp_runtime::MultiAddress`
|
|
//! for instance, to gain functionality without forcing a dependency on Substrate crates here.
|
|
|
|
use codec::{
|
|
Decode,
|
|
Encode,
|
|
};
|
|
|
|
/// A multi-format address wrapper for on-chain accounts. This is a simplified version of Substrate's
|
|
/// `sp_runtime::MultiAddress`. To obtain more functionality, convert this into that type (this conversion
|
|
/// functionality is provided via `From` impls if the `substrate-compat` feature is enabled).
|
|
#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Encode, Decode, Debug)]
|
|
pub enum MultiAddress<AccountId, AccountIndex> {
|
|
/// It's an account ID (pubkey).
|
|
Id(AccountId),
|
|
/// It's an account index.
|
|
Index(#[codec(compact)] AccountIndex),
|
|
/// It's some arbitrary raw bytes.
|
|
Raw(Vec<u8>),
|
|
/// It's a 32 byte representation.
|
|
Address32([u8; 32]),
|
|
/// Its a 20 byte representation.
|
|
Address20([u8; 20]),
|
|
}
|
|
|
|
impl<AccountId, AccountIndex> From<AccountId> for MultiAddress<AccountId, AccountIndex> {
|
|
fn from(a: AccountId) -> Self {
|
|
Self::Id(a)
|
|
}
|
|
}
|
|
|
|
// Improve compat with the substrate version if we're using those crates:
|
|
#[cfg(feature = "substrate-compat")]
|
|
mod substrate_impls {
|
|
use super::{
|
|
super::AccountId32,
|
|
*,
|
|
};
|
|
|
|
impl<N> From<sp_runtime::AccountId32> for MultiAddress<AccountId32, N> {
|
|
fn from(value: sp_runtime::AccountId32) -> Self {
|
|
let val: AccountId32 = value.into();
|
|
val.into()
|
|
}
|
|
}
|
|
|
|
impl<Id, N> From<sp_runtime::MultiAddress<Id, N>> for MultiAddress<AccountId32, N>
|
|
where
|
|
Id: Into<AccountId32>,
|
|
{
|
|
fn from(value: sp_runtime::MultiAddress<Id, N>) -> Self {
|
|
match value {
|
|
sp_runtime::MultiAddress::Id(v) => Self::Id(v.into()),
|
|
sp_runtime::MultiAddress::Index(v) => Self::Index(v),
|
|
sp_runtime::MultiAddress::Raw(v) => Self::Raw(v),
|
|
sp_runtime::MultiAddress::Address32(v) => Self::Address32(v),
|
|
sp_runtime::MultiAddress::Address20(v) => Self::Address20(v),
|
|
}
|
|
}
|
|
}
|
|
}
|