DeBridgeGate

Contract for assets transfers. The user can transfer the asset to any of the approved chains. The admin manages the assets, fees and other important protocol parameters.

Variables

BPS_DENOMINATOR

  uint256 public constant BPS_DENOMINATOR;

Basis points or bps, set to 10 000 (equal to 1/10000). Used to express relative values (fees)

GOVMONITORING_ROLE

  bytes32 public constant GOVMONITORING_ROLE;

Role allowed to stop transfers

SUBMISSION_PREFIX

  uint256 public constant SUBMISSION_PREFIX;

prefix to calculation submissionId

DEPLOY_PREFIX

  uint256 public constant DEPLOY_PREFIX;

prefix to calculation deployId

deBridgeTokenDeployer

  address public deBridgeTokenDeployer;

Address of IDeBridgeTokenDeployer contract

signatureVerifier

  address public signatureVerifier;

Current signature verifier address to verify signatures.

excessConfirmations

  uint8 public excessConfirmations;

Minimal required confirmations in case sent amount is big, have no effect if less than SignatureVerifier.minConfirmations

flashFeeBps

  uint256 public flashFeeBps;

Flash loan fee in basis points (1/10000)

nonce

  uint256 public nonce;

outgoing submissions count

getDebridge

  mapping(bytes32 => struct IDeBridgeGate.DebridgeInfo) public getDebridge;

Maps debridgeId (see getDebridgeId) => bridge-specific information.

getDebridgeFeeInfo

  mapping(bytes32 => struct IDeBridgeGate.DebridgeFeeInfo) public getDebridgeFeeInfo;

Maps debridgeId (see getDebridgeId) => fee information

isSubmissionUsed

  mapping(bytes32 => bool) public isSubmissionUsed;

Returns whether the transfer with the submissionId was claimed. submissionId is generated in getSubmissionIdFrom

isBlockedSubmission

  mapping(bytes32 => bool) public isBlockedSubmission;

Returns whether the transfer with the submissionId is blocked.

getAmountThreshold

  mapping(bytes32 => uint256) public getAmountThreshold;

Maps debridgeId (see getDebridgeId) to threshold amount after which Math.max(excessConfirmations,SignatureVerifier.minConfirmations) is used instead of SignatureVerifier.minConfirmations

getChainToConfig

  mapping(uint256 => struct IDeBridgeGate.ChainSupportInfo) public getChainToConfig;

Whether the chain for the asset is supported to send

getChainFromConfig

  mapping(uint256 => struct IDeBridgeGate.ChainSupportInfo) public getChainFromConfig;

Whether the chain for the asset is supported to claim

feeDiscount

  mapping(address => struct IDeBridgeGate.DiscountInfo) public feeDiscount;

Fee discount for address

getNativeInfo

  mapping(address => struct IDeBridgeGate.TokenInfo) public getNativeInfo;

Returns native token info by wrapped token address

defiController

  address public defiController;

Return DefiController that can supply liquidity to staking strategies (AAVE, Compound, etc.)

feeProxy

  address public feeProxy;

Returns proxy to convert the collected fees and transfer to Ethereum network to treasury

callProxy

  address public callProxy;

Returns address of the proxy to execute user's calls.

weth

  contract IWETH public weth;

Returns contract for wrapped native token.

feeContractUpdater

  address public feeContractUpdater;

Contract address that can override globalFixedNativeFee

globalFixedNativeFee

  uint256 public globalFixedNativeFee;

Fallback fixed fee in native asset, used if a chain fixed fee is set to 0

globalTransferFeeBps

  uint16 public globalTransferFeeBps;

Fallback transfer fee in BPS, used if a chain transfer fee is set to 0

wethGate

  contract IWethGate public wethGate;

WethGate contract, that is used for weth withdraws affected by EIP1884

lockedClaim

  uint256 public lockedClaim;

Locker for claim method

Functions

initialize

  function initialize(
            uint8 _excessConfirmations,
            contract IWETH _weth
  ) public

Constructor that initializes the most important configurations.

Parameters:

NameTypeDescription

_excessConfirmations

uint8

minimal required confirmations in case of too many confirmations

_weth

contract IWETH

wrapped native token contract

send

  function send(
            address _tokenAddress,
            uint256 _amount,
            uint256 _chainIdTo,
            bytes _receiver,
            bytes _permit,
            bool _useAssetFee,
            uint32 _referralCode,
            bytes _autoParams
  ) external

This method is used for the transfer of assets from the native chain. It locks an asset in the smart contract in the native chain and enables minting of deAsset on the secondary chain.

Parameters:

NameTypeDescription

