Skip to content

Access control

This content is not available in your language yet.

This page lists common examples of working with privileges, ownership and access control.

How to check sender privileges using Ownable trait

// Ownable has to be imported from stdlib, as well as Deployable, for convenience:
import "@stdlib/ownable";
import "@stdlib/deploy";
message FooBarMsg {
newVal: Int as uint32;
}
// Ownable trait can limit certain actions to the owner only
contract SenderChecker with Deployable, Ownable {
// Persistent state variables
owner: Address; // Ownable trait requires you to add this exact state variable
val: Int as uint32; // some value
init() {
// we can initialize owner to any value we want, the deployer in this case:
self.owner = sender();
self.val = 0;
}
receive("inc") {
self.requireOwner(); // throws exit code 132 if the sender isn't an owner
self.val += 1;
}
receive(msg: FooBarMsg) {
self.requireOwner(); // throws exit code 132 if the sender isn't an owner
self.val = msg.newVal;
}
}