Skip to main content

IMachine

Git Source

Inherits: IMachineEndpoint

Functions

initialize

Initializer of the contract.

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

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.

wormhole

Address of the Wormhole Core Bridge.

function wormhole() external view returns (address);

depositor

Address of the depositor.

function depositor() external view returns (address);

redeemer

Address of the redeemer.

function redeemer() external view returns (address);

shareToken

Address of the share token.

function shareToken() external view returns (address);

accountingToken

Address of the accounting token.

function accountingToken() external view returns (address);

hubCaliber

Address of the hub caliber.

function hubCaliber() external view returns (address);

feeManager

Address of the fee manager.

function feeManager() external view returns (address);

caliberStaleThreshold

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

function caliberStaleThreshold() external view 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 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 returns (uint256);

feeMintCooldown

Minimum time to be elapsed between two fee minting events.

function feeMintCooldown() external view returns (uint256);

shareLimit

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

function shareLimit() external view returns (uint256);

maxMint

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

function maxMint() external view returns (uint256);

maxWithdraw

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

function maxWithdraw() external view returns (uint256);

lastTotalAum

Last total machine AUM.

function lastTotalAum() external view returns (uint256);

lastGlobalAccountingTime

Timestamp of the last global machine accounting.

function lastGlobalAccountingTime() external view returns (uint256);

isIdleToken

Token => Is the token an idle token.

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

getSpokeCalibersLength

Number of calibers associated with the machine.

function getSpokeCalibersLength() external view returns (uint256);

getSpokeChainId

Spoke caliber index => Spoke Chain ID.

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

getSpokeCaliberDetailedAum

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

function getSpokeCaliberDetailedAum(uint256 chainId)
external
view
returns (uint256 aum, bytes[] memory positions, bytes[] memory baseTokens, uint256 timestamp);

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);

convertToShares

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

function convertToShares(uint256 assets) external view 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) external view returns (uint256);

Parameters

NameTypeDescription
sharesuint256The amount of shares.

Returns

NameTypeDescription
<none>uint256assets The amount of accounting tokens.

transferToHubCaliber

Initiates a token transfers to the hub caliber.

function transferToHubCaliber(address token, uint256 amount) external;

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;

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.

updateTotalAum

Updates the total AUM of the machine.

function updateTotalAum() external 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 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 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 memory response, GuardianSignature[] memory signatures) external;

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 chainId,
address spokeCaliberMailbox,
uint16[] calldata bridges,
address[] calldata adapters
) external;

Parameters

NameTypeDescription
chainIduint256The foreign EVM chain ID of the spoke caliber.
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 chainId, uint16 bridgeId, address adapter) external;

Parameters

NameTypeDescription
chainIduint256The foreign EVM chain ID of the adapter.
bridgeIduint16The ID of the bridge.
adapteraddressThe foreign address of the bridge adapter.

setDepositor

Sets the depositor address.

function setDepositor(address newDepositor) external;

Parameters

NameTypeDescription
newDepositoraddressThe address of the new depositor.

setRedeemer

Sets the redeemer address.

function setRedeemer(address newRedeemer) external;

Parameters

NameTypeDescription
newRedeemeraddressThe address of the new redeemer.

setFeeManager

Sets the fee manager address.

function setFeeManager(address newFeeManager) external;

Parameters

NameTypeDescription
newFeeManageraddressThe address of the new fee manager.

setCaliberStaleThreshold

Sets the caliber accounting staleness threshold.

function setCaliberStaleThreshold(uint256 newCaliberStaleThreshold) external;

Parameters

NameTypeDescription
newCaliberStaleThresholduint256The new threshold in seconds.

setMaxFixedFeeAccrualRate

Sets the maximum fixed fee accrual rate.

function setMaxFixedFeeAccrualRate(uint256 newMaxAccrualRate) external;

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;

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;

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;

Parameters

NameTypeDescription
newShareLimituint256The new share limit

Events

CaliberStaleThresholdChanged

event CaliberStaleThresholdChanged(uint256 indexed oldThreshold, uint256 indexed newThreshold);

Deposit

event Deposit(address indexed sender, address indexed receiver, uint256 assets, uint256 shares);

DepositorChanged