_tokenAddress

address

Asset identifier.

_amount

uint256

Amount to be transferred (note: the fee can be applied).

_chainIdTo

uint256

Chain id of the target chain.

_receiver

bytes

Receiver address.

_permit

bytes

deadline + signature for approving the spender by signature.

_useAssetFee

bool

use assets fee for pay protocol fix (work only for specials token)

_referralCode

uint32

Referral code

_autoParams

bytes

Auto params for external call in target network

claim

  function claim(
            bytes32 _debridgeId,
            uint256 _amount,
            uint256 _chainIdFrom,
            address _receiver,
            uint256 _nonce,
            bytes _signatures,
            bytes _autoParams
  ) external

Is used for transfers into the native chain to unlock the designated amount of asset from collateral and transfer it to the receiver.

Parameters:

NameTypeDescription

_debridgeId

bytes32

Asset identifier.

_amount

uint256

Amount of the transferred asset (note: the fee can be applied).

_chainIdFrom

uint256

Chain where submission was sent

_receiver

address

Receiver address.

_nonce

uint256

Submission id.

_signatures

bytes

Validators signatures to confirm

_autoParams

bytes

Auto params for external call

flash

  function flash(
            address _tokenAddress,
            address _receiver,
            uint256 _amount,
            bytes _data
  ) external

Get a flash loan, msg.sender must implement IFlashCallback

Parameters:

NameTypeDescription

_tokenAddress

address

An asset to loan

_receiver

address

Where funds should be sent

_amount

uint256

Amount to loan

_data

bytes

Data to pass to sender's flashCallback function

deployNewAsset

  function deployNewAsset(
            bytes _nativeTokenAddress,
            uint256 _nativeChainId,
            string _name,
            string _symbol,
            uint8 _decimals,
            bytes _signatures
  ) external

Deploy a deToken(DeBridgeTokenProxy) for an asset

Parameters:

NameTypeDescription

_nativeTokenAddress

bytes

A token address on a native chain

_nativeChainId

uint256

The token native chain's id

_name

string

The token's name

_symbol

string

The token's symbol

_decimals

uint8

The token's decimals

_signatures

bytes

Validators' signatures

autoUpdateFixedNativeFee

  function autoUpdateFixedNativeFee(
            uint256 _globalFixedNativeFee
  ) external

Update native fix fee. Called by our fee update contract

Parameters:

NameTypeDescription

_globalFixedNativeFee

uint256

new value

updateChainSupport

  function updateChainSupport(
            uint256[] _chainIds,
            struct IDeBridgeGate.ChainSupportInfo[] _chainSupportInfo,
            bool _isChainFrom
  ) external

Update asset's fees.

Parameters:

NameTypeDescription

_chainIds

uint256[]

Chain identifiers.

_chainSupportInfo

struct IDeBridgeGate.ChainSupportInfo[]

Chain support info.

_isChainFrom

bool

is true for editing getChainFromConfig.

updateGlobalFee

  function updateGlobalFee(
            uint256 _globalFixedNativeFee,
            uint16 _globalTransferFeeBps
  ) external

Update fallbacks for fixed fee in native asset and transfer fee

Parameters:

NameTypeDescription

_globalFixedNativeFee

uint256

Fallback fixed fee in native asset, used if a chain fixed fee is set to 0

_globalTransferFeeBps

uint16

Fallback transfer fee in BPS, used if a chain transfer fee is set to 0

updateAssetFixedFees

  function updateAssetFixedFees(
            bytes32 _debridgeId,
            uint256[] _supportedChainIds,
            uint256[] _assetFeesInfo
  ) external

Update asset's fees.

Parameters:

NameTypeDescription

_debridgeId

bytes32

Asset identifier.

_supportedChainIds

uint256[]

Chain identifiers.

_assetFeesInfo

uint256[]

Chain support info.

updateExcessConfirmations

  function updateExcessConfirmations(
            uint8 _excessConfirmations
  ) external

Update minimal amount of required signatures, must be > SignatureVerifier.minConfirmations to have an effect

Parameters:

NameTypeDescription

_excessConfirmations

uint8

Minimal amount of required signatures

setChainSupport

  function setChainSupport(
            uint256 _chainId,
            bool _isSupported,
            bool _isChainFrom
  ) external

Set support for the chains where the token can be transferred.

Parameters:

NameTypeDescription

_chainId

uint256

Chain id where tokens are sent.

_isSupported

bool

Whether the token is transferable to the other chain.

_isChainFrom

bool

is true for editing getChainFromConfig.

setCallProxy

  function setCallProxy(
            address _callProxy
  ) external

