Add subxt_signer crate for native & WASM compatible signing (#1016)

* Add and use subxt-signer crate for WASM compatible signing

* cargo fmt

* dev keypairs already references

* WIP fix various breakages

* re-jig features to be simpler and various test fixes etc

* doc and web fix

* fix various bits and pieces

* fix a test I broke

* dev-deps can't be linked to in docs, hrmph

* cargo fmt

* another doc link

* document the subxt_signer crate more thoroughly

* move feature flag for consistency

* more docs, no default subxt feature flag on signer, update release instrs

* Add missing license header

* unwrap_inner => into_inner

* extend a test a little to better check derive junctions

* note more clearly that the crypto bits come from sp_core::crypto
This commit is contained in:
James Wilson
2023-06-20 11:32:12 +01:00
committed by GitHub
parent d091c091ae
commit b4eb406ee5
52 changed files with 1388 additions and 302 deletions
+4 -10
View File
@@ -4,14 +4,12 @@
pub(crate) use crate::{node_runtime, TestNodeProcess};
use sp_core::sr25519::Pair;
use sp_keyring::AccountKeyring;
use subxt::{tx::PairSigner, SubstrateConfig};
use subxt::SubstrateConfig;
/// substrate node should be installed on the $PATH
const SUBSTRATE_NODE_PATH: &str = "substrate";
pub async fn test_context_with(key: AccountKeyring) -> TestContext {
pub async fn test_context_with(authority: String) -> TestContext {
let path = std::env::var("SUBSTRATE_NODE_PATH").unwrap_or_else(|_| {
if which::which(SUBSTRATE_NODE_PATH).is_err() {
panic!(
@@ -23,16 +21,12 @@ pub async fn test_context_with(key: AccountKeyring) -> TestContext {
});
let mut proc = TestContext::build(path.as_str());
proc.with_authority(key);
proc.with_authority(authority);
proc.spawn::<SubstrateConfig>().await.unwrap()
}
pub type TestContext = TestNodeProcess<SubstrateConfig>;
pub async fn test_context() -> TestContext {
test_context_with(AccountKeyring::Alice).await
}
pub fn pair_signer(pair: Pair) -> PairSigner<SubstrateConfig, Pair> {
PairSigner::new(pair)
test_context_with("alice".to_string()).await
}
@@ -2,7 +2,6 @@
// This file is dual-licensed as Apache-2.0 or GPL-3.0.
// see LICENSE for license details.
use sp_keyring::AccountKeyring;
use std::ffi::{OsStr, OsString};
use substrate_runner::SubstrateNode;
use subxt::{Config, OnlineClient};
@@ -35,7 +34,7 @@ where
/// Construct a test node process.
pub struct TestNodeProcessBuilder {
node_path: OsString,
authority: Option<AccountKeyring>,
authority: Option<String>,
}
impl TestNodeProcessBuilder {
@@ -50,7 +49,7 @@ impl TestNodeProcessBuilder {
}
/// Set the authority dev account for a node in validator mode e.g. --alice.
pub fn with_authority(&mut self, account: AccountKeyring) -> &mut Self {
pub fn with_authority(&mut self, account: String) -> &mut Self {
self.authority = Some(account);
self
}
@@ -64,9 +63,8 @@ impl TestNodeProcessBuilder {
node_builder.binary_path(self.node_path);
if let Some(authority) = self.authority {
let authority = format!("{authority:?}");
node_builder.arg(authority.as_str().to_lowercase());
if let Some(authority) = &self.authority {
node_builder.arg(authority.to_lowercase());
}
// Spawn the node and retrieve a URL to it: