Move的代码是以模块组成的。每个模块大致对应于其他区块链上的单个智能合约。然而,Move提供了更多功能,促使代码能更容易的组织成更小、更模块化的部分。每个模块通过其入口和公共函数提供一个API。用户可以通过交易或其他Move代码的方式调用这些模块的函数以便与模块交互。交易被发送到并由Sui区块链处理,一旦执行,结果将被保存。这种技术堆栈类似于Web2堆栈,其中Move模块充当具有不同路由/ API的服务器,Sui区块链充当运行服务器的框架并提供用于存储数据的数据库。开发者可以构建连接到此服务器和数据库的UI,为其用户提供丰富的功能类型。
module 0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3::pool_script {
}
开发者通常将模块一起部署为单个包,该包将被分配给一个对象(object),并具有自己的地址,例如 0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3
。
这造使该模块可以以其对象地址及名称来引用:例如 0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3::pool_script
。
在这举例中,模块的名称是 pool_script
。Move还允许为地址定义别名,只需通过在Move.toml中定义(例如 cetus=0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3
),然后将模块定义为cetus::pool_script
。当调用此模块上的函数时,用户可以发送一个交易内容来调用 0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3::pool_script::open_position
,其中open_position
是函数的名称。
这种模块和函数标识方式的标准格式使得应用程序能够轻松部署、管理和与Move模块结合。模块化设计在Sui上被强烈鼓励 ,开发者应尽量保持每个模块尽可能小并放在单独的文件中。这样做可以保持数据结构和代码的整洁性, 同时使得应用程序更容易和这些模块结合,用户也能更容易理解他们发送的每笔交易。这与Web2开发中的单一责任原则(SRP)类似。