# Concepts
# Capabilities
Capabilities are multi-owner. A scoped keeper can create a capability via NewCapability
which creates a new unique, unforgeable object-capability reference. The newly
created capability is automatically persisted; the calling module need not call
ClaimCapability
. Calling NewCapability
will create the capability with the
calling module and name as a tuple to be treated the capabilities first owner.
Capabilities can be claimed by other modules which add them as owners. ClaimCapability
allows a module to claim a capability key which it has received from another
module so that future GetCapability
calls will succeed. ClaimCapability
MUST
be called if a module which receives a capability wishes to access it by name in
the future. Again, capabilities are multi-owner, so if multiple modules have a
single Capability reference, they will all own it. If a module receives a capability
from another module but does not call ClaimCapability
, it may use it in the executing
transaction but will not be able to access it afterwards.
AuthenticateCapability
can be called by any module to check that a capability
does in fact correspond to a particular name (the name can be un-trusted user input)
with which the calling module previously associated it.
GetCapability
allows a module to fetch a capability which it has previously
claimed by name. The module is not allowed to retrieve capabilities which it does
not own.
# Stores
- MemStore
- KeyStore