Skip to main content

Machine

Git Source

Inherits: MakinaGovernable, BridgeController, ReentrancyGuardUpgradeable, IMachine

State Variables

wormhole

Address of the Wormhole Core Bridge.

address public immutable wormhole;

MachineStorageLocation

bytes32 private constant MachineStorageLocation = 0x55fe2a17e400bcd0e2125123a7fc955478e727b29a4c522f4f2bd95d961bd900;

Functions

_getMachineStorage

function _getMachineStorage() private pure returns (MachineStorage storage $);

constructor

constructor(address _registry, address _wormhole) MakinaContext(_registry);

initialize

Initializer of the contract.

function initialize(
MachineInitParams calldata mParams,
MakinaGovernableInitParams calldata mgParams,
address _preDepositVault,
address _shareToken,
address _accountingToken,
address _hubCaliber
) external override initializer;

Parameters

NameTypeDescription
mParamsMachineInitParamsThe machine initialization parameters.
mgParamsMakinaGovernableInitParamsThe makina governable initialization parameters.
_preDepositVaultaddressThe address of the pre-deposit vault.
_shareTokenaddressThe address of the share token.
_accountingTokenaddressThe address of the accounting token.
_hubCaliberaddressThe address of the hub caliber.

depositor

Address of the depositor.

function depositor() external view override returns (address);

redeemer

Address of the redeemer.

function redeemer() external view override returns (address);

shareToken

Address of the share token.

function shareToken() external view override returns (address);

accountingToken

Address of the accounting token.

function accountingToken() external view override returns (address);

hubCaliber

Address of the hub caliber.

function hubCaliber() external view returns (address);

feeManager

Address of the fee manager.

function feeManager() external view override returns (address);

caliberStaleThreshold

Maximum duration a caliber can remain unaccounted for before it is considered stale.

function caliberStaleThreshold() external view override returns (uint256);

maxFixedFeeAccrualRate

Maximum fixed fee accrual rate per second used to compute an upper bound on shares to be minted, 1e18 = 100%.

function maxFixedFeeAccrualRate() external view override returns (uint256);

maxPerfFeeAccrualRate

Maximum performance fee accrual rate per second used to compute an upper bound on shares to be minted, 1e18 = 100%.

function maxPerfFeeAccrualRate() external view override returns (uint256);

feeMintCooldown

Minimum time to be elapsed between two fee minting events.

function feeMintCooldown() external view override returns (uint256);

shareLimit

Share token supply limit that cannot be exceeded by new deposits.

function shareLimit() external view override returns (uint256);

maxMint

Maximum amount of shares that can currently be minted through asset deposits.

function maxMint() public view override returns (uint256);

maxWithdraw

Maximum amount of accounting tokens that can currently be withdrawn through share redemptions.

function maxWithdraw() public view override returns (uint256);

lastTotalAum

Last total machine AUM.

function lastTotalAum() external view override returns (uint256);

lastGlobalAccountingTime

Timestamp of the last global machine accounting.

function lastGlobalAccountingTime() external view override returns (uint256);

getSpokeCalibersLength

Number of calibers associated with the machine.

function getSpokeCalibersLength() external view override returns (uint256);

getSpokeChainId

Spoke caliber index => Spoke Chain ID.

function getSpokeChainId(uint256 idx) external view override returns (uint256);

getSpokeCaliberDetailedAum

Spoke Chain ID => Spoke caliber's AUM, individual positions values and accounting timestamp.

function getSpokeCaliberDetailedAum(uint256 chainId)
external
view
override
returns (uint256, bytes[] memory, bytes[] memory, uint256);

getSpokeCaliberMailbox

Spoke Chain ID => Spoke Caliber Mailbox Address.

function getSpokeCaliberMailbox(uint256 chainId) external view returns (address);

getSpokeBridgeAdapter

Spoke Chain ID => Spoke Bridge ID => Spoke Bridge Adapter.

function getSpokeBridgeAdapter(uint256 chainId, uint16 bridgeId) external view returns (address);

isIdleToken

Token => Is the token an idle token.

function isIdleToken(address token) external view override returns (bool);

convertToShares

Returns the amount of shares that the Machine would exchange for the amount of accounting tokens provided.

function convertToShares(uint256 assets) public view override returns (uint256);

Parameters

NameTypeDescription
assetsuint256The amount of accounting tokens.

Returns

NameTypeDescription
<none>uint256shares The amount of shares.

convertToAssets

Returns the amount of accounting tokens that the Machine would exchange for the amount of shares provided.

function convertToAssets(uint256 shares) public view override returns (uint256);

Parameters

NameTypeDescription
sharesuint256The amount of shares.

Returns

NameTypeDescription
<none>uint256assets The amount of accounting tokens.

manageTransfer

Manages the transfer of tokens between a machine and a caliber. The transfer direction depends on the caller.

