智能合约模块
原文: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