1

正如标题所示,我正在尝试使用非常简单的字符串返回函数在已部署的合约上调用一个函数。

部署的contract1函数:

#[ink(message)]
#[ink(selector = 0xDEADBEEF)]
pub fn test(&self) -> String {
            return "TEST".to_string()
}

以下代码片段是 contract2 函数,用于从 contract1 返回值:

        #[ink(message)]
        pub fn test1(&self,token_contract: AccountId) -> String {
            
            let my_return_value: String =  ink_env::call::build_call::<ink_env::DefaultEnvironment>()
            .callee(token_contract)
            .gas_limit(50000)
            .transferred_value(0)
            .exec_input(
                ink_env::call::ExecutionInput::new(ink_env::call::Selector::new([0xDE, 0xAD, 0xBE, 0xEF]))
                

            )
            .returns::<ink_env::call::utils::ReturnType<String>>()
            .fire()
            .unwrap();
            my_return_value
        }
4

1 回答 1

2

这意味着您的子合约,即持有“pub fn test”的合约已经惊慌失措。

调试它的方法是使用以下命令启动您的基板节点:

RUST_LOG=runtime=debug

这样,您将在基板日志中获得确切的恐慌错误。

如果您希望处理调用者合约中的错误, build_call 具有map_err功能。您可以查看他们的 multisig 示例以获取代码参考: https ://github.com/paritytech/ink/blob/master/examples/multisig/lib.rs

于 2022-02-21T19:05:18.823 回答