function manageTransfer(address token, uint256 amount, bytes calldata data) external override nonReentrant;

Parameters

NameTypeDescription
tokenaddressThe address of the token.
amountuint256The amount of tokens to transfer.
databytesABI-encoded parameters required for bridge-related transfers. Ignored for transfers between a machine and its hub caliber.

transferToHubCaliber

Initiates a token transfers to the hub caliber.

function transferToHubCaliber(address token, uint256 amount) external override notRecoveryMode onlyMechanic;

Parameters

NameTypeDescription
tokenaddressThe address of the token to transfer.
amountuint256The amount of token to transfer.

transferToSpokeCaliber

Initiates a token transfers to the spoke caliber.

function transferToSpokeCaliber(
uint16 bridgeId,
uint256 chainId,
address token,
uint256 amount,
uint256 minOutputAmount
) external override nonReentrant notRecoveryMode onlyMechanic;

Parameters

NameTypeDescription
bridgeIduint16The ID of the bridge to use for the transfer.
chainIduint256The foreign EVM chain ID of the spoke caliber.
tokenaddressThe address of the token to transfer.
amountuint256The amount of token to transfer.
minOutputAmountuint256The minimum output amount expected from the transfer.

sendOutBridgeTransfer

Executes a scheduled outgoing bridge transfer.

function sendOutBridgeTransfer(uint16 bridgeId, uint256 transferId, bytes calldata data)
external
override
notRecoveryMode
onlyMechanic;

Parameters

NameTypeDescription
bridgeIduint16The ID of the bridge.
transferIduint256The ID of the transfer to execute.
databytesThe optional data needed to execute the transfer.

authorizeInBridgeTransfer

Registers a message hash as authorized for an incoming bridge transfer.

function authorizeInBridgeTransfer(uint16 bridgeId, bytes32 messageHash) external override onlyOperator;

Parameters

NameTypeDescription
bridgeIduint16The ID of the bridge.
messageHashbytes32The hash of the message to authorize.

claimInBridgeTransfer

Transfers a received bridge transfer out of the adapter.

function claimInBridgeTransfer(uint16 bridgeId, uint256 transferId) external override onlyOperator;

Parameters

NameTypeDescription
bridgeIduint16The ID of the bridge.
transferIduint256The ID of the transfer to claim.

cancelOutBridgeTransfer

Cancels an outgoing bridge transfer.

function cancelOutBridgeTransfer(uint16 bridgeId, uint256 transferId) external override onlyOperator;

Parameters

NameTypeDescription
bridgeIduint16The ID of the bridge.
transferIduint256The ID of the transfer to cancel.

updateTotalAum

Updates the total AUM of the machine.

function updateTotalAum() external override nonReentrant notRecoveryMode returns (uint256);

Returns

NameTypeDescription
<none>uint256totalAum The updated total AUM.

deposit

Deposits accounting tokens into the machine and mints shares to the receiver.

function deposit(uint256 assets, address receiver, uint256 minShares)
external
nonReentrant
notRecoveryMode
returns (uint256);

Parameters

NameTypeDescription
assetsuint256The amount of accounting tokens to deposit.
receiveraddressThe receiver of minted shares.
minSharesuint256The minimum amount of shares to be minted.

Returns

NameTypeDescription
<none>uint256shares The amount of shares minted.

redeem

Redeems shares from the machine and transfers accounting tokens to the receiver.

function redeem(uint256 shares, address receiver, uint256 minAssets)
external
override
nonReentrant
notRecoveryMode
returns (uint256);

Parameters

NameTypeDescription
sharesuint256The amount of shares to redeem.
receiveraddressThe receiver of the accounting tokens.
minAssetsuint256The minimum amount of accounting tokens to be transferred.

Returns

NameTypeDescription
<none>uint256assets The amount of accounting tokens transferred.

updateSpokeCaliberAccountingData

Updates spoke caliber accounting data using Wormhole Cross-Chain Queries (CCQ).

Validates the Wormhole CCQ response and guardian signatures before updating state.

function updateSpokeCaliberAccountingData(bytes calldata response, GuardianSignature[] calldata signatures)
external
override
nonReentrant;

Parameters

NameTypeDescription
responsebytesThe Wormhole CCQ response payload containing the accounting data.
signaturesGuardianSignature[]The array of Wormhole guardians signatures attesting to the validity of the response.

setSpokeCaliber

Registers a spoke caliber mailbox and related bridge adapters.

function setSpokeCaliber(
uint256 foreignChainId,
address spokeCaliberMailbox,
uint16[] calldata bridges,
address[] calldata adapters
) external restricted;

Parameters

NameTypeDescription
foreignChainIduint256
spokeCaliberMailboxaddressThe address of the spoke caliber mailbox.
bridgesuint16[]The list of bridges supported with the spoke caliber.
adaptersaddress[]The list of corresponding adapters for each bridge. Must be the same length as bridges.