event DepositorChanged(address indexed oldDepositor, address indexed newDepositor);

FeeManagerChanged

event FeeManagerChanged(address indexed oldFeeManager, address indexed newFeeManager);

FeeMintCooldownChanged

event FeeMintCooldownChanged(uint256 indexed oldFeeMintCooldown, uint256 indexed newFeeMintCooldown);

FeesMinted

event FeesMinted(uint256 shares);

MaxFixedFeeAccrualRateChanged

event MaxFixedFeeAccrualRateChanged(uint256 indexed oldMaxAccrualRate, uint256 indexed newMaxAccrualRate);

MaxPerfFeeAccrualRateChanged

event MaxPerfFeeAccrualRateChanged(uint256 indexed oldMaxAccrualRate, uint256 indexed newMaxAccrualRate);

Redeem

event Redeem(address indexed owner, address indexed receiver, uint256 assets, uint256 shares);

RedeemerChanged

event RedeemerChanged(address indexed oldRedeemer, address indexed newRedeemer);

ShareLimitChanged

event ShareLimitChanged(uint256 indexed oldShareLimit, uint256 indexed newShareLimit);

SpokeBridgeAdapterSet

event SpokeBridgeAdapterSet(uint256 indexed chainId, uint256 indexed bridgeId, address indexed adapter);

SpokeCaliberMailboxSet

event SpokeCaliberMailboxSet(uint256 indexed chainId, address indexed caliberMailbox);

TotalAumUpdated

event TotalAumUpdated(uint256 totalAum);

TransferToCaliber

event TransferToCaliber(uint256 indexed chainId, address indexed token, uint256 amount);

Structs

MachineInitParams

Initialization parameters.

struct MachineInitParams {
address initialDepositor;
address initialRedeemer;
address initialFeeManager;
uint256 initialCaliberStaleThreshold;
uint256 initialMaxFixedFeeAccrualRate;
uint256 initialMaxPerfFeeAccrualRate;
uint256 initialFeeMintCooldown;
uint256 initialShareLimit;
}

Properties

NameTypeDescription
initialDepositoraddressThe address of the initial depositor.
initialRedeemeraddressThe address of the initial redeemer.
initialFeeManageraddressThe address of the initial fee manager.
initialCaliberStaleThresholduint256The caliber accounting staleness threshold in seconds.
initialMaxFixedFeeAccrualRateuint256The maximum fixed fee accrual rate per second, 1e18 = 100%.
initialMaxPerfFeeAccrualRateuint256The maximum performance fee accrual rate per second, 1e18 = 100%.
initialFeeMintCooldownuint256The minimum time to be elapsed between two fee minting events in seconds.
initialShareLimituint256The share cap value.

SpokeCaliberData

Internal state structure for a spoke caliber data.

struct SpokeCaliberData {
address mailbox;
mapping(uint16 bridgeId => address adapter) bridgeAdapters;
uint256 timestamp;
uint256 netAum;
bytes[] positions;
bytes[] baseTokens;
EnumerableMap.AddressToUintMap caliberBridgesIn;
EnumerableMap.AddressToUintMap caliberBridgesOut;
EnumerableMap.AddressToUintMap machineBridgesIn;
EnumerableMap.AddressToUintMap machineBridgesOut;
}

Properties

NameTypeDescription
mailboxaddressThe foreign address of the spoke caliber mailbox.
bridgeAdaptersmapping(uint16 bridgeId => address adapter)The mapping of bridge IDs to their corresponding adapters.
timestampuint256The timestamp of the last accounting.
netAumuint256The net AUM of the spoke caliber.
positionsbytes[]The list of positions of the spoke caliber, each encoded as abi.encode(positionId, value).
baseTokensbytes[]The list of base tokens of the spoke caliber, each encoded as abi.encode(token, value).
caliberBridgesInEnumerableMap.AddressToUintMapThe mapping of spoke caliber incoming bridge amounts.
caliberBridgesOutEnumerableMap.AddressToUintMapThe mapping of spoke caliber outgoing bridge amounts.
machineBridgesInEnumerableMap.AddressToUintMapThe mapping of machine incoming bridge amounts.
machineBridgesOutEnumerableMap.AddressToUintMapThe mapping of machine outgoing bridge amounts.