接下来,我们将定义我们的 ABI。ABI 代表应用程序二进制接口。在 Sway 合约中,它作为合约中所有函数的概要。对于每个函数,你需要指定它的名称、输入类型、返回类型、存储访问级别以及是否可支付。
我们合约的 ABI 结构如下。将下面提供的 ABI 写入你的 main.sw
文件中:
abi SwayStore {
// a function to list an item for sale
// takes the price and metadata as args
#[storage(read, write)]
fn list_item(price: u64, metadata: str[20]);
// a function to buy an item
// takes the item id as the arg
#[storage(read, write), payable]
fn buy_item(item_id: u64);
// a function to get a certain item
#[storage(read)]
fn get_item(item_id: u64) -> Item;
// a function to set the contract owner
#[storage(read, write)]
fn initialize_owner() -> Identity;
// a function to withdraw contract funds
#[storage(read)]
fn withdraw_funds();
// return the number of items listed
#[storage(read)]
fn get_count() -> u64;
}
不必担心此刻理解每个函数的具体细节。我们将在“函数”部分详细解释。
使用 fn
关键字定义函数。在 Sway 中,蛇形命名法是约定俗成的,因此不要将函数命名为 myFunction
,而应将其命名为 my_function
。
如果函数返回一个值,其返回类型必须使用一个细箭头进行定义。此外,如果函数有参数,它们的类型也必须指定。在每个语句的末尾 必须 使用分号。
如果一个函数从存储器中读取或写入数据,你需要在函数上方使用注解指定访问级别,比如 #[storage(read)]
或 #[storage(read, write)]
。
对于在调用时预期接收资金的函数,比如 buy_item
函数,需要使用 #[payable]
注解。