setSpokeBridgeAdapter

Registers a spoke bridge adapter.

function setSpokeBridgeAdapter(uint256 foreignChainId, uint16 bridgeId, address adapter) external override restricted;

Parameters

NameTypeDescription
foreignChainIduint256
bridgeIduint16The ID of the bridge.
adapteraddressThe foreign address of the bridge adapter.

setDepositor

Sets the depositor address.

function setDepositor(address newDepositor) external override restricted;

Parameters

NameTypeDescription
newDepositoraddressThe address of the new depositor.

setRedeemer

Sets the redeemer address.

function setRedeemer(address newRedeemer) external override restricted;

Parameters

NameTypeDescription
newRedeemeraddressThe address of the new redeemer.

setFeeManager

Sets the fee manager address.

function setFeeManager(address newFeeManager) external override restricted;

Parameters

NameTypeDescription
newFeeManageraddressThe address of the new fee manager.

setCaliberStaleThreshold

Sets the caliber accounting staleness threshold.

function setCaliberStaleThreshold(uint256 newCaliberStaleThreshold) external override onlyRiskManagerTimelock;

Parameters

NameTypeDescription
newCaliberStaleThresholduint256The new threshold in seconds.

setMaxFixedFeeAccrualRate

Sets the maximum fixed fee accrual rate.

function setMaxFixedFeeAccrualRate(uint256 newMaxAccrualRate) external override onlyRiskManagerTimelock;

Parameters

NameTypeDescription
newMaxAccrualRateuint256The new maximum fixed fee accrual rate per second, 1e18 = 100%.

setMaxPerfFeeAccrualRate

Sets the maximum performance fee accrual rate.

function setMaxPerfFeeAccrualRate(uint256 newMaxAccrualRate) external override onlyRiskManagerTimelock;

Parameters

NameTypeDescription
newMaxAccrualRateuint256The new maximum performance fee accrual rate per second, 1e18 = 100%.

setFeeMintCooldown

Sets the minimum time to be elapsed between two fee minting events.

function setFeeMintCooldown(uint256 newFeeMintCooldown) external override onlyRiskManagerTimelock;

Parameters

NameTypeDescription
newFeeMintCooldownuint256The new cooldown in seconds.

setShareLimit

Sets the new share token supply limit that cannot be exceeded by new deposits.

function setShareLimit(uint256 newShareLimit) external override onlyRiskManager;

Parameters

NameTypeDescription
newShareLimituint256The new share limit

setOutTransferEnabled

Sets the outgoing transfer enabled status for a bridge.

function setOutTransferEnabled(uint16 bridgeId, bool enabled) external override onlyRiskManagerTimelock;

Parameters

NameTypeDescription
bridgeIduint16The ID of the bridge.
enabledboolTrue to enable outgoing transfer for the given bridge ID, false to disable.

setMaxBridgeLossBps

Sets the maximum allowed value loss in basis points for transfers via this bridge.

function setMaxBridgeLossBps(uint16 bridgeId, uint256 maxBridgeLossBps) external override onlyRiskManagerTimelock;

Parameters

NameTypeDescription
bridgeIduint16The ID of the bridge.
maxBridgeLossBpsuint256The maximum allowed value loss in basis points.

resetBridgingState

Resets internal bridge counters for a given token, and withdraw token balances held by all bridge adapters.

This function is intended to be used by the DAO to realign bridge accounting state and maintain protocol consistency, typically in response to operator deviations, external bridge discrepancies, or unbounded counter growth.

function resetBridgingState(address token) external override onlySecurityCouncil;

Parameters

NameTypeDescription
tokenaddressThe address of the token.

_setSpokeBridgeAdapter

Sets the spoke bridge adapter for a given foreign chain ID and bridge ID.

function _setSpokeBridgeAdapter(uint256 foreignChainId, uint16 bridgeId, address adapter) internal;

_notifyIdleToken

Checks token balance, and registers token if needed.

function _notifyIdleToken(address token) internal;

Structs

MachineStorage

Note: storage-location: erc7201:makina.storage.Machine

struct MachineStorage {
address _shareToken;
address _accountingToken;
address _depositor;
address _redeemer;
address _feeManager;
uint256 _caliberStaleThreshold;
uint256 _lastTotalAum;
uint256 _lastGlobalAccountingTime;
uint256 _lastMintedFeesTime;
uint256 _lastMintedFeesSharePrice;
uint256 _maxFixedFeeAccrualRate;
uint256 _maxPerfFeeAccrualRate;
uint256 _feeMintCooldown;
uint256 _shareTokenDecimalsOffset;
uint256 _shareLimit;
uint256 _hubChainId;
address _hubCaliber;
uint256[] _foreignChainIds;
mapping(uint256 foreignChainId => SpokeCaliberData data) _spokeCalibersData;
EnumerableSet.AddressSet _idleTokens;
}