@@ -57,14 +57,14 @@ impl<T: Config, C: OfflineClientT<T>> TxClient<T, C> {
5757 where
5858 Call : TxPayload ,
5959 {
60- if let Some ( actual_hash ) = call. validation_hash ( ) {
60+ if let Some ( details ) = call. validation_details ( ) {
6161 let metadata = self . client . metadata ( ) ;
6262 let expected_hash =
63- metadata. call_hash ( call . pallet_name ( ) , call . call_name ( ) ) ?;
64- if actual_hash != expected_hash {
63+ metadata. call_hash ( details . pallet_name , details . call_name ) ?;
64+ if details . hash != expected_hash {
6565 return Err ( crate :: metadata:: MetadataError :: IncompatibleCallMetadata (
66- call . pallet_name ( ) . into ( ) ,
67- call . call_name ( ) . into ( ) ,
66+ details . pallet_name . into ( ) ,
67+ details . call_name . into ( ) ,
6868 )
6969 . into ( ) )
7070 }
@@ -114,11 +114,10 @@ impl<T: Config, C: OfflineClientT<T>> TxClient<T, C> {
114114 } ;
115115
116116 // Wrap in Encoded to ensure that any more "encode" calls leave it in the right state.
117- Ok ( SubmittableExtrinsic {
118- client : self . client . clone ( ) ,
119- encoded : Encoded ( extrinsic) ,
120- marker : std:: marker:: PhantomData ,
121- } )
117+ Ok ( SubmittableExtrinsic :: from_bytes (
118+ self . client . clone ( ) ,
119+ extrinsic,
120+ ) )
122121 }
123122
124123 /// Creates a raw signed extrinsic without submitting it.
@@ -202,11 +201,10 @@ impl<T: Config, C: OfflineClientT<T>> TxClient<T, C> {
202201
203202 // Wrap in Encoded to ensure that any more "encode" calls leave it in the right state.
204203 // maybe we can just return the raw bytes..
205- Ok ( SubmittableExtrinsic {
206- client : self . client . clone ( ) ,
207- encoded : Encoded ( extrinsic) ,
208- marker : std:: marker:: PhantomData ,
209- } )
204+ Ok ( SubmittableExtrinsic :: from_bytes (
205+ self . client . clone ( ) ,
206+ extrinsic,
207+ ) )
210208 }
211209}
212210
@@ -330,6 +328,21 @@ where
330328 T : Config ,
331329 C : OfflineClientT < T > ,
332330{
331+ /// Create a [`SubmittableExtrinsic`] from some already-signed and prepared
332+ /// extrinsic bytes, and some client (anything implementing [`OfflineClientT`]
333+ /// or [`OnlineClientT`]).
334+ ///
335+ /// Prefer to use [`TxClient`] to create and sign extrinsics. This is simply
336+ /// exposed in case you want to skip this process and submit something you've
337+ /// already created.
338+ pub fn from_bytes ( client : C , tx_bytes : Vec < u8 > ) -> Self {
339+ Self {
340+ client,
341+ encoded : Encoded ( tx_bytes) ,
342+ marker : std:: marker:: PhantomData ,
343+ }
344+ }
345+
333346 /// Returns the SCALE encoded extrinsic bytes.
334347 pub fn encoded ( & self ) -> & [ u8 ] {
335348 & self . encoded . 0
0 commit comments