Git Source
Methods
DEFAULT_ADMIN_ROLE
function DEFAULT_ADMIN_ROLE() external view returns (bytes32)
Returns
Name | Type | Description |
---|
| bytes32 | |
DELEGATOR_FACTORY
function DELEGATOR_FACTORY() external view returns (address)
Get the delegator factory’s address.
Returns
Name | Type | Description |
---|
| address | address of the delegator factory |
DEPOSITOR_WHITELIST_ROLE
function DEPOSITOR_WHITELIST_ROLE() external view returns (bytes32)
Get a depositor whitelist status setter’s role.
Returns
Name | Type | Description |
---|
| bytes32 | identifier of the depositor whitelist status setter role |
DEPOSIT_LIMIT_SET_ROLE
function DEPOSIT_LIMIT_SET_ROLE() external view returns (bytes32)
Get a deposit limit setter’s role.
Returns
Name | Type | Description |
---|
| bytes32 | identifier of the deposit limit enabler/disabler role |
DEPOSIT_WHITELIST_SET_ROLE
function DEPOSIT_WHITELIST_SET_ROLE() external view returns (bytes32)
Get a deposit whitelist enabler/disabler’s role.
Returns
Name | Type | Description |
---|
| bytes32 | identifier of the whitelist enabler/disabler role |
FACTORY
function FACTORY() external view returns (address)
Get the factory’s address.
Returns
Name | Type | Description |
---|
| address | address of the factory |
IS_DEPOSIT_LIMIT_SET_ROLE
function IS_DEPOSIT_LIMIT_SET_ROLE() external view returns (bytes32)
Get a deposit limit enabler/disabler’s role.
Returns
Name | Type | Description |
---|
| bytes32 | identifier of the deposit limit enabler/disabler role |
SLASHER_FACTORY
function SLASHER_FACTORY() external view returns (address)
Get the slasher factory’s address.
Returns
Name | Type | Description |
---|
| address | address of the slasher factory |
activeBalanceOf
function activeBalanceOf(address account) external view returns (uint256)
Get an active balance for a particular account.
Parameters
Name | Type | Description |
---|
account | address | account to get the active balance for |
Returns
Name | Type | Description |
---|
| uint256 | active balance for the account |
activeBalanceOfAt
function activeBalanceOfAt(address account, uint48 timestamp, bytes hints) external view returns (uint256)
Get an active balance for a particular account at a given timestamp using hints.
Parameters
Name | Type | Description |
---|
account | address | account to get the active balance for |
timestamp | uint48 | time point to get the active balance for the account at |
hints | bytes | hints for checkpoints’ indexes |
Returns
Name | Type | Description |
---|
| uint256 | active balance for the account at the timestamp |
activeShares
function activeShares() external view returns (uint256)
Get a total number of active shares in the vault.
Returns
Name | Type | Description |
---|
| uint256 | total number of active shares |
activeSharesAt
function activeSharesAt(uint48 timestamp, bytes hint) external view returns (uint256)
Get a total number of active shares in the vault at a given timestamp using a hint.
Parameters
Name | Type | Description |
---|
timestamp | uint48 | time point to get the total number of active shares at |
hint | bytes | hint for the checkpoint index |
Returns
Name | Type | Description |
---|
| uint256 | total number of active shares at the timestamp |
activeSharesOf
function activeSharesOf(address account) external view returns (uint256)
Get a number of active shares for a particular account.
Parameters
Name | Type | Description |
---|
account | address | account to get the number of active shares for |
Returns
Name | Type | Description |
---|
| uint256 | number of active shares for the account |
activeSharesOfAt
function activeSharesOfAt(address account, uint48 timestamp, bytes hint) external view returns (uint256)
Get a total number of active shares for a particular account at a given timestamp using a hint.
Parameters
Name | Type | Description |
---|
account | address | account to get the number of active shares for |
timestamp | uint48 | time point to get the number of active shares for the account at |
hint | bytes | hint for the checkpoint index |
Returns
Name | Type | Description |
---|
| uint256 | number of active shares for the account at the timestamp |
activeStake
function activeStake() external view returns (uint256)
Get a total amount of active stake in the vault.
Returns
Name | Type | Description |
---|
| uint256 | total amount of active stake |
activeStakeAt
function activeStakeAt(uint48 timestamp, bytes hint) external view returns (uint256)
Get a total amount of active stake in the vault at a given timestamp using a hint.
Parameters
Name | Type | Description |
---|
timestamp | uint48 | time point to get the total active stake at |
hint | bytes | hint for the checkpoint index |
Returns
Name | Type | Description |
---|
| uint256 | total amount of active stake at the timestamp |
burner
function burner() external view returns (address)
Get a burner to issue debt to (e.g., 0xdEaD or some unwrapper contract).
Returns
Name | Type | Description |
---|
| address | address of the burner |
claim
function claim(address recipient, uint256 epoch) external nonpayable returns (uint256 amount)
Claim collateral from the vault.
Parameters
Name | Type | Description |
---|
recipient | address | account that receives the collateral |
epoch | uint256 | epoch to claim the collateral for |
Returns
Name | Type | Description |
---|
amount | uint256 | amount of the collateral claimed |
claimBatch
function claimBatch(address recipient, uint256[] epochs) external nonpayable returns (uint256 amount)
Claim collateral from the vault for multiple epochs.
Parameters
Name | Type | Description |
---|
recipient | address | account that receives the collateral |
epochs | uint256[] | epochs to claim the collateral for |
Returns
Name | Type | Description |
---|
amount | uint256 | amount of the collateral claimed |
collateral
function collateral() external view returns (address)
Get a vault collateral.
Returns
Name | Type | Description |
---|
| address | address of the underlying collateral |
currentEpoch
function currentEpoch() external view returns (uint256)
Get a current vault epoch.
Returns
Name | Type | Description |
---|
| uint256 | current epoch |
currentEpochStart
function currentEpochStart() external view returns (uint48)
Get a start of the current vault epoch.
Returns
Name | Type | Description |
---|
| uint48 | start of the current epoch |
delegator
function delegator() external view returns (address)
Get a delegator (it delegates the vault’s stake to networks and operators).
Returns
Name | Type | Description |
---|
| address | address of the delegator |
deposit
function deposit(address onBehalfOf, uint256 amount) external nonpayable returns (uint256 depositedAmount, uint256 mintedShares)
Deposit collateral into the vault.
Parameters
Name | Type | Description |
---|
onBehalfOf | address | account the deposit is made on behalf of |
amount | uint256 | amount of the collateral to deposit |
Returns
Name | Type | Description |
---|
depositedAmount | uint256 | real amount of the collateral deposited |
mintedShares | uint256 | amount of the active shares minted |
depositLimit
function depositLimit() external view returns (uint256)
Get a deposit limit (maximum amount of the active stake that can be in the vault simultaneously).
Returns
Name | Type | Description |
---|
| uint256 | deposit limit |
depositWhitelist
function depositWhitelist() external view returns (bool)
Get if the deposit whitelist is enabled.
Returns
Name | Type | Description |
---|
| bool | if the deposit whitelist is enabled |
epochAt
function epochAt(uint48 timestamp) external view returns (uint256)
Get an epoch at a given timestamp.
Reverts if the timestamp is less than the start of the epoch 0.
Parameters
Name | Type | Description |
---|
timestamp | uint48 | time point to get the epoch at |
Returns
Name | Type | Description |
---|
| uint256 | epoch at the timestamp |
epochDuration
function epochDuration() external view returns (uint48)
Get a duration of the vault epoch.
Returns
Name | Type | Description |
---|
| uint48 | duration of the epoch |
epochDurationInit
function epochDurationInit() external view returns (uint48)
Get a time point of the epoch duration set.
Returns
Name | Type | Description |
---|
| uint48 | time point of the epoch duration set |
getRoleAdmin
function getRoleAdmin(bytes32 role) external view returns (bytes32)
Returns the admin role that controls role
. See grantRole
and revokeRole
. To change a role’s admin, use _setRoleAdmin
.
Parameters
Name | Type | Description |
---|
role | bytes32 | |
Returns
Name | Type | Description |
---|
| bytes32 | |
grantRole
function grantRole(bytes32 role, address account) external nonpayable
Grants role
to account
. If account
had not been already granted role
, emits a RoleGranted
event. Requirements: - the caller must have role
’s admin role. May emit a RoleGranted
event.
Parameters
Name | Type | Description |
---|
role | bytes32 | |
account | address | |
hasRole
function hasRole(bytes32 role, address account) external view returns (bool)
Returns true
if account
has been granted role
.
Parameters
Name | Type | Description |
---|
role | bytes32 | |
account | address | |
Returns
isDelegatorInitialized
function isDelegatorInitialized() external view returns (bool)
Get if the delegator is initialized.
Returns
Name | Type | Description |
---|
| bool | if the delegator is initialized |
isDepositLimit
function isDepositLimit() external view returns (bool)
Get if the deposit limit is set.
Returns
Name | Type | Description |
---|
| bool | if the deposit limit is set |
isDepositorWhitelisted
function isDepositorWhitelisted(address account) external view returns (bool value)
Get if a given account is whitelisted as a depositor.
Parameters
Name | Type | Description |
---|
account | address | address to check |
Returns
Name | Type | Description |
---|
| bool | if the account is whitelisted as a depositor |
isInitialized
function isInitialized() external view returns (bool)
Check if the vault is fully initialized (a delegator and a slasher are set).
Returns
Name | Type | Description |
---|
| bool | if the vault is fully initialized |
isSlasherInitialized
function isSlasherInitialized() external view returns (bool)
Get if the slasher is initialized.
Returns
Name | Type | Description |
---|
| bool | if the slasher is initialized |
isWithdrawalsClaimed
function isWithdrawalsClaimed(uint256 epoch, address account) external view returns (bool value)
Get if the withdrawals are claimed for a particular account at a given epoch.
Parameters
Name | Type | Description |
---|
epoch | uint256 | epoch to check the withdrawals for the account at |
account | address | account to check the withdrawals for |
Returns
Name | Type | Description |
---|
| bool | if the withdrawals are claimed for the account at the epoch |
migrate
function migrate(uint64 newVersion, bytes data) external nonpayable
Migrate this entity to a particular newer version using a given data.
Parameters
Name | Type | Description |
---|
newVersion | uint64 | new version of the entity |
data | bytes | some data to use |
nextEpochStart
function nextEpochStart() external view returns (uint48)
Get a start of the next vault epoch.
Returns
Name | Type | Description |
---|
| uint48 | start of the next epoch |
onSlash
function onSlash(uint256 amount, uint48 captureTimestamp) external nonpayable returns (uint256 slashedAmount)
Slash callback for burning collateral.
Only the slasher can call this function.
Parameters
Name | Type | Description |
---|
amount | uint256 | amount to slash |
captureTimestamp | uint48 | time point when the stake was captured |
Returns
Name | Type | Description |
---|
slashedAmount | uint256 | real amount of the collateral slashed |
owner
function owner() external view returns (address)
Returns the address of the current owner.
Returns
Name | Type | Description |
---|
| address | |
previousEpochStart
function previousEpochStart() external view returns (uint48)
Get a start of the previous vault epoch.
Reverts if the current epoch is 0.
Returns
Name | Type | Description |
---|
| uint48 | start of the previous epoch |
redeem
function redeem(address claimer, uint256 shares) external nonpayable returns (uint256 withdrawnAssets, uint256 mintedShares)
Redeem collateral from the vault (it will be claimable after the next epoch).
Parameters
Name | Type | Description |
---|
claimer | address | account that needs to claim the withdrawal |
shares | uint256 | amount of the active shares to redeem |
Returns
Name | Type | Description |
---|
withdrawnAssets | uint256 | amount of the collateral withdrawn |
mintedShares | uint256 | amount of the epoch withdrawal shares minted |
renounceOwnership
function renounceOwnership() external nonpayable
Leaves the contract without owner. It will not be possible to call onlyOwner
functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.
renounceRole
function renounceRole(bytes32 role, address callerConfirmation) external nonpayable
Revokes role
from the calling account. Roles are often managed via grantRole
and revokeRole
: this function’s purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked role
, emits a RoleRevoked
event. Requirements: - the caller must be callerConfirmation
. May emit a RoleRevoked
event.
Parameters
Name | Type | Description |
---|
role | bytes32 | |
callerConfirmation | address | |
revokeRole
function revokeRole(bytes32 role, address account) external nonpayable
Revokes role
from account
. If account
had been granted role
, emits a RoleRevoked
event. Requirements: - the caller must have role
’s admin role. May emit a RoleRevoked
event.
Parameters
Name | Type | Description |
---|
role | bytes32 | |
account | address | |
setDelegator
function setDelegator(address delegator) external nonpayable
Parameters
Name | Type | Description |
---|
delegator | address | vault’s delegator to delegate the stake to networks and operators |
setDepositLimit
function setDepositLimit(uint256 limit) external nonpayable
Set a deposit limit.
Only a DEPOSIT_LIMIT_SET_ROLE holder can call this function.
Parameters
Name | Type | Description |
---|
limit | uint256 | deposit limit (maximum amount of the collateral that can be in the vault simultaneously) |
setDepositWhitelist
function setDepositWhitelist(bool status) external nonpayable
Enable/disable deposit whitelist.
Only a DEPOSIT_WHITELIST_SET_ROLE holder can call this function.
Parameters
Name | Type | Description |
---|
status | bool | if enabling deposit whitelist |
setDepositorWhitelistStatus
function setDepositorWhitelistStatus(address account, bool status) external nonpayable
Set a depositor whitelist status.
Only a DEPOSITOR_WHITELIST_ROLE holder can call this function.
Parameters
Name | Type | Description |
---|
account | address | account for which the whitelist status is set |
status | bool | if whitelisting the account |
setIsDepositLimit
function setIsDepositLimit(bool status) external nonpayable
Enable/disable deposit limit.
Only a IS_DEPOSIT_LIMIT_SET_ROLE holder can call this function.
Parameters
Name | Type | Description |
---|
status | bool | if enabling deposit limit |
setSlasher
function setSlasher(address slasher) external nonpayable
Parameters
Name | Type | Description |
---|
slasher | address | vault’s slasher to provide a slashing mechanism to networks |
slashableBalanceOf
function slashableBalanceOf(address account) external view returns (uint256)
Get a total amount of the collateral that can be slashed for a given account.
Parameters
Name | Type | Description |
---|
account | address | account to get the slashable collateral for |
Returns
Name | Type | Description |
---|
| uint256 | total amount of the account’s slashable collateral |
slasher
function slasher() external view returns (address)
Get a slasher (it provides networks a slashing mechanism).
Returns
Name | Type | Description |
---|
| address | address of the slasher |
staticDelegateCall
function staticDelegateCall(address target, bytes data) external nonpayable
Make a delegatecall from this contract to a given target contract with a particular data (always reverts with a return data).
It allows to use this contract’s storage on-chain.
Parameters
Name | Type | Description |
---|
target | address | address of the contract to make a delegatecall to |
data | bytes | data to make a delegatecall with |
supportsInterface
function supportsInterface(bytes4 interfaceId) external view returns (bool)
See IERC165-supportsInterface
.
Parameters
Name | Type | Description |
---|
interfaceId | bytes4 | |
Returns
totalStake
function totalStake() external view returns (uint256)
Get a total amount of the collateral that can be slashed.
Returns
Name | Type | Description |
---|
| uint256 | total amount of the slashable collateral |
transferOwnership
function transferOwnership(address newOwner) external nonpayable
Transfers ownership of the contract to a new account (newOwner
). Can only be called by the current owner.
Parameters
Name | Type | Description |
---|
newOwner | address | |
version
function version() external view returns (uint64)
Get the entity’s version.
Starts from 1.
Returns
Name | Type | Description |
---|
| uint64 | version of the entity |
withdraw
function withdraw(address claimer, uint256 amount) external nonpayable returns (uint256 burnedShares, uint256 mintedShares)
Withdraw collateral from the vault (it will be claimable after the next epoch).
Parameters
Name | Type | Description |
---|
claimer | address | account that needs to claim the withdrawal |
amount | uint256 | amount of the collateral to withdraw |
Returns
Name | Type | Description |
---|
burnedShares | uint256 | amount of the active shares burned |
mintedShares | uint256 | amount of the epoch withdrawal shares minted |
withdrawalShares
function withdrawalShares(uint256 epoch) external view returns (uint256 amount)
Get a total number of withdrawal shares at a given epoch.
Parameters
Name | Type | Description |
---|
epoch | uint256 | epoch to get the total number of withdrawal shares at |
Returns
Name | Type | Description |
---|
| uint256 | total number of withdrawal shares at the epoch |
withdrawalSharesOf
function withdrawalSharesOf(uint256 epoch, address account) external view returns (uint256 amount)
Get a number of withdrawal shares for a particular account at a given epoch (zero if claimed).
Parameters
Name | Type | Description |
---|
epoch | uint256 | epoch to get the number of withdrawal shares for the account at |
account | address | account to get the number of withdrawal shares for |
Returns
Name | Type | Description |
---|
| uint256 | number of withdrawal shares for the account at the epoch |
withdrawals
function withdrawals(uint256 epoch) external view returns (uint256 amount)
Get a total amount of the withdrawals at a given epoch.
Parameters
Name | Type | Description |
---|
epoch | uint256 | epoch to get the total amount of the withdrawals at |
Returns
Name | Type | Description |
---|
| uint256 | total amount of the withdrawals at the epoch |
withdrawalsOf
function withdrawalsOf(uint256 epoch, address account) external view returns (uint256)
Get withdrawals for a particular account at a given epoch (zero if claimed).
Parameters
Name | Type | Description |
---|
epoch | uint256 | epoch to get the withdrawals for the account at |
account | address | account to get the withdrawals for |
Returns
Name | Type | Description |
---|
| uint256 | withdrawals for the account at the epoch |
Events
Claim
event Claim(address indexed claimer, address indexed recipient, uint256 epoch, uint256 amount)
Emitted when a claim is made.
Parameters
Name | Type | Description |
---|
claimer indexed | address | account that claimed |
recipient indexed | address | account that received the collateral |
epoch | uint256 | epoch the collateral was claimed for |
amount | uint256 | amount of the collateral claimed |
ClaimBatch
event ClaimBatch(address indexed claimer, address indexed recipient, uint256[] epochs, uint256 amount)
Emitted when a batch claim is made.
Parameters
Name | Type | Description |
---|
claimer indexed | address | account that claimed |
recipient indexed | address | account that received the collateral |
epochs | uint256[] | epochs the collateral was claimed for |
amount | uint256 | amount of the collateral claimed |
Deposit
event Deposit(address indexed depositor, address indexed onBehalfOf, uint256 amount, uint256 shares)
Emitted when a deposit is made.
Parameters
Name | Type | Description |
---|
depositor indexed | address | account that made the deposit |
onBehalfOf indexed | address | account the deposit was made on behalf of |
amount | uint256 | amount of the collateral deposited |
shares | uint256 | amount of the active shares minted |
Initialized
event Initialized(uint64 version)
Triggered when the contract has been initialized or reinitialized.
Parameters
Name | Type | Description |
---|
version | uint64 | |
OnSlash
event OnSlash(uint256 amount, uint48 captureTimestamp, uint256 slashedAmount)
Emitted when a slash happens.
Parameters
Name | Type | Description |
---|
amount | uint256 | amount of the collateral to slash |
captureTimestamp | uint48 | time point when the stake was captured |
slashedAmount | uint256 | real amount of the collateral slashed |
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Parameters
Name | Type | Description |
---|
previousOwner indexed | address | |
newOwner indexed | address | |
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
Emitted when newAdminRole
is set as role
’s admin role, replacing previousAdminRole
DEFAULT_ADMIN_ROLE
is the starting admin for all roles, despite RoleAdminChanged
not being emitted signaling this.
Parameters
Name | Type | Description |
---|
role indexed | bytes32 | |
previousAdminRole indexed | bytes32 | |
newAdminRole indexed | bytes32 | |
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
Emitted when account
is granted role
. sender
is the account that originated the contract call, an admin role bearer except when using AccessControl-\_setupRole
.
Parameters
Name | Type | Description |
---|
role indexed | bytes32 | |
account indexed | address | |
sender indexed | address | |
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Emitted when account
is revoked role
. sender
is the account that originated the contract call: - if using revokeRole
, it is the admin role bearer - if using renounceRole
, it is the role bearer (i.e. account
)
Parameters
Name | Type | Description |
---|
role indexed | bytes32 | |
account indexed | address | |
sender indexed | address | |
SetDelegator
event SetDelegator(address indexed delegator)
Emitted when a delegator is set.
Can be set only once.
Parameters
Name | Type | Description |
---|
delegator indexed | address | vault’s delegator to delegate the stake to networks and operators |
SetDepositLimit
event SetDepositLimit(uint256 limit)
Emitted when a deposit limit is set.
Parameters
Name | Type | Description |
---|
limit | uint256 | deposit limit (maximum amount of the collateral that can be in the vault simultaneously) |
SetDepositWhitelist
event SetDepositWhitelist(bool status)
Emitted when a deposit whitelist status is enabled/disabled.
Parameters
Name | Type | Description |
---|
status | bool | if enabled deposit whitelist |
SetDepositorWhitelistStatus
event SetDepositorWhitelistStatus(address indexed account, bool status)
Emitted when a depositor whitelist status is set.
Parameters
Name | Type | Description |
---|
account indexed | address | account for which the whitelist status is set |
status | bool | if whitelisted the account |
SetIsDepositLimit
event SetIsDepositLimit(bool status)
Emitted when a deposit limit status is enabled/disabled.
Parameters
Name | Type | Description |
---|
status | bool | if enabled deposit limit |
SetSlasher
event SetSlasher(address indexed slasher)
Emitted when a slasher is set.
Can be set only once.
Parameters
Name | Type | Description |
---|
slasher indexed | address | vault’s slasher to provide a slashing mechanism to networks |
Withdraw
event Withdraw(address indexed withdrawer, address indexed claimer, uint256 amount, uint256 burnedShares, uint256 mintedShares)
Emitted when a withdrawal is made.
Parameters
Name | Type | Description |
---|
withdrawer indexed | address | account that made the withdrawal |
claimer indexed | address | account that needs to claim the withdrawal |
amount | uint256 | amount of the collateral withdrawn |
burnedShares | uint256 | amount of the active shares burned |
mintedShares | uint256 | amount of the epoch withdrawal shares minted |
Structs
InitParams
struct InitParams {
address collateral;
address burner;
uint48 epochDuration;
bool depositWhitelist;
bool isDepositLimit;
uint256 depositLimit;
address defaultAdminRoleHolder;
address depositWhitelistSetRoleHolder;
address depositorWhitelistRoleHolder;
address isDepositLimitSetRoleHolder;
address depositLimitSetRoleHolder;
}
Initial parameters needed for a vault deployment.
Parameters
Name | Type | Description |
---|
collateral | address | vault’s underlying collateral |
burner | address | vault’s burner to issue debt to (e.g., 0xdEaD or some unwrapper contract) |
epochDuration | uint48 | duration of the vault epoch (it determines sync points for withdrawals) |
depositWhitelist | bool | if enabling deposit whitelist |
isDepositLimit | bool | if enabling deposit limit |
depositLimit | uint256 | deposit limit (maximum amount of the collateral that can be in the vault simultaneously) |
defaultAdminRoleHolder | address | address of the initial DEFAULT_ADMIN_ROLE holder |
depositWhitelistSetRoleHolder | address | address of the initial DEPOSIT_WHITELIST_SET_ROLE holder |
depositorWhitelistRoleHolder | address | address of the initial DEPOSITOR_WHITELIST_ROLE holder |
isDepositLimitSetRoleHolder | address | address of the initial IS_DEPOSIT_LIMIT_SET_ROLE holder |
depositLimitSetRoleHolder | address | address of the initial DEPOSIT_LIMIT_SET_ROLE holder |
ActiveBalanceOfHints
struct ActiveBalanceOfHints {
bytes activeSharesOfHint;
bytes activeStakeHint;
bytes activeSharesHint;
}
Hints for an active balance.
Parameters
Name | Type | Description |
---|
activeSharesOfHint | bytes | hint for the active shares of checkpoint |
activeStakeHint | bytes | hint for the active stake checkpoint |
activeSharesHint | bytes | hint for the active shares checkpoint |