跳转到内容

@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

OwnableTransferableOwnable 的扩展,允许将合约的所有权转移到另一个地址。 它提供了一个安全的句柄 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;
}
}

资料来源