substrate - Substrate 链下签名交易问题
问题描述
我按照substrate offchain recipe 实现了一个需要进行签名交易的offchain worker。由于它不起作用,我添加了一些调试语句,它似乎正在检测 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, 0, 123, 0, 0, 0, 0, 0, 0, 0, 171, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 176, 170, 14, 20, 103, 190, 47, 243, 111, 165, 88, 217, 111, 60, 15, 40, 2, 215, 117, 222, 88, 154, 130, 62, 96, 141, 156, 91, 189, 180, 19, 0, 251, 232, 81, 216, 61, 240, 146, 99, 239, 45, 37, 48, 219, 73, 81, 38, 150, 3, 177, 214, 165, 143, 217, 107, 205, 218, 200, 232, 16, 55, 71, 176]
2021-06-14 08:53:54.238 DEBUG ThreadId(34) OWNERS: create_transaction signature: None
我正在使用基于基板标签 v3.0.0 的简单模板节点和托盘。