@stdlib/ownable
Provides traits for ownable contracts. These traits are commonly required by other traits.
To use this library, import @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
declares an owner (non-editable) of a contract and provides a helper function requireOwner()
that checks that a message was sent by an owner.
This trait requires a field owner: Address
to be declared and exposes a getter function owner()
, which reads it from the contract.
Source code:
@interface("org.ton.ownable")trait Ownable { owner: Address;
fun requireOwner() { nativeThrowUnless(132, sender() == self.owner); }
get fun owner(): Address { return self.owner; }}
Usage example:
import "@stdlib/ownable";
contract ExampleContract with Ownable { owner: Address;
init(owner: Address) { self.owner = owner; }}
OwnableTransferable
OwnableTransferable
is an extension of an Ownable
that allows to transfer ownership of a contract to another address. It provides a secure handle Message ChangeOwner
that could be called by an owner to transfer ownership.
If the owner transfer request succeeds, the contract will reply with a ChangeOwnerOk
Message.
Source code:
@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()); }}
Usage example:
import "@stdlib/ownable";
contract ExampleContract with OwnableTransferable { owner: Address;
init(owner: Address) { self.owner = owner; }}