基板链下签名交易问题

问题描述

我按照基板链下配方来实现一个需要进行签名交易的链下工作器。 由于它不起作用,我添加了一些调试语句,它似乎正在检测 AppCrypto 中的帐户,创建有效负载,但未能生成签名。

pub type SignedPayload = generic::SignedPayload<Call,SignedExtra>;

impl<LocalCall> frame_system::offchain::CreateSignedTransaction<LocalCall> for Runtime
where
    Call: From<LocalCall>,{
    fn create_transaction<C: frame_system::offchain::AppCrypto<Self::Public,Self::Signature>>(
        call: Call,public: <Signature as sp_runtime::traits::Verify>::Signer,account: AccountId,index: Index,) -> Option<(
        Call,<UncheckedExtrinsic as sp_runtime::traits::Extrinsic>::SignaturePayload,)> {
        debug::debug!(target: "OWNERS","create_transaction");
        debug::debug!(target: "OWNERS","create_transaction account: {:?}",&account);

        let period = BlockHashCount::get() as u64;
        let current_block = System::block_number()
            .saturated_into::<u64>()
            .saturating_sub(1);
        let tip = 0;
        let extra: SignedExtra = (
            frame_system::CheckSpecVersion::<Runtime>::new(),frame_system::CheckTxVersion::<Runtime>::new(),frame_system::CheckGenesis::<Runtime>::new(),frame_system::CheckEra::<Runtime>::from(generic::Era::mortal(period,current_block)),frame_system::CheckNonce::<Runtime>::from(index),frame_system::CheckWeight::<Runtime>::new(),pallet_transaction_payment::ChargeTransactionPayment::<Runtime>::from(tip),);

        let raw_payload = SignedPayload::new(call,extra)
            .map_err(|e| {
                debug::native::warn!("SignedPayload error: {:?}",e);
            })
            .ok()?;
        debug::debug!(target: "OWNERS","create_transaction raw payload ok");

        raw_payload.using_encoded(|payload| {
            debug::debug!(target: "OWNERS","create_transaction payload: {:?}",&payload);
        });

        let signature = raw_payload.using_encoded(|payload| C::sign(payload,public));
        debug::debug!(target: "OWNERS","create_transaction signature: {:?}",&signature);


        //let address = account;
        //let (call,extra,_) = raw_payload.deconstruct();
        //Some((call,(address.into(),signature,extra)))
        None
    }
}

以上代码在我的日志中打印的内容

2021-06-14 08:53:54.127 DEBUG ThreadId(34) OWNERS: create_transaction    
2021-06-14 08:53:54.127 DEBUG ThreadId(34) OWNERS: create_transaction account: 089e6f3129e3ab81bac78cef021d80debc3acb4c34152fa93b15b5174adfac69 (5CG1JeWG...)    
2021-06-14 08:53:54.128 DEBUG ThreadId(34) OWNERS: create_transaction raw payload ok    
2021-06-14 08:53:54.128 DEBUG ThreadId(34) OWNERS: create_transaction payload: [8,123,171,1,176,170,14,20,103,190,47,243,111,165,88,217,60,15,40,2,215,117,222,154,130,62,96,141,156,91,189,180,19,251,232,81,216,61,240,146,99,239,45,37,48,219,73,38,150,3,177,214,143,107,205,218,200,16,55,71,176]    
2021-06-14 08:53:54.238 DEBUG ThreadId(34) OWNERS: create_transaction signature: None 

我使用的是基于基板标签 v3.0.0 的简单模板节点和托盘。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)