Support unsigned extrinsics. (#130)

This commit is contained in:
David Craven
2020-06-26 08:38:37 +02:00
committed by GitHub
parent 5fd83f8bdb
commit 4ee7fb11ad
+22 -5
View File
@@ -308,10 +308,10 @@ impl<T: Runtime> Client<T> {
.and_then(|module| module.call(C::FUNCTION, call))?) .and_then(|module| module.call(C::FUNCTION, call))?)
} }
/// Creates an unsigned extrinsic. /// Creates an payload for an extrinsic.
/// ///
/// If `nonce` is `None` the nonce will be fetched from the chain. /// If `nonce` is `None` the nonce will be fetched from the chain.
pub async fn create_unsigned<C: Call<T>>( pub async fn create_payload<C: Call<T>>(
&self, &self,
call: C, call: C,
account_id: &<T as System>::AccountId, account_id: &<T as System>::AccountId,
@@ -336,6 +336,23 @@ impl<T: Runtime> Client<T> {
Ok(raw_payload) Ok(raw_payload)
} }
/// Creates an unsigned extrinsic.
pub async fn create_unsigned<C: Call<T> + Send + Sync>(
&self,
call: C,
account_id: &<T as System>::AccountId,
nonce: Option<T::Index>,
) -> Result<UncheckedExtrinsic<T>, Error>
where
<<T::Extra as SignedExtra<T>>::Extra as SignedExtension>::AdditionalSigned:
Send + Sync,
{
let payload = self.create_payload(call, account_id, nonce).await?;
let (call, _, _) = payload.deconstruct();
let unsigned = UncheckedExtrinsic::<T>::new_unsigned(call);
Ok(unsigned)
}
/// Creates a signed extrinsic. /// Creates a signed extrinsic.
pub async fn create_signed<C: Call<T> + Send + Sync>( pub async fn create_signed<C: Call<T> + Send + Sync>(
&self, &self,
@@ -346,10 +363,10 @@ impl<T: Runtime> Client<T> {
<<T::Extra as SignedExtra<T>>::Extra as SignedExtension>::AdditionalSigned: <<T::Extra as SignedExtra<T>>::Extra as SignedExtension>::AdditionalSigned:
Send + Sync, Send + Sync,
{ {
let unsigned = self let payload = self
.create_unsigned(call, signer.account_id(), signer.nonce()) .create_payload(call, signer.account_id(), signer.nonce())
.await?; .await?;
let signed = signer.sign(unsigned).await?; let signed = signer.sign(payload).await?;
Ok(signed) Ok(signed)
} }