@stdlib/ownable
为可拥有的合约提供 traits。 这些 traits 通常是其他 traits 所需要的。
要使用该库,请导入 @stdlib/ownable
:
import "@stdlib/ownable";
Messages
ChangeOwner
message ChangeOwner { queryId: Int as uint64; newOwner: Address;}
ChangeOwnerOk
message ChangeOwnerOk { queryId: Int as uint64; newOwner: Address;}
Traits
Ownable
Trait Ownable
声明了 contract 的所有者(不可编辑),并提供了一个辅助函数 requireOwner()
来检查消息是否由所有者发送。
此 trait 要求声明一个字段 owner: Address
,并公开一个 getter 函数 owner()
,该函数从 合约 中读取。
源码:
@interface("org.ton.ownable")trait Ownable { owner: Address;
fun requireOwner() { nativeThrowUnless(132, sender() == self.owner); }
get fun owner(): Address { return self.owner; }}
示例用法:
import "@stdlib/ownable";
contract ExampleContract with Ownable { owner: Address;
init(owner: Address) { self.owner = owner; }}
OwnableTransferable
OwnableTransferable
是 Ownable
的扩展,允许将合约的所有权转移到另一个地址。 它提供了一个安全的句柄 Message ChangeOwner
,可供所有者调用以转移所有权。
如果所有者转移请求成功,合约将回复一条 ChangeOwnerOk
消息。
源码:
@interface("org.ton.ownable.transferable.v2")trait OwnableTransferable with Ownable { owner: Address;
receive(msg: ChangeOwner) { // Check if the sender is the owner self.requireOwner();
// Update owner self.owner = msg.newOwner;
// Reply result self.reply(ChangeOwnerOk{ queryId: msg.queryId, newOwner: msg.newOwner }.toCell()); }}
示例用法:
import "@stdlib/ownable";
contract ExampleContract with OwnableTransferable { owner: Address;
init(owner: Address) { self.owner = owner; }}