Appearance
@stdlib/ownable
提供可拥有合约的 traits。这是大多数其他 traits 所需的最常用的 trait。
要使用此库,请导入 @stdlib/ownable
:
solidity
import "@stdlib/ownable";
消息
ChangeOwner
ts
message ChangeOwner {
queryId: Int as uint64;
newOwner: Address;
}
ChangeOwnerOk
ts
message ChangeOwnerOk {
queryId: Int as uint64;
newOwner: Address;
}
特性
Ownable
Trait Ownable
声明一个合约的所有者(不可编辑),并提供一个辅助函数 requireOwner()
,用于检查消息是否由所有者发送。
此 trait 需要声明一个字段 owner: Address
,并暴露一个 getter 函数 owner()
,从合约中读取它。
源代码:
solidity
@interface("org.ton.ownable")
trait Ownable {
owner: Address;
fun requireOwner() {
nativeThrowUnless(132, sender() == self.owner);
}
get fun owner(): Address {
return self.owner;
}
}
使用示例:
solidity
import "@stdlib/ownable";
contract ExampleContract with Ownable {
owner: Address;
init(owner: Address) {
self.owner = owner;
}
}
OwnableTransferable
OwnableTransferable
是 Ownable
的扩展,允许将合约的所有权转移到另一个地址。它提供了一个安全处理 消息 ChangeOwner
,所有者可以调用该消息以转移所有权。
如果所有权转移请求成功,合约将回复一个 ChangeOwnerOk
消息。
源代码:
solidity
@interface("org.ton.ownable.transferable.v2")
trait OwnableTransferable with Ownable {
owner: Address;
receive(msg: ChangeOwner) {
// 检查发送者是否为所有者
self.requireOwner();
// 更新所有者
self.owner = msg.newOwner;
// 回复结果
self.reply(ChangeOwnerOk{ queryId: msg.queryId, newOwner: msg.newOwner }.toCell());
}
}
使用示例:
solidity
import "@stdlib/ownable";
contract ExampleContract with OwnableTransferable {
owner: Address;
init(owner: Address) {
self.owner = owner;
}
}