如何解决托盘中的类型不匹配
https://substrate.dev/docs/en/tutorials/add-a-pallet-to-your-runtime/#install-the-node-template
我一直按照步骤进行操作,并修复了另一个与ContractExecResult :: Success相关的错误。现在我遇到了这两个错误。
我认为它与语法或本教程尚未更新的更新的库api有关。
$ cargo check -p node-template-runtime
Compiling node-template-runtime v2.0.0-rc5 (C:\substrate-node-template2\runtime)
error: Failed to run custom build command for `node-template-runtime v2.0.0-rc5 (C:\substrate-node-template2\runtime)`
Caused by:
process didn't exit successfully: `C:\substrate-node-template2\target\debug\build\node-template-runtime-8af1699a702fd7e8\build-script-build` (exit code: 1)
--- stdout
Executing build command: "rustup" "run" "nightly" "cargo" "rustc" "--target=wasm32-unkNown-unkNown" "--manifest-path=C:\\substrate-node-template2\\target\\debug\\wbuild\\node-template-runtime\\Cargo.toml" "--color=always" "--release"
--- stderr
Compiling wasm-build-runner-impl v1.0.0 (C:\substrate-node-template2\target\debug\wbuild-runner\node-template-runtime6610820868370414452)
Finished dev [unoptimized + debuginfo] target(s) in 0.75s
Running `C:\substrate-node-template2\target\debug\wbuild-runner\node-template-runtime6610820868370414452\target\x86_64-pc-windows-msvc\debug\wasm-build-runner-impl.exe`
Compiling node-template-runtime v2.0.0-rc5 (C:\substrate-node-template2\runtime)
error[E0308]: mismatched types
--> C:\substrate-node-template2\runtime\src\lib.rs:477:17
|
476 | match exec_result {
| ----------- this expression has type `(core::result::Result<pallet_contracts::ExecReturnValue,sp_runtime::dispatchError>,u64)`
477 | Ok(v) => ContractExecResult::Success{
| ^^^^^ expected tuple,found enum `core::result::Result`
|
= note: expected tuple `(core::result::Result<pallet_contracts::ExecReturnValue,u64)`
found enum `core::result::Result<_,_>`
error[E0308]: mismatched types
--> C:\substrate-node-template2\runtime\src\lib.rs:482:17
|
476 | match exec_result {
| ----------- this expression has type `(core::result::Result<pallet_contracts::ExecReturnValue,u64)`
...
482 | Err(_) => ContractExecResult::Error,| ^^^^^^ expected tuple,_>`
error: aborting due to 2 prevIoUs errors
For more information about this error,try `rustc --explain E0308`.
error: Could not compile `node-template-runtime`.
To learn more,run the command again with --verbose.
error: process didn't exit successfully: `C:\substrate-node-template2\target\debug\wbuild-runner\node-template-runtime6610820868370414452\target\x86_64-pc-windows-msvc\debug\wasm-build-runner-impl.exe` (exit code: 1)
这是本教程向我添加的runtime \ src \ lib.rs中的代码,这导致了此问题,而我的修改后的代码中添加了“标志”和“ gas_consumed”,并删除了“状态”。
/*** Add This Block ***/
impl contracts_rpc_runtime_api::ContractsApi<Block,AccountId,Balance,BlockNumber>
for Runtime
{
fn call(
origin: AccountId,dest: AccountId,value: Balance,gas_limit: u64,input_data: Vec<u8>,) -> ContractExecResult {
let exec_result =
Contracts::bare_call(origin,dest.into(),value,gas_limit,input_data);
match exec_result {
Ok(v) => ContractExecResult::Success{
flags: v.status,data: v.data,gas_consumed: v.gas_consumed,},Err(_) => ContractExecResult::Error,}
}
fn get_storage(
address: AccountId,key: [u8; 32],) -> contracts_primitives::GetStorageResult {
Contracts::get_storage(address,key)
}
fn rent_projection(
address: AccountId,) -> contracts_primitives::RentProjectionResult<BlockNumber> {
Contracts::rent_projection(address)
}
}
/*** End Added Block ***/
解决方法
基于输出,看起来您正在使用节点模板的2.0.0-rc5版本。目前,Contracts托盘教程是v2.0.0-rc4的最新版本。您可以从该分支克隆节点模板并将其用作起点吗? git clone -b v2.0.0-rc4 --depth 1 https://github.com/substrate-developer-hub/substrate-node-template
从v2.0.0-rc5开始,Contracts托盘中的nude_call函数返回ExecResult和Gas,可以在line 633上看到,而在上一版本的Contracts托盘中仅返回ExecResult。
为了继续学习本教程,我对本教程中提供的代码段进行了一些调整。这是我的代码的版本。
fn call(
origin: AccountId,dest: AccountId,value: Balance,gas_limit: u64,input_data: Vec<u8>,) -> ContractExecResult {
let exec_result =
Contracts::bare_call(origin,dest.into(),value,gas_limit,input_data);
match exec_result {
(Ok(v),gas) => ContractExecResult::Success {
flags: v.flags.bits(),data: v.data,gas_consumed: gas,},(Err(_),_) => ContractExecResult::Error,}
}
注意:Rust刚起步,所以我的代码可能不是最佳解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。