Get 方法
介绍
Get方法是智能合约中用于查询特定数据的特殊函数。它们的执行不需要任何费用,并且在区块链之外进行。
这些函数对于大多数智能合约来说都非常常见。例如,默认的钱包合约有几个get方法,如seqno()
、get_subwallet_id()
和get_public_key()
。它们被钱包、SDK和API用来获取有关钱包的数据。
Get 方法的设计模式
基本 get 方法设计模式
-
单一数据点检索:一种基本设计模式是创建返回合约状态中单个数据点的方法。这些方法没有参数,并返回单个值。
示例:
int get_balance() method_id {
return get_data().begin_parse().preload_uint(64);
} -
聚合数据检索:另一种常见的模式是创建一次返回合约状态中多个数据点的方法。这通常在某些数据点一起使用时采用。这些在Jetton和NFT合约中非常常见。
示例:
(int, slice, slice, cell) get_wallet_data() method_id {
return load_data();
}
高级 get 方法设计模式
-
计算数据检索:在某些情况下,需要检索的数据并不直接存储在合约的状态中,而是根据状态和输入参数计算得出的。
示例:
slice get_wallet_address(slice owner_address) method_id {
(int total_supply, slice admin_address, cell content, cell jetton_wallet_code) = load_data();
return calculate_user_jetton_wallet_address(owner_address, my_address(), jetton_wallet_code);
} -
条件数据检索