Set address of the call proxy.

Parameters:

NameTypeDescription

_callProxy

address

Address of the proxy that executes external calls.

updateAsset

  function updateAsset(
            bytes32 _debridgeId,
            uint256 _maxAmount,
            uint16 _minReservesBps,
            uint256 _amountThreshold
  ) external

Update specific asset's bridge parameters.

Parameters:

NameTypeDescription

_debridgeId

bytes32

Asset identifier.

_maxAmount

uint256

Maximum amount of current chain token to be wrapped.

_minReservesBps

uint16

Minimal reserve ration in BPS.

_amountThreshold

uint256

Threshold amount after which Math.max(excessConfirmations,SignatureVerifier.minConfirmations) is used instead of SignatureVerifier.minConfirmations

setSignatureVerifier

  function setSignatureVerifier(
            address _verifier
  ) external

Set signature verifier address.

Parameters:

NameTypeDescription

_verifier

address

Signature verifier address.

setDeBridgeTokenDeployer

  function setDeBridgeTokenDeployer(
            address _deBridgeTokenDeployer
  ) external

Set asset deployer address.

Parameters:

NameTypeDescription

_deBridgeTokenDeployer

address

Asset deployer address.

setDefiController

  function setDefiController(
            address _defiController
  ) external

Set defi controller.

Parameters:

NameTypeDescription

_defiController

address

Defi controller address.

setFeeContractUpdater

  function setFeeContractUpdater(
            address _value
  ) external

Set fee contract updater, that can update fix native fee

Parameters:

NameTypeDescription

_value

address

new contract address.

setWethGate

  function setWethGate(
            contract IWethGate _wethGate
  ) external

Set wethGate contract, that uses for weth withdraws affected by EIP1884

Parameters:

NameTypeDescription

_wethGate

contract IWethGate

address of new wethGate contract.

pause

  function pause(
  ) external

Stop all transfers.

unpause

  function unpause(
  ) external

Allow transfers.

withdrawFee

  function withdrawFee(
            bytes32 _debridgeId
  ) external

Withdraw collected fees to feeProxy

Parameters:

NameTypeDescription

_debridgeId

bytes32

Asset identifier.

requestReserves

  function requestReserves(
            address _tokenAddress,
            uint256 _amount
  ) external

Request the assets to be used in DeFi protocol.

Parameters:

NameTypeDescription

_tokenAddress

address

Asset address.

_amount

uint256

Amount of tokens to request.

returnReserves

  function returnReserves(
            address _tokenAddress,
            uint256 _amount
  ) external

Return the assets that were used in DeFi protocol.

Parameters:

NameTypeDescription

_tokenAddress

address

Asset address.

_amount

uint256

Amount of tokens to claim.

setFeeProxy

  function setFeeProxy(
            address _feeProxy
  ) external

Set fee converter proxy.

Parameters:

NameTypeDescription

_feeProxy

address

Fee proxy address.

blockSubmission

  function blockSubmission(
            bytes32[] _submissionIds,
            bool isBlocked
  ) external

Block or unblock a list of submissions

Parameters:

NameTypeDescription

_submissionIds

bytes32[]

Ids of submissions to block/unblock

isBlocked

bool

True to block, false to unblock

updateFlashFee

  function updateFlashFee(
            uint256 _flashFeeBps
  ) external

Update flash fees.

Parameters:

NameTypeDescription

_flashFeeBps

uint256

new fee in BPS

updateFeeDiscount

  function updateFeeDiscount(
            address _address,
            uint16 _discountFixBps,
            uint16 _discountTransferBps
  ) external

Update discount.

Parameters:

NameTypeDescription

_address

address

customer address

_discountFixBps

uint16

fix discount in BPS

_discountTransferBps

uint16

transfer % discount in BPS

receive

  function receive(
  ) external

_checkConfirmations

  function _checkConfirmations(
            bytes32 _submissionId,
            bytes32 _debridgeId,
            uint256 _amount,
            bytes _signatures
  ) internal

_addAsset

  function _addAsset(
            bytes32 _debridgeId,
            address _tokenAddress,
            bytes _nativeAddress,
            uint256 _nativeChainId
  ) internal

Add support for the asset.

Parameters:

NameTypeDescription

_debridgeId

bytes32

Asset identifier.

_tokenAddress

address

Address of the asset on the current chain.

_nativeAddress

bytes

Address of the asset on the native chain.

_nativeChainId

uint256

Native chain id.

_send

  function _send(
            bytes _amount,
            address _chainIdTo,
            uint256 _permit
  ) internal returns (uint256 amountAfterFee, bytes32 debridgeId, struct IDeBridgeGate.FeeParams feeParams)

