跳转至

智能合约模块

原文:https://docs.elrond.com/developers/developer-reference/elrond-wasm-modules

智能合约模块是一种将合约划分为更小组件的便捷方式。模块还减少了代码重复,因为它们可以跨多个合约重用。

申报

模块既可以在与主合约相同的机箱中定义,也可以在它们自己独立的机箱中定义。当您希望在多个合约中使用同一个模块时,可以使用后者。

模块是用#[elrond_wasm::module]宏声明的 trait。在 trait 内部,您可以编写通常在智能合约中编写的任何代码,甚至是端点、事件、存储映射器等。

例如,假设您希望将存储映射器放在一个单独的模块中。实现如下所示:

#[elrond_wasm::module]
pub trait StorageModule {
    #[view(getQuorum)]
    #[storage_mapper("firstStorage")]
    fn first_storage(&self) -> SingleValueMapper<usize>;

    #[view]
    #[storage_mapper("secondStorage")]
    fn second_storage(&self) -> SingleValueMapper<u64>;
} 

然后,在你的主文件(通常命名为lib.rs)中,你要定义模块。如果上面模块的文件被命名为storage.rs,那么在主文件中你应该这样声明它:

pub mod storage; 

导入模块

模块可以由其他模块和合约导入:

pub trait SetupModule:
    crate::storage::StorageModule
    + crate::util::UtilModule {

} 
#[elrond_wasm::contract]
pub trait MainContract: 
    setup::SetupModule
    + storage::StorageModule
    + util::UtilModule {

} 

请记住,您的主合约必须实现任何子模块可能使用的所有模块。在这个例子中,即使MainContract没有使用来自UtilModule的任何东西,如果它想使用SetupModule,它仍然必须实现它。

结论

我们希望这个模块系统将使编写可维护的智能合约代码,甚至是可重用的模块变得更加容易。

如果你想看更多的例子,或者仅仅是你可以使用的模块,看看这里:https://github . com/elrond network/elrond-wasm-RS/tree/master/elrond-wasm-modules



回到顶部