Icon Link定义 ABI

接下来,我们将定义我们的 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;
}

不必担心此刻理解每个函数的具体细节。我们将在“函数”部分详细解释。

Icon Link函数结构

使用 fn 关键字定义函数。在 Sway 中,蛇形命名法是约定俗成的,因此不要将函数命名为 myFunction,而应将其命名为 my_function

如果函数返回一个值,其返回类型必须使用一个细箭头进行定义。此外,如果函数有参数,它们的类型也必须指定。在每个语句的末尾 必须 使用分号。

如果一个函数从存储器中读取或写入数据,你需要在函数上方使用注解指定访问级别,比如 #[storage(read)]#[storage(read, write)]

对于在调用时预期接收资金的函数,比如 buy_item 函数,需要使用 #[payable] 注解。