MagpieStargateBridge

The contract serves as a bridge between Magpie and the Stargate network, allowing deposits and withdrawals of assets between the two networks. It has a modifier onlyMagpieAggregator that restricts access to functions only to the Magpie aggregator address specified in the settings struct. It has a modifier onlyStargate that restricts access to functions only to the Stargate router address specified in the settings struct.

struct Settings {
        address aggregatorAddress;
        address routerAddress;
    }
Field
Type
Description
aggregatorAddress
address

Magpie Aggregator Address

routerAddress
address

Stargate Router Address

struct WithdrawArgs {
        uint16 srcChainId;
        uint256 nonce;
        address assetAddress;
        bytes srcAddress;
        TransferKey transferKey;
    }
Field
Type
Description
srcChainId
uint16

A uint16 value representing the source chain ID from which the withdrawal is initiated.

nonce
uint256

A uint256 value representing a unique identifier for the withdrawal transaction.

assetAddress
address

An address representing the asset address that is being withdrawn.

srcAddress
bytes

A bytes array representing the source address on the source chain.

transferKey
TransferKey

An instance of the TransferKey struct from the LibTransferKey library, which contains the network ID, sender address, and swap sequence associated with the withdrawal.

updateSettings():

to update the bridge settings. Only the contract owner can call this function.

Input:

Field
Type
Description

_settings

Settings

struct Settings {
        address aggregatorAddress;
        address routerAddress;
    }

withdraw():

to withdraw deposited funds. It checks the deposited amount based on the transfer key and asset address, clears the cached swap if the amount is zero, and transfers the amount to the aggregator address. Only the Magpie aggregator can call this function.

Input:

Field
Type
Description

withdrawArgs

WithdrawArgs

struct WithdrawArgs {
        uint16 srcChainId;
        uint256 nonce;
        address assetAddress;
        bytes srcAddress;
        TransferKey transferKey;
    }

Output:

Field
Type
Description

amountOut

uint256

The amount that is withdrawn.

sgReceive():

sgReceive is called by the Stargate router when assets are received from another chain. It increments the deposited amount based on the transfer key, asset address, and amount.

Input:

Field
Type
Description

transferKey.networkId

uint16

Network Id extracted from the TransferKey struct

transferKey.senderAddress

bytes

Sender Address extracted from the TransferKey struct

transferKey.swapSequence

uint256

Swap Sequence extracted from the TransferKey struct

assetAddress

address

An address parameter representing the address of the received asset.

amount

uint256

A uint256 parameter representing the amount of the received asset.

payload

bytes

A bytes calldata parameter containing encoded information about the transfer, including the TransferKey.

Last updated