Locks asset on the chain and enables minting on the other chain.

Parameters:

NameTypeDescription

_amount

bytes

Amount to be transferred (note: the fee can be applied).

_chainIdTo

address

Chain id of the target chain.

_permit

uint256

deadline + signature for approving the spender by signature.

_publishSubmission

  function _publishSubmission(
            bytes32 _debridgeId,
            uint256 _chainIdTo,
            uint256 _amount,
            bytes _receiver,
            struct IDeBridgeGate.FeeParams feeParams,
            uint32 _referralCode,
            struct IDeBridgeGate.SubmissionAutoParamsTo autoParams,
            bool hasAutoParams
  ) internal

_applyDiscount

  function _applyDiscount(
            uint256 amount,
            uint16 discountBps
  ) internal returns (uint256)

_validateToken

  function _validateToken(
            address _token
  ) internal

_claim

  function _claim(
            bytes32 _debridgeId,
            bytes32 _receiver,
            address _amount
  ) internal returns (bool isNativeToken)

Unlock the asset on the current chain and transfer to receiver.

Parameters:

NameTypeDescription

_debridgeId

bytes32

Asset identifier.

_receiver

bytes32

Receiver address.

_amount

address

Amount of the transfered asset (note: the fee can be applyed).

_mintOrTransfer

  function _mintOrTransfer(
            address _token,
            address _receiver,
            uint256 _amount,
            bool isNativeToken
  ) internal

_safeTransferETH

  function _safeTransferETH(
            address to,
            uint256 value
  ) internal

_withdrawWeth

  function _withdrawWeth(
            address _receiver,
            uint256 _amount
  ) internal

_normalizeTokenAmount

  function _normalizeTokenAmount(
            address _token,
            uint256 _amount
  ) internal returns (uint256)

getDefiAvaliableReserves

  function getDefiAvaliableReserves(
            address _tokenAddress
  ) external returns (uint256)

Get reserves of a token available to use in defi

Parameters:

NameTypeDescription

_tokenAddress

address

Token address

getDebridgeId

  function getDebridgeId(
            uint256 _chainId,
            address _tokenAddress
  ) public returns (bytes32)

Calculates asset identifier.

Parameters:

NameTypeDescription

_chainId

uint256

Current chain id.

_tokenAddress

address

Address of the asset on the other chain.

getbDebridgeId

  function getbDebridgeId(
            uint256 _chainId,
            bytes _tokenAddress
  ) public returns (bytes32)

Calculates asset identifier.

Parameters:

NameTypeDescription

_chainId

uint256

Current chain id.

_tokenAddress

bytes

Address of the asset on the other chain.

getDebridgeChainAssetFixedFee

  function getDebridgeChainAssetFixedFee(
            bytes32 _debridgeId,
            uint256 _chainId
  ) external returns (uint256)

Returns asset fixed fee value for specified debridge and chainId.

Parameters:

NameTypeDescription

_debridgeId

bytes32

Asset identifier.

_chainId

uint256

Chain id.

getSubmissionIdFrom

  function getSubmissionIdFrom(
            bytes32 _debridgeId,
            uint256 _chainIdFrom,
            uint256 _amount,
            address _receiver,
            uint256 _nonce,
            struct IDeBridgeGate.SubmissionAutoParamsFrom _autoParams,
            bool _hasAutoParams,
            address _sender
  ) public returns (bytes32)

Calculate submission id for auto claimable transfer.

Parameters:

NameTypeDescription

_debridgeId

bytes32

Asset identifier.

_chainIdFrom

uint256

Chain identifier of the chain where tokens are sent from.

_amount

uint256

Amount of the transferred asset (note: the fee can be applied).

_receiver

address

Receiver address.

_nonce

uint256

Submission id.

_autoParams

struct IDeBridgeGate.SubmissionAutoParamsFrom

Auto params for external call

_hasAutoParams

bool

True if auto params are provided

_sender

address

Address that will call claim

getDeployId

  function getDeployId(
            bytes32 _debridgeId,
            string _name,
            string _symbol,
            uint8 _decimals
  ) public returns (bytes32)

Calculates asset identifier for deployment.

Parameters:

NameTypeDescription

_debridgeId

bytes32

Id of an asset, see getDebridgeId.

_name

string

Asset's name.

_symbol

string

Asset's symbol.

_decimals

uint8

Asset's decimals.

getChainId

  function getChainId(
  ) public returns (uint256 cid)

Get current chain id

version

  function version(
  ) external returns (uint256)

Get this contract's version

Last updated