diff --git a/packages/boba/gateway/src/actions/balanceAction.js b/packages/boba/gateway/src/actions/balanceAction.js
index 76a76d8522..cd0a0c04f3 100644
--- a/packages/boba/gateway/src/actions/balanceAction.js
+++ b/packages/boba/gateway/src/actions/balanceAction.js
@@ -62,6 +62,10 @@ export function fetchFastDepositCost(address) {
return createAction('FETCH/FASTDEPOSIT/COST', () => networkService.getFastDepositCost(address))
}
+export function fetchAltL1DepositFee() {
+ return createAction('FETCH/ALTL1DEPOSIT/COST', () => networkService.getAltL1DepositFee())
+}
+
export function fetchFastDepositBatchCost(tokenList) {
return createAction('FETCH/FASTDEPOSIT/BATCH/COST', () => networkService.getFastDepositBatchCost(tokenList))
}
diff --git a/packages/boba/gateway/src/actions/networkAction.js b/packages/boba/gateway/src/actions/networkAction.js
index c0b868dc68..e73828ca5f 100644
--- a/packages/boba/gateway/src/actions/networkAction.js
+++ b/packages/boba/gateway/src/actions/networkAction.js
@@ -100,6 +100,11 @@ export function depositErc20(value, currency, currencyL2) {
)
}
+//DEPOSIT ERC20 to Alt L1 bridge
+export function depositErc20ToL1(payload) {
+ return createAction('DEPOSIT_ALTL1/CREATE', () => networkService.depositErc20ToL1(payload))
+}
+
//FARM
export function farmL1(value_Wei_String, currencyAddress) {
return createAction('FARM/CREATE', () =>
@@ -118,7 +123,7 @@ export function getReward(currencyAddress, value_Wei_String, L1orL2Pool) {
}
export function withdrawLiquidity(currencyAddress, value_Wei_String, L1orL2Pool) {
- console.log("Withdrawing ERC20 Liquidity")
+
return createAction('FARM/WITHDRAW', () =>
networkService.withdrawLiquidity(currencyAddress, value_Wei_String, L1orL2Pool)
)
diff --git a/packages/boba/gateway/src/components/listToken/listToken.js b/packages/boba/gateway/src/components/listToken/listToken.js
index 3d6ea28e8c..7691e7b4fc 100644
--- a/packages/boba/gateway/src/components/listToken/listToken.js
+++ b/packages/boba/gateway/src/components/listToken/listToken.js
@@ -18,6 +18,7 @@ import { selectLookupPrice } from 'selectors/lookupSelector'
import { amountToUsd, logAmount } from 'util/amountConvert'
import { getCoinImage } from 'util/coinImage'
import * as S from './listToken.styles'
+import { BRIDGE_TYPE } from 'util/constant'
function ListToken({
token,
@@ -125,7 +126,7 @@ function ListToken({
{enabled && chain === 'L1' &&
<>
-
+ {token.symbol === 'BOBA' &&
+
- >
+ }
+ >
}
{enabled && chain === 'L2' &&
@@ -368,13 +380,14 @@ function ListToken({
{enabled && chain === 'L1' &&
<>
+ {token.symbol === 'BOBA' &&
+
+
+ }
>
}
{enabled && chain === 'L2' &&
diff --git a/packages/boba/gateway/src/components/select/Select.js b/packages/boba/gateway/src/components/select/Select.js
index 8bb0775de8..89449fad1f 100644
--- a/packages/boba/gateway/src/components/select/Select.js
+++ b/packages/boba/gateway/src/components/select/Select.js
@@ -32,6 +32,16 @@ function Select ({
const selected = options.find(i => i.value === value);
function renderOption (i) {
+ if (i.image && i.title) {
+ return (
+ <>
+ {i.image}
+
+ {i.title}
+
+ >
+ )
+ }
if (i.title && i.subTitle) {
return `${i.title} - ${i.subTitle}`;
}
diff --git a/packages/boba/gateway/src/components/transaction/Transaction.js b/packages/boba/gateway/src/components/transaction/Transaction.js
index 4889df6594..dc50c1d9f4 100644
--- a/packages/boba/gateway/src/components/transaction/Transaction.js
+++ b/packages/boba/gateway/src/components/transaction/Transaction.js
@@ -43,6 +43,9 @@ function Transaction({
oriHash,
amountTx,
completion = '',
+ tx_ref = null,
+ eventType,
+ toChain
}) {
const [dropDownBox, setDropDownBox] = useState(false)
@@ -133,10 +136,14 @@ function Transaction({
{completion !== '' &&
{completion}
}
+ {toChain &&
+ {toChain}
+ }
{oriChain} Hash:
{typeTX}
+ {eventType ?
+ {eventType}
+ : null}
{amountTx ?
{dispatch(setActiveHistoryTab(tab))}}
activeTab={activeTab}
- tabs={['All', 'Bridge to L2', 'Bridge to L1', 'Pending']}
+ tabs={['All', 'Ethereum to Boba Ethereum L2', 'Boba Ethereum L2 to Ethereum', 'Bridge between L1s', 'Pending']}
/>
{activeTab === 'All' && (
@@ -148,20 +149,27 @@ function History() {
/>
)}
- {activeTab === 'Bridge to L2' &&
+ {activeTab === 'Ethereum to Boba Ethereum L2' &&
}
- {activeTab === 'Bridge to L1' &&
+ {activeTab === 'Boba Ethereum L2 to Ethereum' &&
}
+ {activeTab === 'Bridge between L1s' &&
+
+ }
+
{activeTab === 'Pending' &&
{
+ return i.hash.includes(searchHistory) && i.to !== null && i.altL1
+ })
+
+ const renderTransfers = _transfers.map((i, index) => {
+
+ const chain = (i.chain === 'L0pending') ? 'L0' : i.chain
+
+ let timeLabel = moment.unix(i.timeStamp).format('lll')
+
+ let amountTx = `${logAmount(i.amount, 18, 3)} BOBA`;
+
+ return (
+
+ )
+ })
+
+ const startingIndex = page === 1 ? 0 : ((page - 1) * PER_PAGE)
+ const endingIndex = page * PER_PAGE
+ const paginatedExits = renderTransfers.slice(startingIndex, endingIndex)
+
+ let totalNumberOfPages = Math.ceil(renderTransfers.length / PER_PAGE)
+
+ //if totalNumberOfPages === 0, set to one so we don't get the strange "Page 1 of 0" display
+ if (totalNumberOfPages === 0) totalNumberOfPages = 1
+
+ return (
+
+ setPage(page + 1)}
+ onClickBack={() => setPage(page - 1)}
+ />
+
+
+
+
+ {!renderTransfers.length && !loading && (
+ Scanning for exits...
+ )}
+ {!renderTransfers.length && loading && (
+ Loading...
+ )}
+ {React.Children.toArray(paginatedExits)}
+
+
+
+
+ );
+}
+
+export default React.memo(TX_Transfers)
diff --git a/packages/boba/gateway/src/containers/home/Home.js b/packages/boba/gateway/src/containers/home/Home.js
index 4b53cf7d61..29b9742e71 100644
--- a/packages/boba/gateway/src/containers/home/Home.js
+++ b/packages/boba/gateway/src/containers/home/Home.js
@@ -59,7 +59,7 @@ import {
import {
selectBaseEnabled,
selectAccountEnabled,
- selectNetwork,
+ selectNetwork
} from 'selectors/setupSelector'
import { selectAlert, selectError } from 'selectors/uiSelector'
import { selectModalState } from 'selectors/uiSelector'
diff --git a/packages/boba/gateway/src/containers/modals/deposit/DepositModal.js b/packages/boba/gateway/src/containers/modals/deposit/DepositModal.js
index 29d365e16b..4faf6d4033 100644
--- a/packages/boba/gateway/src/containers/modals/deposit/DepositModal.js
+++ b/packages/boba/gateway/src/containers/modals/deposit/DepositModal.js
@@ -21,7 +21,9 @@ import { closeModal } from 'actions/uiAction'
import InputStep from './steps/InputStep'
import InputStepFast from './steps/InputStepFast'
+import InputStepMultiChain from './steps/InputStepMultiChain'
import { fetchTransactions } from 'actions/networkAction'
+import { BRIDGE_TYPE } from 'util/constant'
function DepositModal({ open, token, fast }) {
@@ -34,11 +36,22 @@ function DepositModal({ open, token, fast }) {
return (
- {!!fast ? (
+
+ {
+ BRIDGE_TYPE.FAST_BRIDGE === fast ? : null
+ }
+ {
+ BRIDGE_TYPE.CLASSIC_BRIDGE === fast ? : null
+ }
+ {
+ BRIDGE_TYPE.MULTI_CHAIN_BRIDGE === fast ? : null
+ }
+
+ {/* {!!fast ? (
) : (
- )}
+ )} */}
)
}
diff --git a/packages/boba/gateway/src/containers/modals/deposit/steps/InputStep.js b/packages/boba/gateway/src/containers/modals/deposit/steps/InputStep.js
index 7689cf76b8..e745bae1b9 100644
--- a/packages/boba/gateway/src/containers/modals/deposit/steps/InputStep.js
+++ b/packages/boba/gateway/src/containers/modals/deposit/steps/InputStep.js
@@ -66,7 +66,7 @@ function InputStep({ handleClose, token, isBridge, openTokenPicker }) {
)
}
if (res) {
- dispatch(setActiveHistoryTab('Bridge to L2'))
+ dispatch(setActiveHistoryTab('Ethereum to Boba Ethereum L2'))
handleClose()
}
diff --git a/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepBatch.js b/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepBatch.js
index 49a1c54fa9..2416d49b25 100644
--- a/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepBatch.js
+++ b/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepBatch.js
@@ -101,7 +101,7 @@ function InputStepBatch({ isBridge, handleClose }) {
)
if (res) {
- dispatch(setActiveHistoryTab('Bridge to L2'))
+ dispatch(setActiveHistoryTab('Boba Ethereum L2 to Ethereum'))
dispatch(
openAlert(
`Your funds were bridged to the L1LP in batch.`
diff --git a/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepFast.js b/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepFast.js
index 5079d6fdb7..9565490e57 100644
--- a/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepFast.js
+++ b/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepFast.js
@@ -159,7 +159,7 @@ function InputStepFast({ handleClose, token, isBridge, openTokenPicker }) {
res = await dispatch(depositL1LP(token.address, value_Wei_String))
if (res) {
- dispatch(setActiveHistoryTab('Bridge to L2'))
+ dispatch(setActiveHistoryTab('Ethereum to Boba Ethereum L2'))
dispatch(
openAlert(
`ETH was bridged. You will receive approximately
@@ -195,7 +195,7 @@ function InputStepFast({ handleClose, token, isBridge, openTokenPicker }) {
)
if (res) {
- dispatch(setActiveHistoryTab('Bridge to L2'))
+ dispatch(setActiveHistoryTab('Ethereum to Boba Ethereum L2'))
dispatch(
openAlert(
`${token.symbol} was bridged to the L1LP. You will receive approximately
diff --git a/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepMultiChain.js b/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepMultiChain.js
new file mode 100644
index 0000000000..457df10f73
--- /dev/null
+++ b/packages/boba/gateway/src/containers/modals/deposit/steps/InputStepMultiChain.js
@@ -0,0 +1,236 @@
+
+import React, { useState, useEffect } from 'react'
+import { useDispatch, useSelector } from 'react-redux'
+
+import { depositErc20ToL1 } from 'actions/networkAction'
+import { openAlert, setActiveHistoryTab } from 'actions/uiAction'
+
+import Button from 'components/button/Button'
+import Input from 'components/input/Input'
+
+import { selectLoading } from 'selectors/loadingSelector'
+import { selectSignatureStatus_depositTRAD } from 'selectors/signatureSelector'
+import {
+ amountToUsd, logAmount,
+ // toWei_String
+} from 'util/amountConvert'
+import { getCoinImage } from 'util/coinImage'
+
+import { selectLookupPrice } from 'selectors/lookupSelector'
+import { Box, Typography, useMediaQuery } from '@mui/material'
+import { useTheme } from '@emotion/react'
+import { WrapperActionsModal } from 'components/modal/Modal.styles'
+
+import BN from 'bignumber.js'
+import Select from 'components/select/Select'
+import { selectAltL1DepositCost } from 'selectors/balanceSelector'
+import { fetchAltL1DepositFee } from 'actions/balanceAction'
+
+import networkService from 'services/networkService'
+
+/**
+ * @NOTE
+ * Cross Chain Bridging to alt L1 is only supported for BOBA as of now!
+ *
+ */
+
+function InputStepMultiChain({ handleClose, token, isBridge, openTokenPicker }) {
+
+ const getImageComponent = (symbol) => {
+ return
+ }
+
+ const options = [
+ { value: 'BNB', label: 'BNB', title: 'BNB', image: getImageComponent("BNB") },
+ { value: 'Avalanche', label: 'Avalanche', title: 'Avalanche', image: getImageComponent('AVAX') },
+ { value: 'Fantom', label: 'Fantom', title: 'Fantom', image: getImageComponent('FTM') },
+ { value: 'Moonbeam', label: 'Moonbeam', title: 'Moonbeam', image: getImageComponent('GLMR') },
+ ].filter(i => networkService.supportedAltL1Chains.includes(i.value))
+
+ const dispatch = useDispatch()
+
+ const [ value, setValue ] = useState('')
+ const [ altL1Bridge, setAltL1Bridge ] = useState('')
+
+ const [ validValue, setValidValue ] = useState(false)
+ const depositLoading = useSelector(selectLoading([ 'DEPOSIT_ALTL1/CREATE' ]))
+
+ const signatureStatus = useSelector(selectSignatureStatus_depositTRAD)
+ const lookupPrice = useSelector(selectLookupPrice)
+ const depositFees = useSelector(selectAltL1DepositCost)
+
+ const maxValue = logAmount(token.balance, token.decimals)
+
+ function setAmount(value) {
+
+ const tooSmall = new BN(value).lte(new BN(0.0))
+ const tooBig = new BN(value).gt(new BN(maxValue))
+
+ if (tooSmall || tooBig) {
+ setValidValue(false)
+ } else {
+ setValidValue(true)
+ }
+
+ setValue(value)
+ }
+
+ async function doDeposit() {
+
+ const res = await dispatch(depositErc20ToL1({
+ value: value,
+ type: altL1Bridge
+ }))
+
+ if (res) {
+ dispatch(openAlert(`Successfully bridge ${token.symbol} to alt L1 ${altL1Bridge}!`))
+ dispatch(setActiveHistoryTab('Bridge between L1s'))
+ handleClose()
+ } else {
+ console.log(`🤦 opps something wrong!`)
+ handleClose()
+ }
+ }
+
+ const theme = useTheme()
+ const isMobile = useMediaQuery(theme.breakpoints.down('md'))
+
+ useEffect(() => {
+ dispatch(fetchAltL1DepositFee())
+ },[dispatch])
+
+ useEffect(() => {
+ if (signatureStatus && depositLoading) {
+ //we are all set - can close the window
+ //transaction has been sent and signed
+ handleClose()
+ }
+ }, [ signatureStatus, depositLoading, handleClose ])
+
+ let buttonLabel_1 = 'Cancel'
+ if (depositLoading) buttonLabel_1 = 'Close'
+
+ let convertToUSD = false
+
+ if (Object.keys(lookupPrice) &&
+ !!value &&
+ validValue &&
+ !!amountToUsd(value, lookupPrice, token)
+ ) {
+ convertToUSD = true
+ }
+
+ if (Number(logAmount(token.balance, token.decimals)) === 0) {
+ //no token in this account
+ return (
+
+
+ Sorry, nothing to deposit - no {token.symbol} in this wallet
+
+
+ )
+ }
+
+ const onBridgeChange = (e) => {
+ setAltL1Bridge(e.target.value)
+ }
+
+ const customStyles = {
+ option: (provided, state) => ({
+ ...provided,
+ color: state.isSelected ? '#282828' : '#909090',
+ }),
+ }
+
+ return (
+ <>
+
+
+ Bridge {token && token.symbol ? token.symbol : ''} to Alt L1s
+
+
+
+
+
+
+ {
+ setAmount(i.target.value)
+ // setValue_Wei_String(toWei_String(i.target.value, token.decimals))
+ }}
+ onUseMax={(i) => {//they want to use the maximum
+ setAmount(maxValue) //so the input value updates for the user - just for display purposes
+ // setValue_Wei_String(token.balance.toString()) //this is the one that matters
+ }}
+ allowUseAll={true}
+ unit={token.symbol}
+ maxValue={maxValue}
+ variant="standard"
+ newStyle
+ isBridge={isBridge}
+ openTokenPicker={openTokenPicker}
+ />
+
+
+ {!!altL1Bridge && depositFees? <>
+
+ Estimated fee for bridging {value} {token.symbol} is {depositFees[altL1Bridge].fee} ETH
+
+ > : null}
+
+ {!!convertToUSD && (
+
+ {`Amount in USD ${amountToUsd(value, lookupPrice, token).toFixed(2)}`}
+
+ )}
+
+
+
+
+
+
+ >
+ )
+}
+
+export default React.memo(InputStepMultiChain)
diff --git a/packages/boba/gateway/src/deployment/contracts/crosschain/AltL1Bridge.json b/packages/boba/gateway/src/deployment/contracts/crosschain/AltL1Bridge.json
new file mode 100644
index 0000000000..2513ad08c2
--- /dev/null
+++ b/packages/boba/gateway/src/deployment/contracts/crosschain/AltL1Bridge.json
@@ -0,0 +1,755 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "AltL1Bridge",
+ "sourceName": "contracts/lzTokenBridge/AltL1Bridge.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_l2Token",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "DepositFinalized",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint64",
+ "name": "_nonce",
+ "type": "uint64"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "_payload",
+ "type": "bytes"
+ }
+ ],
+ "name": "MessageFailed",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ }
+ ],
+ "name": "SetTrustedRemote",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_l2Token",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "WithdrawalInitiated",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "FUNCTION_TYPE_SEND",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "NO_EXTRA_GAS",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "dstChainId",
+ "outputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint64",
+ "name": "",
+ "type": "uint64"
+ }
+ ],
+ "name": "failedMessages",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ }
+ ],
+ "name": "forceResumeReceive",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_version",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_chainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_configType",
+ "type": "uint256"
+ }
+ ],
+ "name": "getConfig",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_lzEndpoint",
+ "type": "address"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_dstChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "address",
+ "name": "_ethBridgeAddress",
+ "type": "address"
+ }
+ ],
+ "name": "initialize",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ }
+ ],
+ "name": "isTrustedRemote",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "lzEndpoint",
+ "outputs": [
+ {
+ "internalType": "contract ILayerZeroEndpoint",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint64",
+ "name": "_nonce",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_payload",
+ "type": "bytes"
+ }
+ ],
+ "name": "lzReceive",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "maxTransferAmountPerDay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "minDstGasLookup",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint64",
+ "name": "_nonce",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_payload",
+ "type": "bytes"
+ }
+ ],
+ "name": "nonblockingLzReceive",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint64",
+ "name": "_nonce",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_payload",
+ "type": "bytes"
+ }
+ ],
+ "name": "retryMessage",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_version",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_chainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_configType",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_config",
+ "type": "bytes"
+ }
+ ],
+ "name": "setConfig",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_maxTransferAmountPerDay",
+ "type": "uint256"
+ }
+ ],
+ "name": "setMaxTransferAmountPerDay",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_dstChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_type",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_dstGasAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "setMinDstGasLookup",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_version",
+ "type": "uint16"
+ }
+ ],
+ "name": "setReceiveVersion",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_version",
+ "type": "uint16"
+ }
+ ],
+ "name": "setSendVersion",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ }
+ ],
+ "name": "setTrustedRemote",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bool",
+ "name": "_useCustomAdapterParams",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_dstGasAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "setUseCustomAdapterParams",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "transferTimestampCheckPoint",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "transferredAmount",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ }
+ ],
+ "name": "trustedRemoteLookup",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "useCustomAdapterParams",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_l2Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_zroPaymentAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_adapterParams",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "withdraw",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_l2Token",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_zroPaymentAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_adapterParams",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "withdrawTo",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x608060405234801561001057600080fd5b506132b0806100206000396000f3fe6080604052600436106101cc5760003560e01c80637533d788116100f7578063c8ed191011610095578063ed629c5c11610064578063ed629c5c14610578578063ede75eca14610598578063f2fde38b146105ab578063f5ecbdbc146105cb57600080fd5b8063c8ed19101461050f578063cbed8b9c14610525578063d1deba1f14610545578063eb8d72b71461055857600080fd5b8063901eec16116100d1578063901eec16146104975780639b57db5f146104ad578063af3fb21c146104cd578063b353aaa7146104e257600080fd5b80637533d788146103fe5780637e0ced091461042b5780638da5cb5b1461044b57600080fd5b806342d65a8d1161016f57806366ad5c8a1161013e57806366ad5c8a146103965780636fb2be6d146103b6578063708c0db9146103c9578063715018a6146103e957600080fd5b806342d65a8d146102fc578063447705151461031c578063512afd89146103315780635b8c41e61461034757600080fd5b806310ddb137116101ab57806310ddb1371461025e57806330c593f71461027e5780633496a68e146102ac5780633d8b38f6146102cc57600080fd5b80621d3567146101d157806307810867146101f357806307e0db171461023e575b600080fd5b3480156101dd57600080fd5b506101f16101ec3660046128a7565b6105eb565b005b3480156101ff57600080fd5b5061022b61020e36600461292c565b606760209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561024a57600080fd5b506101f1610259366004612956565b6107ae565b34801561026a57600080fd5b506101f1610279366004612956565b610899565b34801561028a57600080fd5b5060cd546102999061ffff1681565b60405161ffff9091168152602001610235565b3480156102b857600080fd5b506101f16102c7366004612971565b61095a565b3480156102d857600080fd5b506102ec6102e73660046129d3565b6109c6565b6040519015158152602001610235565b34801561030857600080fd5b506101f16103173660046129d3565b610a92565b34801561032857600080fd5b5061022b600081565b34801561033d57600080fd5b5061022b60ce5481565b34801561035357600080fd5b5061022b610362366004612a26565b609a602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b3480156103a257600080fd5b506101f16103b13660046128a7565b610b8a565b6101f16103c4366004612aa6565b610c11565b3480156103d557600080fd5b506101f16103e4366004612b3f565b610c29565b3480156103f557600080fd5b506101f1610e0b565b34801561040a57600080fd5b5061041e610419366004612956565b610e7e565b6040516102359190612be0565b34801561043757600080fd5b506101f1610446366004612c01565b610f18565b34801561045757600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610235565b3480156104a357600080fd5b5061022b60d05481565b3480156104b957600080fd5b506101f16104c8366004612c1f565b610fcc565b3480156104d957600080fd5b5061022b600181565b3480156104ee57600080fd5b506065546104729073ffffffffffffffffffffffffffffffffffffffff1681565b34801561051b57600080fd5b5061022b60cf5481565b34801561053157600080fd5b506101f1610540366004612c52565b6110a4565b6101f16105533660046128a7565b6111a2565b34801561056457600080fd5b506101f1610573366004612cc1565b61132c565b34801561058457600080fd5b5060cd546102ec9062010000900460ff1681565b6101f16105a6366004612d0f565b6113f5565b3480156105b757600080fd5b506101f16105c6366004612dbb565b611405565b3480156105d757600080fd5b5061041e6105e6366004612ddf565b611501565b60655473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461066d5760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff84166000908152606660205260408120805461068b90612e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546106b790612e2c565b80156107045780601f106106d957610100808354040283529160200191610704565b820191906000526020600020905b8154815290600101906020018083116106e757829003601f168201915b5050505050905080518451148015610729575080805190602001208480519060200120145b61079b5760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610664565b6107a7858585856115c9565b5050505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b6065546040517f07e0db1700000000000000000000000000000000000000000000000000000000815261ffff8316600482015273ffffffffffffffffffffffffffffffffffffffff909116906307e0db17906024015b600060405180830381600087803b15801561088557600080fd5b505af11580156107a7573d6000803e3d6000fd5b60335473ffffffffffffffffffffffffffffffffffffffff1633146109005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b6065546040517f10ddb13700000000000000000000000000000000000000000000000000000000815261ffff8316600482015273ffffffffffffffffffffffffffffffffffffffff909116906310ddb1379060240161086b565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109c15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b60ce55565b61ffff8316600090815260666020526040812080548291906109e790612e2c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1390612e2c565b8015610a605780601f10610a3557610100808354040283529160200191610a60565b820191906000526020600020905b815481529060010190602001808311610a4357829003601f168201915b505050505090508383604051610a77929190612e80565b60405180910390208180519060200120149150509392505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610af95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b6065546040517f42d65a8d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906342d65a8d90610b5390869086908690600401612ebb565b600060405180830381600087803b158015610b6d57600080fd5b505af1158015610b81573d6000803e3d6000fd5b50505050505050565b333014610bff5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d75737420626560448201527f204c7a41707000000000000000000000000000000000000000000000000000006064820152608401610664565b610c0b848484846116d4565b50505050565b610c21863333888888888861198c565b505050505050565b600054610100900460ff1680610c42575060005460ff16155b610cb45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff16158015610cd6576000805461ffff19166101011790555b73ffffffffffffffffffffffffffffffffffffffff8416610d5f5760405162461bcd60e51b815260206004820152602260248201527f6c7a20656e64706f696e742063616e6e6f74206265207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610664565b610d6884611cfd565b60cd805461ffff191661ffff85161790556040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b166020820152610dc590849060340160405160208183030381529060405261132c565b4260d0556969e10de76676d080000060ce558015610c0b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610e725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b610e7c6000611de5565b565b60666020526000908152604090208054610e9790612e2c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec390612e2c565b8015610f105780601f10610ee557610100808354040283529160200191610f10565b820191906000526020600020905b815481529060010190602001808311610ef357829003601f168201915b505050505081565b60335473ffffffffffffffffffffffffffffffffffffffff163314610f7f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b60cd805483151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff82168117909255610fc89161ffff908116911617600183610fcc565b5050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110335760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b600081116110835760405162461bcd60e51b815260206004820152601c60248201527f4c7a4170703a20696e76616c6964205f647374476173416d6f756e74000000006044820152606401610664565b61ffff90921660009081526067602090815260408083209383529290522055565b60335473ffffffffffffffffffffffffffffffffffffffff16331461110b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b6065546040517fcbed8b9c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063cbed8b9c906111699088908890889088908890600401612ed9565b600060405180830381600087803b15801561118357600080fd5b505af1158015611197573d6000803e3d6000fd5b505050505050505050565b61ffff84166000908152609a602052604080822090516111c3908690612f12565b908152604080516020928190038301902067ffffffffffffffff86166000908152925290205490508061125e5760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201527f61676500000000000000000000000000000000000000000000000000000000006064820152608401610664565b8151602083012081146112d95760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f6160448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610664565b61ffff85166000908152609a602052604080822090516112fa908790612f12565b908152604080516020928190038301902067ffffffffffffffff8716600090815292529020556107a7858585856116d4565b60335473ffffffffffffffffffffffffffffffffffffffff1633146113935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b61ffff8216600090815260666020908152604090912082516113b792840190612701565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab82826040516113e9929190612f2e565b60405180910390a15050565b610b81873388888888888861198c565b60335473ffffffffffffffffffffffffffffffffffffffff16331461146c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b73ffffffffffffffffffffffffffffffffffffffff81166114f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610664565b6114fe81611de5565b50565b6065546040517ff5ecbdbc00000000000000000000000000000000000000000000000000000000815261ffff8087166004830152851660248201523060448201526064810183905260609173ffffffffffffffffffffffffffffffffffffffff169063f5ecbdbc9060840160006040518083038186803b15801561158457600080fd5b505afa158015611598573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115c09190810190612f98565b95945050505050565b6040517f66ad5c8a00000000000000000000000000000000000000000000000000000000815230906366ad5c8a9061160b908790879087908790600401612fcd565b600060405180830381600087803b15801561162557600080fd5b505af1925050508015611636575060015b610c0b578080519060200120609a60008661ffff1661ffff1681526020019081526020016000208460405161166b9190612f12565b90815260408051918290036020908101832067ffffffffffffffff87166000908152915220919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d906116c7908690869086908690612fcd565b60405180910390a1610c0b565b60cd5461ffff85811691161461172c5760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420736f7572636520636861696e4964000000000000000000006044820152606401610664565b60008060008060008086806020019051810190611749919061300c565b95509550955095509550955061176685631d1d8b6360e01b611e5c565b801561181c57508473ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156117b557600080fd5b505af11580156117c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ed91906130a0565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b1561192e576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528616906340c10f1990604401600060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611921939291906130bd565b60405180910390a4611980565b600086868587868660405160200161194b969594939291906130f2565b60408051601f1981840301815260cd5460208401909252600080845290935061197e9261ffff9092169184913391611e81565b505b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86166119ef5760405162461bcd60e51b815260206004820152601a60248201527f5f746f2063616e6e6f74206265207a65726f20616464726573730000000000006044820152606401610664565b60d0546119ff906201518061314d565b421015611a76578460cf6000828254611a18919061314d565b909155505060ce5460cf541115611a715760405162461bcd60e51b815260206004820152601b60248201527f6d617820616d6f756e74207065722064617920657863656564656400000000006044820152606401610664565b611a80565b60cf8590554260d0555b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810186905273ffffffffffffffffffffffffffffffffffffffff891690639dc29fac90604401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b5050505060008873ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611b5057600080fd5b505af1158015611b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8891906130a0565b90506000818a8a8a8a8888604051602001611ba9979695949392919061318c565b60408051808303601f1901815291905260cd5490915062010000900460ff1615611be75760cd54611be29061ffff166001876000612026565b611c5b565b845115611c5b5760405162461bcd60e51b8152602060048201526024808201527f4c7a4170703a205f61646170746572506172616d73206d75737420626520656d60448201527f7074792e000000000000000000000000000000000000000000000000000000006064820152608401610664565b60cd54611c6f9061ffff1682338989611e81565b3373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8b8b8989604051611ce994939291906131e9565b60405180910390a450505050505050505050565b600054610100900460ff1680611d16575060005460ff16155b611d885760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff16158015611daa576000805461ffff19166101011790555b611db382612103565b8015610fc857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611e67836121c1565b8015611e785750611e788383612225565b90505b92915050565b61ffff851660009081526066602052604081208054611e9f90612e2c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ecb90612e2c565b8015611f185780601f10611eed57610100808354040283529160200191611f18565b820191906000526020600020905b815481529060010190602001808311611efb57829003601f168201915b50505050509050805160001415611f975760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201527f61207472757374656420736f75726365000000000000000000000000000000006064820152608401610664565b6065546040517fc580310000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063c5803100903490611ff9908a9086908b908b908b908b9060040161321f565b6000604051808303818588803b15801561201257600080fd5b505af115801561197e573d6000803e3d6000fd5b6000612033836022015190565b61ffff861660009081526067602090815260408083208884529091528120549192509061206190849061314d565b9050600081116120b35760405162461bcd60e51b815260206004820152601a60248201527f4c7a4170703a206d696e4761734c696d6974206e6f74207365740000000000006044820152606401610664565b80821015610c215760405162461bcd60e51b815260206004820152601b60248201527f4c7a4170703a20676173206c696d697420697320746f6f206c6f7700000000006044820152606401610664565b600054610100900460ff168061211c575060005460ff16155b61218e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff161580156121b0576000805461ffff19166101011790555b6121b8612361565b611db38261244f565b60006121ed827f01ffc9a700000000000000000000000000000000000000000000000000000000612225565b8015611e7b575061221e827fffffffff00000000000000000000000000000000000000000000000000000000612225565b1592915050565b604080517fffffffff00000000000000000000000000000000000000000000000000000000831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790529051600091908290819073ffffffffffffffffffffffffffffffffffffffff871690617530906122df908690612f12565b6000604051808303818686fa925050503d806000811461231b576040519150601f19603f3d011682016040523d82523d6000602084013e612320565b606091505b509150915060208151101561233b5760009350505050611e7b565b8180156123575750808060200190518101906123579190613286565b9695505050505050565b600054610100900460ff168061237a575060005460ff16155b6123ec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff1615801561240e576000805461ffff19166101011790555b61241661256e565b61241e61264b565b80156114fe57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680612468575060005460ff16155b6124da5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff161580156124fc576000805461ffff19166101011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610fc857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b600054610100900460ff1680612587575060005460ff16155b6125f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff1615801561241e576000805461ffff191661010117905580156114fe57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680612664575060005460ff16155b6126d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff161580156126f8576000805461ffff19166101011790555b61241e33611de5565b82805461270d90612e2c565b90600052602060002090601f01602090048101928261272f5760008555612775565b82601f1061274857805160ff1916838001178555612775565b82800160010185558215612775579182015b8281111561277557825182559160200191906001019061275a565b50612781929150612785565b5090565b5b808211156127815760008155600101612786565b803561ffff811681146127ac57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612809576128096127b1565b604052919050565b600067ffffffffffffffff82111561282b5761282b6127b1565b50601f01601f191660200190565b600082601f83011261284a57600080fd5b813561285d61285882612811565b6127e0565b81815284602083860101111561287257600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff811681146127ac57600080fd5b600080600080608085870312156128bd57600080fd5b6128c68561279a565b9350602085013567ffffffffffffffff808211156128e357600080fd5b6128ef88838901612839565b94506128fd6040880161288f565b9350606087013591508082111561291357600080fd5b5061292087828801612839565b91505092959194509250565b6000806040838503121561293f57600080fd5b6129488361279a565b946020939093013593505050565b60006020828403121561296857600080fd5b611e788261279a565b60006020828403121561298357600080fd5b5035919050565b60008083601f84011261299c57600080fd5b50813567ffffffffffffffff8111156129b457600080fd5b6020830191508360208285010111156129cc57600080fd5b9250929050565b6000806000604084860312156129e857600080fd5b6129f18461279a565b9250602084013567ffffffffffffffff811115612a0d57600080fd5b612a198682870161298a565b9497909650939450505050565b600080600060608486031215612a3b57600080fd5b612a448461279a565b9250602084013567ffffffffffffffff811115612a6057600080fd5b612a6c86828701612839565b925050612a7b6040850161288f565b90509250925092565b73ffffffffffffffffffffffffffffffffffffffff811681146114fe57600080fd5b60008060008060008060a08789031215612abf57600080fd5b8635612aca81612a84565b9550602087013594506040870135612ae181612a84565b9350606087013567ffffffffffffffff80821115612afe57600080fd5b612b0a8a838b01612839565b94506080890135915080821115612b2057600080fd5b50612b2d89828a0161298a565b979a9699509497509295939492505050565b600080600060608486031215612b5457600080fd5b8335612b5f81612a84565b9250612b6d6020850161279a565b91506040840135612b7d81612a84565b809150509250925092565b60005b83811015612ba3578181015183820152602001612b8b565b83811115610c0b5750506000910152565b60008151808452612bcc816020860160208601612b88565b601f01601f19169290920160200192915050565b602081526000611e786020830184612bb4565b80151581146114fe57600080fd5b60008060408385031215612c1457600080fd5b823561294881612bf3565b600080600060608486031215612c3457600080fd5b612c3d8461279a565b95602085013595506040909401359392505050565b600080600080600060808688031215612c6a57600080fd5b612c738661279a565b9450612c816020870161279a565b935060408601359250606086013567ffffffffffffffff811115612ca457600080fd5b612cb08882890161298a565b969995985093965092949392505050565b60008060408385031215612cd457600080fd5b612cdd8361279a565b9150602083013567ffffffffffffffff811115612cf957600080fd5b612d0585828601612839565b9150509250929050565b600080600080600080600060c0888a031215612d2a57600080fd5b8735612d3581612a84565b96506020880135612d4581612a84565b9550604088013594506060880135612d5c81612a84565b9350608088013567ffffffffffffffff80821115612d7957600080fd5b612d858b838c01612839565b945060a08a0135915080821115612d9b57600080fd5b50612da88a828b0161298a565b989b979a50959850939692959293505050565b600060208284031215612dcd57600080fd5b8135612dd881612a84565b9392505050565b60008060008060808587031215612df557600080fd5b612dfe8561279a565b9350612e0c6020860161279a565b92506040850135612e1c81612a84565b9396929550929360600135925050565b600181811c90821680612e4057607f821691505b60208210811415612e7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8183823760009101908152919050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b61ffff841681526040602082015260006115c0604083018486612e90565b600061ffff808816835280871660208401525084604083015260806060830152612f07608083018486612e90565b979650505050505050565b60008251612f24818460208701612b88565b9190910192915050565b61ffff83168152604060208201526000612f4b6040830184612bb4565b949350505050565b600082601f830112612f6457600080fd5b8151612f7261285882612811565b818152846020838601011115612f8757600080fd5b612f4b826020830160208701612b88565b600060208284031215612faa57600080fd5b815167ffffffffffffffff811115612fc157600080fd5b612f4b84828501612f53565b61ffff85168152608060208201526000612fea6080830186612bb4565b67ffffffffffffffff851660408401528281036060840152612f078185612bb4565b60008060008060008060c0878903121561302557600080fd5b865161303081612a84565b602088015190965061304181612a84565b604088015190955061305281612a84565b606088015190945061306381612a84565b608088015160a0890151919450925067ffffffffffffffff81111561308757600080fd5b61309389828a01612f53565b9150509295509295509295565b6000602082840312156130b257600080fd5b8151612dd881612a84565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006115c06060830184612bb4565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261314160c0830184612bb4565b98975050505050505050565b60008219821115613187577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a08301526131dc60c083018486612e90565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000612357606083018486612e90565b61ffff8716815260c06020820152600061323c60c0830188612bb4565b828103604084015261324e8188612bb4565b73ffffffffffffffffffffffffffffffffffffffff87811660608601528616608085015283810360a085015290506131dc8185612bb4565b60006020828403121561329857600080fd5b8151612dd881612bf356fea164736f6c6343000809000a",
+ "deployedBytecode": "0x6080604052600436106101cc5760003560e01c80637533d788116100f7578063c8ed191011610095578063ed629c5c11610064578063ed629c5c14610578578063ede75eca14610598578063f2fde38b146105ab578063f5ecbdbc146105cb57600080fd5b8063c8ed19101461050f578063cbed8b9c14610525578063d1deba1f14610545578063eb8d72b71461055857600080fd5b8063901eec16116100d1578063901eec16146104975780639b57db5f146104ad578063af3fb21c146104cd578063b353aaa7146104e257600080fd5b80637533d788146103fe5780637e0ced091461042b5780638da5cb5b1461044b57600080fd5b806342d65a8d1161016f57806366ad5c8a1161013e57806366ad5c8a146103965780636fb2be6d146103b6578063708c0db9146103c9578063715018a6146103e957600080fd5b806342d65a8d146102fc578063447705151461031c578063512afd89146103315780635b8c41e61461034757600080fd5b806310ddb137116101ab57806310ddb1371461025e57806330c593f71461027e5780633496a68e146102ac5780633d8b38f6146102cc57600080fd5b80621d3567146101d157806307810867146101f357806307e0db171461023e575b600080fd5b3480156101dd57600080fd5b506101f16101ec3660046128a7565b6105eb565b005b3480156101ff57600080fd5b5061022b61020e36600461292c565b606760209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561024a57600080fd5b506101f1610259366004612956565b6107ae565b34801561026a57600080fd5b506101f1610279366004612956565b610899565b34801561028a57600080fd5b5060cd546102999061ffff1681565b60405161ffff9091168152602001610235565b3480156102b857600080fd5b506101f16102c7366004612971565b61095a565b3480156102d857600080fd5b506102ec6102e73660046129d3565b6109c6565b6040519015158152602001610235565b34801561030857600080fd5b506101f16103173660046129d3565b610a92565b34801561032857600080fd5b5061022b600081565b34801561033d57600080fd5b5061022b60ce5481565b34801561035357600080fd5b5061022b610362366004612a26565b609a602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b3480156103a257600080fd5b506101f16103b13660046128a7565b610b8a565b6101f16103c4366004612aa6565b610c11565b3480156103d557600080fd5b506101f16103e4366004612b3f565b610c29565b3480156103f557600080fd5b506101f1610e0b565b34801561040a57600080fd5b5061041e610419366004612956565b610e7e565b6040516102359190612be0565b34801561043757600080fd5b506101f1610446366004612c01565b610f18565b34801561045757600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610235565b3480156104a357600080fd5b5061022b60d05481565b3480156104b957600080fd5b506101f16104c8366004612c1f565b610fcc565b3480156104d957600080fd5b5061022b600181565b3480156104ee57600080fd5b506065546104729073ffffffffffffffffffffffffffffffffffffffff1681565b34801561051b57600080fd5b5061022b60cf5481565b34801561053157600080fd5b506101f1610540366004612c52565b6110a4565b6101f16105533660046128a7565b6111a2565b34801561056457600080fd5b506101f1610573366004612cc1565b61132c565b34801561058457600080fd5b5060cd546102ec9062010000900460ff1681565b6101f16105a6366004612d0f565b6113f5565b3480156105b757600080fd5b506101f16105c6366004612dbb565b611405565b3480156105d757600080fd5b5061041e6105e6366004612ddf565b611501565b60655473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461066d5760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff84166000908152606660205260408120805461068b90612e2c565b80601f01602080910402602001604051908101604052809291908181526020018280546106b790612e2c565b80156107045780601f106106d957610100808354040283529160200191610704565b820191906000526020600020905b8154815290600101906020018083116106e757829003601f168201915b5050505050905080518451148015610729575080805190602001208480519060200120145b61079b5760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610664565b6107a7858585856115c9565b5050505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b6065546040517f07e0db1700000000000000000000000000000000000000000000000000000000815261ffff8316600482015273ffffffffffffffffffffffffffffffffffffffff909116906307e0db17906024015b600060405180830381600087803b15801561088557600080fd5b505af11580156107a7573d6000803e3d6000fd5b60335473ffffffffffffffffffffffffffffffffffffffff1633146109005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b6065546040517f10ddb13700000000000000000000000000000000000000000000000000000000815261ffff8316600482015273ffffffffffffffffffffffffffffffffffffffff909116906310ddb1379060240161086b565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109c15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b60ce55565b61ffff8316600090815260666020526040812080548291906109e790612e2c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1390612e2c565b8015610a605780601f10610a3557610100808354040283529160200191610a60565b820191906000526020600020905b815481529060010190602001808311610a4357829003601f168201915b505050505090508383604051610a77929190612e80565b60405180910390208180519060200120149150509392505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610af95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b6065546040517f42d65a8d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906342d65a8d90610b5390869086908690600401612ebb565b600060405180830381600087803b158015610b6d57600080fd5b505af1158015610b81573d6000803e3d6000fd5b50505050505050565b333014610bff5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d75737420626560448201527f204c7a41707000000000000000000000000000000000000000000000000000006064820152608401610664565b610c0b848484846116d4565b50505050565b610c21863333888888888861198c565b505050505050565b600054610100900460ff1680610c42575060005460ff16155b610cb45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff16158015610cd6576000805461ffff19166101011790555b73ffffffffffffffffffffffffffffffffffffffff8416610d5f5760405162461bcd60e51b815260206004820152602260248201527f6c7a20656e64706f696e742063616e6e6f74206265207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610664565b610d6884611cfd565b60cd805461ffff191661ffff85161790556040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b166020820152610dc590849060340160405160208183030381529060405261132c565b4260d0556969e10de76676d080000060ce558015610c0b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610e725760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b610e7c6000611de5565b565b60666020526000908152604090208054610e9790612e2c565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec390612e2c565b8015610f105780601f10610ee557610100808354040283529160200191610f10565b820191906000526020600020905b815481529060010190602001808311610ef357829003601f168201915b505050505081565b60335473ffffffffffffffffffffffffffffffffffffffff163314610f7f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b60cd805483151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff82168117909255610fc89161ffff908116911617600183610fcc565b5050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110335760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b600081116110835760405162461bcd60e51b815260206004820152601c60248201527f4c7a4170703a20696e76616c6964205f647374476173416d6f756e74000000006044820152606401610664565b61ffff90921660009081526067602090815260408083209383529290522055565b60335473ffffffffffffffffffffffffffffffffffffffff16331461110b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b6065546040517fcbed8b9c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063cbed8b9c906111699088908890889088908890600401612ed9565b600060405180830381600087803b15801561118357600080fd5b505af1158015611197573d6000803e3d6000fd5b505050505050505050565b61ffff84166000908152609a602052604080822090516111c3908690612f12565b908152604080516020928190038301902067ffffffffffffffff86166000908152925290205490508061125e5760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201527f61676500000000000000000000000000000000000000000000000000000000006064820152608401610664565b8151602083012081146112d95760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f6160448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610664565b61ffff85166000908152609a602052604080822090516112fa908790612f12565b908152604080516020928190038301902067ffffffffffffffff8716600090815292529020556107a7858585856116d4565b60335473ffffffffffffffffffffffffffffffffffffffff1633146113935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b61ffff8216600090815260666020908152604090912082516113b792840190612701565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab82826040516113e9929190612f2e565b60405180910390a15050565b610b81873388888888888861198c565b60335473ffffffffffffffffffffffffffffffffffffffff16331461146c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610664565b73ffffffffffffffffffffffffffffffffffffffff81166114f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610664565b6114fe81611de5565b50565b6065546040517ff5ecbdbc00000000000000000000000000000000000000000000000000000000815261ffff8087166004830152851660248201523060448201526064810183905260609173ffffffffffffffffffffffffffffffffffffffff169063f5ecbdbc9060840160006040518083038186803b15801561158457600080fd5b505afa158015611598573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115c09190810190612f98565b95945050505050565b6040517f66ad5c8a00000000000000000000000000000000000000000000000000000000815230906366ad5c8a9061160b908790879087908790600401612fcd565b600060405180830381600087803b15801561162557600080fd5b505af1925050508015611636575060015b610c0b578080519060200120609a60008661ffff1661ffff1681526020019081526020016000208460405161166b9190612f12565b90815260408051918290036020908101832067ffffffffffffffff87166000908152915220919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d906116c7908690869086908690612fcd565b60405180910390a1610c0b565b60cd5461ffff85811691161461172c5760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420736f7572636520636861696e4964000000000000000000006044820152606401610664565b60008060008060008086806020019051810190611749919061300c565b95509550955095509550955061176685631d1d8b6360e01b611e5c565b801561181c57508473ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156117b557600080fd5b505af11580156117c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ed91906130a0565b73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b1561192e576040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8481166004830152602482018490528616906340c10f1990604401600060405180830381600087803b15801561189157600080fd5b505af11580156118a5573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fb0444523268717a02698be47d0803aa7468c00acbed2f8bd93a0459cde61dd89868686604051611921939291906130bd565b60405180910390a4611980565b600086868587868660405160200161194b969594939291906130f2565b60408051601f1981840301815260cd5460208401909252600080845290935061197e9261ffff9092169184913391611e81565b505b50505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff86166119ef5760405162461bcd60e51b815260206004820152601a60248201527f5f746f2063616e6e6f74206265207a65726f20616464726573730000000000006044820152606401610664565b60d0546119ff906201518061314d565b421015611a76578460cf6000828254611a18919061314d565b909155505060ce5460cf541115611a715760405162461bcd60e51b815260206004820152601b60248201527f6d617820616d6f756e74207065722064617920657863656564656400000000006044820152606401610664565b611a80565b60cf8590554260d0555b6040517f9dc29fac0000000000000000000000000000000000000000000000000000000081523360048201526024810186905273ffffffffffffffffffffffffffffffffffffffff891690639dc29fac90604401600060405180830381600087803b158015611aee57600080fd5b505af1158015611b02573d6000803e3d6000fd5b5050505060008873ffffffffffffffffffffffffffffffffffffffff1663c01e1bd66040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611b5057600080fd5b505af1158015611b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8891906130a0565b90506000818a8a8a8a8888604051602001611ba9979695949392919061318c565b60408051808303601f1901815291905260cd5490915062010000900460ff1615611be75760cd54611be29061ffff166001876000612026565b611c5b565b845115611c5b5760405162461bcd60e51b8152602060048201526024808201527f4c7a4170703a205f61646170746572506172616d73206d75737420626520656d60448201527f7074792e000000000000000000000000000000000000000000000000000000006064820152608401610664565b60cd54611c6f9061ffff1682338989611e81565b3373ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f73d170910aba9e6d50b102db522b1dbcd796216f5128b445aa2135272886497e8b8b8989604051611ce994939291906131e9565b60405180910390a450505050505050505050565b600054610100900460ff1680611d16575060005460ff16155b611d885760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff16158015611daa576000805461ffff19166101011790555b611db382612103565b8015610fc857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000611e67836121c1565b8015611e785750611e788383612225565b90505b92915050565b61ffff851660009081526066602052604081208054611e9f90612e2c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ecb90612e2c565b8015611f185780601f10611eed57610100808354040283529160200191611f18565b820191906000526020600020905b815481529060010190602001808311611efb57829003601f168201915b50505050509050805160001415611f975760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201527f61207472757374656420736f75726365000000000000000000000000000000006064820152608401610664565b6065546040517fc580310000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063c5803100903490611ff9908a9086908b908b908b908b9060040161321f565b6000604051808303818588803b15801561201257600080fd5b505af115801561197e573d6000803e3d6000fd5b6000612033836022015190565b61ffff861660009081526067602090815260408083208884529091528120549192509061206190849061314d565b9050600081116120b35760405162461bcd60e51b815260206004820152601a60248201527f4c7a4170703a206d696e4761734c696d6974206e6f74207365740000000000006044820152606401610664565b80821015610c215760405162461bcd60e51b815260206004820152601b60248201527f4c7a4170703a20676173206c696d697420697320746f6f206c6f7700000000006044820152606401610664565b600054610100900460ff168061211c575060005460ff16155b61218e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff161580156121b0576000805461ffff19166101011790555b6121b8612361565b611db38261244f565b60006121ed827f01ffc9a700000000000000000000000000000000000000000000000000000000612225565b8015611e7b575061221e827fffffffff00000000000000000000000000000000000000000000000000000000612225565b1592915050565b604080517fffffffff00000000000000000000000000000000000000000000000000000000831660248083019190915282518083039091018152604490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a7000000000000000000000000000000000000000000000000000000001790529051600091908290819073ffffffffffffffffffffffffffffffffffffffff871690617530906122df908690612f12565b6000604051808303818686fa925050503d806000811461231b576040519150601f19603f3d011682016040523d82523d6000602084013e612320565b606091505b509150915060208151101561233b5760009350505050611e7b565b8180156123575750808060200190518101906123579190613286565b9695505050505050565b600054610100900460ff168061237a575060005460ff16155b6123ec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff1615801561240e576000805461ffff19166101011790555b61241661256e565b61241e61264b565b80156114fe57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680612468575060005460ff16155b6124da5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff161580156124fc576000805461ffff19166101011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790558015610fc857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b600054610100900460ff1680612587575060005460ff16155b6125f95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff1615801561241e576000805461ffff191661010117905580156114fe57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680612664575060005460ff16155b6126d65760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610664565b600054610100900460ff161580156126f8576000805461ffff19166101011790555b61241e33611de5565b82805461270d90612e2c565b90600052602060002090601f01602090048101928261272f5760008555612775565b82601f1061274857805160ff1916838001178555612775565b82800160010185558215612775579182015b8281111561277557825182559160200191906001019061275a565b50612781929150612785565b5090565b5b808211156127815760008155600101612786565b803561ffff811681146127ac57600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612809576128096127b1565b604052919050565b600067ffffffffffffffff82111561282b5761282b6127b1565b50601f01601f191660200190565b600082601f83011261284a57600080fd5b813561285d61285882612811565b6127e0565b81815284602083860101111561287257600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff811681146127ac57600080fd5b600080600080608085870312156128bd57600080fd5b6128c68561279a565b9350602085013567ffffffffffffffff808211156128e357600080fd5b6128ef88838901612839565b94506128fd6040880161288f565b9350606087013591508082111561291357600080fd5b5061292087828801612839565b91505092959194509250565b6000806040838503121561293f57600080fd5b6129488361279a565b946020939093013593505050565b60006020828403121561296857600080fd5b611e788261279a565b60006020828403121561298357600080fd5b5035919050565b60008083601f84011261299c57600080fd5b50813567ffffffffffffffff8111156129b457600080fd5b6020830191508360208285010111156129cc57600080fd5b9250929050565b6000806000604084860312156129e857600080fd5b6129f18461279a565b9250602084013567ffffffffffffffff811115612a0d57600080fd5b612a198682870161298a565b9497909650939450505050565b600080600060608486031215612a3b57600080fd5b612a448461279a565b9250602084013567ffffffffffffffff811115612a6057600080fd5b612a6c86828701612839565b925050612a7b6040850161288f565b90509250925092565b73ffffffffffffffffffffffffffffffffffffffff811681146114fe57600080fd5b60008060008060008060a08789031215612abf57600080fd5b8635612aca81612a84565b9550602087013594506040870135612ae181612a84565b9350606087013567ffffffffffffffff80821115612afe57600080fd5b612b0a8a838b01612839565b94506080890135915080821115612b2057600080fd5b50612b2d89828a0161298a565b979a9699509497509295939492505050565b600080600060608486031215612b5457600080fd5b8335612b5f81612a84565b9250612b6d6020850161279a565b91506040840135612b7d81612a84565b809150509250925092565b60005b83811015612ba3578181015183820152602001612b8b565b83811115610c0b5750506000910152565b60008151808452612bcc816020860160208601612b88565b601f01601f19169290920160200192915050565b602081526000611e786020830184612bb4565b80151581146114fe57600080fd5b60008060408385031215612c1457600080fd5b823561294881612bf3565b600080600060608486031215612c3457600080fd5b612c3d8461279a565b95602085013595506040909401359392505050565b600080600080600060808688031215612c6a57600080fd5b612c738661279a565b9450612c816020870161279a565b935060408601359250606086013567ffffffffffffffff811115612ca457600080fd5b612cb08882890161298a565b969995985093965092949392505050565b60008060408385031215612cd457600080fd5b612cdd8361279a565b9150602083013567ffffffffffffffff811115612cf957600080fd5b612d0585828601612839565b9150509250929050565b600080600080600080600060c0888a031215612d2a57600080fd5b8735612d3581612a84565b96506020880135612d4581612a84565b9550604088013594506060880135612d5c81612a84565b9350608088013567ffffffffffffffff80821115612d7957600080fd5b612d858b838c01612839565b945060a08a0135915080821115612d9b57600080fd5b50612da88a828b0161298a565b989b979a50959850939692959293505050565b600060208284031215612dcd57600080fd5b8135612dd881612a84565b9392505050565b60008060008060808587031215612df557600080fd5b612dfe8561279a565b9350612e0c6020860161279a565b92506040850135612e1c81612a84565b9396929550929360600135925050565b600181811c90821680612e4057607f821691505b60208210811415612e7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8183823760009101908152919050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b61ffff841681526040602082015260006115c0604083018486612e90565b600061ffff808816835280871660208401525084604083015260806060830152612f07608083018486612e90565b979650505050505050565b60008251612f24818460208701612b88565b9190910192915050565b61ffff83168152604060208201526000612f4b6040830184612bb4565b949350505050565b600082601f830112612f6457600080fd5b8151612f7261285882612811565b818152846020838601011115612f8757600080fd5b612f4b826020830160208701612b88565b600060208284031215612faa57600080fd5b815167ffffffffffffffff811115612fc157600080fd5b612f4b84828501612f53565b61ffff85168152608060208201526000612fea6080830186612bb4565b67ffffffffffffffff851660408401528281036060840152612f078185612bb4565b60008060008060008060c0878903121561302557600080fd5b865161303081612a84565b602088015190965061304181612a84565b604088015190955061305281612a84565b606088015190945061306381612a84565b608088015160a0890151919450925067ffffffffffffffff81111561308757600080fd5b61309389828a01612f53565b9150509295509295509295565b6000602082840312156130b257600080fd5b8151612dd881612a84565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006115c06060830184612bb4565b600073ffffffffffffffffffffffffffffffffffffffff80891683528088166020840152808716604084015280861660608401525083608083015260c060a083015261314160c0830184612bb4565b98975050505050505050565b60008219821115613187577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a08301526131dc60c083018486612e90565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000612357606083018486612e90565b61ffff8716815260c06020820152600061323c60c0830188612bb4565b828103604084015261324e8188612bb4565b73ffffffffffffffffffffffffffffffffffffffff87811660608601528616608085015283810360a085015290506131dc8185612bb4565b60006020828403121561329857600080fd5b8151612dd881612bf356fea164736f6c6343000809000a",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/packages/boba/gateway/src/deployment/contracts/crosschain/EthBridge.json b/packages/boba/gateway/src/deployment/contracts/crosschain/EthBridge.json
new file mode 100644
index 0000000000..0bf8744863
--- /dev/null
+++ b/packages/boba/gateway/src/deployment/contracts/crosschain/EthBridge.json
@@ -0,0 +1,789 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "EthBridge",
+ "sourceName": "contracts/lzTokenBridge/EthBridge.sol",
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_l2Token",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "ERC20DepositInitiated",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_l2Token",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_from",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "ERC20WithdrawalFinalized",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint64",
+ "name": "_nonce",
+ "type": "uint64"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "_payload",
+ "type": "bytes"
+ }
+ ],
+ "name": "MessageFailed",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "previousOwner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "OwnershipTransferred",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ }
+ ],
+ "name": "SetTrustedRemote",
+ "type": "event"
+ },
+ {
+ "inputs": [],
+ "name": "FUNCTION_TYPE_SEND",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "NO_EXTRA_GAS",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l2Token",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_zroPaymentAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_adapterParams",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "depositERC20",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l2Token",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ },
+ {
+ "internalType": "address",
+ "name": "_zroPaymentAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_adapterParams",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_data",
+ "type": "bytes"
+ }
+ ],
+ "name": "depositERC20To",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "deposits",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "dstChainId",
+ "outputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint64",
+ "name": "",
+ "type": "uint64"
+ }
+ ],
+ "name": "failedMessages",
+ "outputs": [
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ }
+ ],
+ "name": "forceResumeReceive",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_version",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_chainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_configType",
+ "type": "uint256"
+ }
+ ],
+ "name": "getConfig",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_lzEndpoint",
+ "type": "address"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_dstChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "address",
+ "name": "_altL1BridgeAddress",
+ "type": "address"
+ }
+ ],
+ "name": "initialize",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ }
+ ],
+ "name": "isTrustedRemote",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "lzEndpoint",
+ "outputs": [
+ {
+ "internalType": "contract ILayerZeroEndpoint",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint64",
+ "name": "_nonce",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_payload",
+ "type": "bytes"
+ }
+ ],
+ "name": "lzReceive",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "maxTransferAmountPerDay",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "minDstGasLookup",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint64",
+ "name": "_nonce",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_payload",
+ "type": "bytes"
+ }
+ ],
+ "name": "nonblockingLzReceive",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "owner",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "renounceOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint64",
+ "name": "_nonce",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_payload",
+ "type": "bytes"
+ }
+ ],
+ "name": "retryMessage",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_version",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint16",
+ "name": "_chainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_configType",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_config",
+ "type": "bytes"
+ }
+ ],
+ "name": "setConfig",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_maxTransferAmountPerDay",
+ "type": "uint256"
+ }
+ ],
+ "name": "setMaxTransferAmountPerDay",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_dstChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_type",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_dstGasAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "setMinDstGasLookup",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_version",
+ "type": "uint16"
+ }
+ ],
+ "name": "setReceiveVersion",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_version",
+ "type": "uint16"
+ }
+ ],
+ "name": "setSendVersion",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ }
+ ],
+ "name": "setTrustedRemote",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bool",
+ "name": "_useCustomAdapterParams",
+ "type": "bool"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_dstGasAmount",
+ "type": "uint256"
+ }
+ ],
+ "name": "setUseCustomAdapterParams",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "newOwner",
+ "type": "address"
+ }
+ ],
+ "name": "transferOwnership",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "transferTimestampCheckPoint",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "transferredAmount",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ }
+ ],
+ "name": "trustedRemoteLookup",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "useCustomAdapterParams",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x608060405234801561001057600080fd5b50613382806100206000396000f3fe6080604052600436106101d75760003560e01c8063715018a611610102578063b353aaa711610095578063eb8d72b711610064578063eb8d72b7146105ae578063ed629c5c146105ce578063f2fde38b146105ee578063f5ecbdbc1461060e57600080fd5b8063b353aaa714610538578063c8ed191014610565578063cbed8b9c1461057b578063d1deba1f1461059b57600080fd5b80638f601f66116100d15780638f601f66146104b5578063901eec16146104ed5780639b57db5f14610503578063af3fb21c1461052357600080fd5b8063715018a6146104075780637533d7881461041c5780637e0ced09146104495780638da5cb5b1461046957600080fd5b80633d8b38f61161017a5780635b8c41e6116101495780635b8c41e61461036557806365f77189146103b457806366ad5c8a146103c7578063708c0db9146103e757600080fd5b80633d8b38f6146102ea57806342d65a8d1461031a578063447705151461033a578063512afd891461034f57600080fd5b80630d265fdb116101b65780630d265fdb1461026957806310ddb1371461027c57806330c593f71461029c5780633496a68e146102ca57600080fd5b80621d3567146101dc57806307810867146101fe57806307e0db1714610249575b600080fd5b3480156101e857600080fd5b506101fc6101f7366004612984565b61062e565b005b34801561020a57600080fd5b50610236610219366004612a09565b606760209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561025557600080fd5b506101fc610264366004612a33565b6107f1565b6101fc610277366004612ab9565b6108dc565b34801561028857600080fd5b506101fc610297366004612a33565b610945565b3480156102a857600080fd5b5060cd546102b79061ffff1681565b60405161ffff9091168152602001610240565b3480156102d657600080fd5b506101fc6102e5366004612b65565b610a06565b3480156102f657600080fd5b5061030a610305366004612b7e565b610a72565b6040519015158152602001610240565b34801561032657600080fd5b506101fc610335366004612b7e565b610b3f565b34801561034657600080fd5b50610236600081565b34801561035b57600080fd5b5061023660ce5481565b34801561037157600080fd5b50610236610380366004612bd1565b609a602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b6101fc6103c2366004612c2f565b610c2e565b3480156103d357600080fd5b506101fc6103e2366004612984565b610c49565b3480156103f357600080fd5b506101fc610402366004612ced565b610cd0565b34801561041357600080fd5b506101fc610eb2565b34801561042857600080fd5b5061043c610437366004612a33565b610f25565b6040516102409190612d8e565b34801561045557600080fd5b506101fc610464366004612daf565b610fbf565b34801561047557600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610240565b3480156104c157600080fd5b506102366104d0366004612dcd565b60d160209081526000928352604080842090915290825290205481565b3480156104f957600080fd5b5061023660d05481565b34801561050f57600080fd5b506101fc61051e366004612e06565b611073565b34801561052f57600080fd5b50610236600181565b34801561054457600080fd5b506065546104909073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057157600080fd5b5061023660cf5481565b34801561058757600080fd5b506101fc610596366004612e39565b61114b565b6101fc6105a9366004612984565b611249565b3480156105ba57600080fd5b506101fc6105c9366004612ea8565b6113d3565b3480156105da57600080fd5b5060cd5461030a9062010000900460ff1681565b3480156105fa57600080fd5b506101fc610609366004612ef6565b61149c565b34801561061a57600080fd5b5061043c610629366004612f13565b611598565b60655473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106b05760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff8416600090815260666020526040812080546106ce90612f60565b80601f01602080910402602001604051908101604052809291908181526020018280546106fa90612f60565b80156107475780601f1061071c57610100808354040283529160200191610747565b820191906000526020600020905b81548152906001019060200180831161072a57829003601f168201915b505050505090508051845114801561076c575080805190602001208480519060200120145b6107de5760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016106a7565b6107ea85858585611660565b5050505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b6065546040517f07e0db1700000000000000000000000000000000000000000000000000000000815261ffff8316600482015273ffffffffffffffffffffffffffffffffffffffff909116906307e0db17906024015b600060405180830381600087803b1580156108c857600080fd5b505af11580156107ea573d6000803e3d6000fd5b333b1561092b5760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064016106a7565b61093c87873333898989898961176b565b50505050505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b6065546040517f10ddb13700000000000000000000000000000000000000000000000000000000815261ffff8316600482015273ffffffffffffffffffffffffffffffffffffffff909116906310ddb137906024016108ae565b60335473ffffffffffffffffffffffffffffffffffffffff163314610a6d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b60ce55565b61ffff831660009081526066602052604081208054829190610a9390612f60565b80601f0160208091040260200160405190810160405280929190818152602001828054610abf90612f60565b8015610b0c5780601f10610ae157610100808354040283529160200191610b0c565b820191906000526020600020905b815481529060010190602001808311610aef57829003601f168201915b505050505090508383604051610b23929190612fb4565b60405180910390208180519060200120149150505b9392505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ba65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b6065546040517f42d65a8d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906342d65a8d90610c0090869086908690600401612fef565b600060405180830381600087803b158015610c1a57600080fd5b505af115801561093c573d6000803e3d6000fd5b610c3f88883389898989898961176b565b5050505050505050565b333014610cbe5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d75737420626560448201527f204c7a417070000000000000000000000000000000000000000000000000000060648201526084016106a7565b610cca84848484611a65565b50505050565b600054610100900460ff1680610ce9575060005460ff16155b610d5b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff16158015610d7d576000805461ffff19166101011790555b73ffffffffffffffffffffffffffffffffffffffff8416610e065760405162461bcd60e51b815260206004820152602260248201527f6c7a20656e64706f696e742063616e6e6f74206265207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b610e0f84611be3565b60cd805461ffff191661ffff85161790556040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b166020820152610e6c9084906034016040516020818303038152906040526113d3565b4260d0556969e10de76676d080000060ce558015610cca57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610f195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b610f236000611ccb565b565b60666020526000908152604090208054610f3e90612f60565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6a90612f60565b8015610fb75780601f10610f8c57610100808354040283529160200191610fb7565b820191906000526020600020905b815481529060010190602001808311610f9a57829003601f168201915b505050505081565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b60cd805483151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff8216811790925561106f9161ffff908116911617600183611073565b5050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110da5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b6000811161112a5760405162461bcd60e51b815260206004820152601c60248201527f4c7a4170703a20696e76616c6964205f647374476173416d6f756e740000000060448201526064016106a7565b61ffff90921660009081526067602090815260408083209383529290522055565b60335473ffffffffffffffffffffffffffffffffffffffff1633146111b25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b6065546040517fcbed8b9c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063cbed8b9c90611210908890889088908890889060040161300d565b600060405180830381600087803b15801561122a57600080fd5b505af115801561123e573d6000803e3d6000fd5b505050505050505050565b61ffff84166000908152609a6020526040808220905161126a90869061303b565b908152604080516020928190038301902067ffffffffffffffff8616600090815292529020549050806113055760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201527f616765000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b8151602083012081146113805760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f6160448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b61ffff85166000908152609a602052604080822090516113a190879061303b565b908152604080516020928190038301902067ffffffffffffffff8716600090815292529020556107ea85858585611a65565b60335473ffffffffffffffffffffffffffffffffffffffff16331461143a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b61ffff82166000908152606660209081526040909120825161145e928401906127de565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab8282604051611490929190613057565b60405180910390a15050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146115035760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b73ffffffffffffffffffffffffffffffffffffffff811661158c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106a7565b61159581611ccb565b50565b6065546040517ff5ecbdbc00000000000000000000000000000000000000000000000000000000815261ffff8087166004830152851660248201523060448201526064810183905260609173ffffffffffffffffffffffffffffffffffffffff169063f5ecbdbc9060840160006040518083038186803b15801561161b57600080fd5b505afa15801561162f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261165791908101906130b9565b95945050505050565b6040517f66ad5c8a00000000000000000000000000000000000000000000000000000000815230906366ad5c8a906116a29087908790879087906004016130ee565b600060405180830381600087803b1580156116bc57600080fd5b505af19250505080156116cd575060015b610cca578080519060200120609a60008661ffff1661ffff16815260200190815260200160002084604051611702919061303b565b90815260408051918290036020908101832067ffffffffffffffff87166000908152915220919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d9061175e9086908690869086906130ee565b60405180910390a1610cca565b73ffffffffffffffffffffffffffffffffffffffff86166117ce5760405162461bcd60e51b815260206004820152601a60248201527f5f746f2063616e6e6f74206265207a65726f206164647265737300000000000060448201526064016106a7565b60d0546117de906201518061315c565b421015611855578460cf60008282546117f7919061315c565b909155505060ce5460cf5411156118505760405162461bcd60e51b815260206004820152601b60248201527f6d617820616d6f756e742070657220646179206578636565646564000000000060448201526064016106a7565b61185f565b60cf8590554260d0555b61188173ffffffffffffffffffffffffffffffffffffffff8a16883088611d42565b6000898989898987876040516020016118a09796959493929190613174565b60408051808303601f1901815291905260cd5490915062010000900460ff16156118de5760cd546118d99061ffff166001866000611e00565b611952565b8351156119525760405162461bcd60e51b8152602060048201526024808201527f4c7a4170703a205f61646170746572506172616d73206d75737420626520656d60448201527f7074792e0000000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff808b16600090815260d160209081526040808320938d168352929052205461199090879061315c565b73ffffffffffffffffffffffffffffffffffffffff808c16600090815260d160209081526040808320938e168352929052205560cd546119d79061ffff1682338888611ee5565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968a8a8888604051611a5194939291906131d1565b60405180910390a450505050505050505050565b60cd5461ffff858116911614611abd5760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420736f7572636520636861696e49640000000000000000000060448201526064016106a7565b60008060008060008086806020019051810190611ada9190613211565b73ffffffffffffffffffffffffffffffffffffffff808716600090815260d16020908152604080832093891683529290522054959b50939950919750955093509150611b279083906132a5565b73ffffffffffffffffffffffffffffffffffffffff808816600081815260d160209081526040808320948b1683529390529190912091909155611b6b908484612097565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611a51939291906132bc565b600054610100900460ff1680611bfc575060005460ff16155b611c6e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff16158015611c90576000805461ffff19166101011790555b611c99826120f2565b801561106f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610cca9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526121b0565b6000611e0d836022015190565b61ffff8616600090815260676020908152604080832088845290915281205491925090611e3b90849061315c565b905060008111611e8d5760405162461bcd60e51b815260206004820152601a60248201527f4c7a4170703a206d696e4761734c696d6974206e6f742073657400000000000060448201526064016106a7565b80821015611edd5760405162461bcd60e51b815260206004820152601b60248201527f4c7a4170703a20676173206c696d697420697320746f6f206c6f77000000000060448201526064016106a7565b505050505050565b61ffff851660009081526066602052604081208054611f0390612f60565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2f90612f60565b8015611f7c5780601f10611f5157610100808354040283529160200191611f7c565b820191906000526020600020905b815481529060010190602001808311611f5f57829003601f168201915b50505050509050805160001415611ffb5760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201527f61207472757374656420736f757263650000000000000000000000000000000060648201526084016106a7565b6065546040517fc580310000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063c580310090349061205d908a9086908b908b908b908b906004016132f1565b6000604051808303818588803b15801561207657600080fd5b505af115801561208a573d6000803e3d6000fd5b5050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526120ed9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611d9c565b505050565b600054610100900460ff168061210b575060005460ff16155b61217d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff1615801561219f576000805461ffff19166101011790555b6121a76122a2565b611c9982612390565b6000612212826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166124af9092919063ffffffff16565b8051909150156120ed57808060200190518101906122309190613358565b6120ed5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff16806122bb575060005460ff16155b61232d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff1615801561234f576000805461ffff19166101011790555b6123576124c6565b61235f6125a3565b801561159557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff16806123a9575060005460ff16155b61241b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff1615801561243d576000805461ffff19166101011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055801561106f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b60606124be8484600085612659565b949350505050565b600054610100900460ff16806124df575060005460ff16155b6125515760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff1615801561235f576000805461ffff1916610101179055801561159557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff16806125bc575060005460ff16155b61262e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff16158015612650576000805461ffff19166101011790555b61235f33611ccb565b6060824710156126d15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106a7565b843b61271f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612748919061303b565b60006040518083038185875af1925050503d8060008114612785576040519150601f19603f3d011682016040523d82523d6000602084013e61278a565b606091505b509150915061279a8282866127a5565b979650505050505050565b606083156127b4575081610b38565b8251156127c45782518084602001fd5b8160405162461bcd60e51b81526004016106a79190612d8e565b8280546127ea90612f60565b90600052602060002090601f01602090048101928261280c5760008555612852565b82601f1061282557805160ff1916838001178555612852565b82800160010185558215612852579182015b82811115612852578251825591602001919060010190612837565b5061285e929150612862565b5090565b5b8082111561285e5760008155600101612863565b803561ffff8116811461288957600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128e6576128e661288e565b604052919050565b600067ffffffffffffffff8211156129085761290861288e565b50601f01601f191660200190565b600082601f83011261292757600080fd5b813561293a612935826128ee565b6128bd565b81815284602083860101111561294f57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff8116811461288957600080fd5b6000806000806080858703121561299a57600080fd5b6129a385612877565b9350602085013567ffffffffffffffff808211156129c057600080fd5b6129cc88838901612916565b94506129da6040880161296c565b935060608701359150808211156129f057600080fd5b506129fd87828801612916565b91505092959194509250565b60008060408385031215612a1c57600080fd5b612a2583612877565b946020939093013593505050565b600060208284031215612a4557600080fd5b610b3882612877565b73ffffffffffffffffffffffffffffffffffffffff8116811461159557600080fd5b60008083601f840112612a8257600080fd5b50813567ffffffffffffffff811115612a9a57600080fd5b602083019150836020828501011115612ab257600080fd5b9250929050565b600080600080600080600060c0888a031215612ad457600080fd5b8735612adf81612a4e565b96506020880135612aef81612a4e565b9550604088013594506060880135612b0681612a4e565b9350608088013567ffffffffffffffff80821115612b2357600080fd5b612b2f8b838c01612916565b945060a08a0135915080821115612b4557600080fd5b50612b528a828b01612a70565b989b979a50959850939692959293505050565b600060208284031215612b7757600080fd5b5035919050565b600080600060408486031215612b9357600080fd5b612b9c84612877565b9250602084013567ffffffffffffffff811115612bb857600080fd5b612bc486828701612a70565b9497909650939450505050565b600080600060608486031215612be657600080fd5b612bef84612877565b9250602084013567ffffffffffffffff811115612c0b57600080fd5b612c1786828701612916565b925050612c266040850161296c565b90509250925092565b60008060008060008060008060e0898b031215612c4b57600080fd5b8835612c5681612a4e565b97506020890135612c6681612a4e565b96506040890135612c7681612a4e565b9550606089013594506080890135612c8d81612a4e565b935060a089013567ffffffffffffffff80821115612caa57600080fd5b612cb68c838d01612916565b945060c08b0135915080821115612ccc57600080fd5b50612cd98b828c01612a70565b999c989b5096995094979396929594505050565b600080600060608486031215612d0257600080fd5b8335612d0d81612a4e565b9250612d1b60208501612877565b91506040840135612d2b81612a4e565b809150509250925092565b60005b83811015612d51578181015183820152602001612d39565b83811115610cca5750506000910152565b60008151808452612d7a816020860160208601612d36565b601f01601f19169290920160200192915050565b602081526000610b386020830184612d62565b801515811461159557600080fd5b60008060408385031215612dc257600080fd5b8235612a2581612da1565b60008060408385031215612de057600080fd5b8235612deb81612a4e565b91506020830135612dfb81612a4e565b809150509250929050565b600080600060608486031215612e1b57600080fd5b612e2484612877565b95602085013595506040909401359392505050565b600080600080600060808688031215612e5157600080fd5b612e5a86612877565b9450612e6860208701612877565b935060408601359250606086013567ffffffffffffffff811115612e8b57600080fd5b612e9788828901612a70565b969995985093965092949392505050565b60008060408385031215612ebb57600080fd5b612ec483612877565b9150602083013567ffffffffffffffff811115612ee057600080fd5b612eec85828601612916565b9150509250929050565b600060208284031215612f0857600080fd5b8135610b3881612a4e565b60008060008060808587031215612f2957600080fd5b612f3285612877565b9350612f4060208601612877565b92506040850135612f5081612a4e565b9396929550929360600135925050565b600181811c90821680612f7457607f821691505b60208210811415612fae577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8183823760009101908152919050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b61ffff84168152604060208201526000611657604083018486612fc4565b600061ffff80881683528087166020840152508460408301526080606083015261279a608083018486612fc4565b6000825161304d818460208701612d36565b9190910192915050565b61ffff831681526040602082015260006124be6040830184612d62565b600082601f83011261308557600080fd5b8151613093612935826128ee565b8181528460208386010111156130a857600080fd5b6124be826020830160208701612d36565b6000602082840312156130cb57600080fd5b815167ffffffffffffffff8111156130e257600080fd5b6124be84828501613074565b61ffff8516815260806020820152600061310b6080830186612d62565b67ffffffffffffffff85166040840152828103606084015261279a8185612d62565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561316f5761316f61312d565b500190565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a08301526131c460c083018486612fc4565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000613207606083018486612fc4565b9695505050505050565b60008060008060008060c0878903121561322a57600080fd5b865161323581612a4e565b602088015190965061324681612a4e565b604088015190955061325781612a4e565b606088015190945061326881612a4e565b608088015160a0890151919450925067ffffffffffffffff81111561328c57600080fd5b61329889828a01613074565b9150509295509295509295565b6000828210156132b7576132b761312d565b500390565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006116576060830184612d62565b61ffff8716815260c06020820152600061330e60c0830188612d62565b82810360408401526133208188612d62565b73ffffffffffffffffffffffffffffffffffffffff87811660608601528616608085015283810360a085015290506131c48185612d62565b60006020828403121561336a57600080fd5b8151610b3881612da156fea164736f6c6343000809000a",
+ "deployedBytecode": "0x6080604052600436106101d75760003560e01c8063715018a611610102578063b353aaa711610095578063eb8d72b711610064578063eb8d72b7146105ae578063ed629c5c146105ce578063f2fde38b146105ee578063f5ecbdbc1461060e57600080fd5b8063b353aaa714610538578063c8ed191014610565578063cbed8b9c1461057b578063d1deba1f1461059b57600080fd5b80638f601f66116100d15780638f601f66146104b5578063901eec16146104ed5780639b57db5f14610503578063af3fb21c1461052357600080fd5b8063715018a6146104075780637533d7881461041c5780637e0ced09146104495780638da5cb5b1461046957600080fd5b80633d8b38f61161017a5780635b8c41e6116101495780635b8c41e61461036557806365f77189146103b457806366ad5c8a146103c7578063708c0db9146103e757600080fd5b80633d8b38f6146102ea57806342d65a8d1461031a578063447705151461033a578063512afd891461034f57600080fd5b80630d265fdb116101b65780630d265fdb1461026957806310ddb1371461027c57806330c593f71461029c5780633496a68e146102ca57600080fd5b80621d3567146101dc57806307810867146101fe57806307e0db1714610249575b600080fd5b3480156101e857600080fd5b506101fc6101f7366004612984565b61062e565b005b34801561020a57600080fd5b50610236610219366004612a09565b606760209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561025557600080fd5b506101fc610264366004612a33565b6107f1565b6101fc610277366004612ab9565b6108dc565b34801561028857600080fd5b506101fc610297366004612a33565b610945565b3480156102a857600080fd5b5060cd546102b79061ffff1681565b60405161ffff9091168152602001610240565b3480156102d657600080fd5b506101fc6102e5366004612b65565b610a06565b3480156102f657600080fd5b5061030a610305366004612b7e565b610a72565b6040519015158152602001610240565b34801561032657600080fd5b506101fc610335366004612b7e565b610b3f565b34801561034657600080fd5b50610236600081565b34801561035b57600080fd5b5061023660ce5481565b34801561037157600080fd5b50610236610380366004612bd1565b609a602090815260009384526040808520845180860184018051928152908401958401959095209452929052825290205481565b6101fc6103c2366004612c2f565b610c2e565b3480156103d357600080fd5b506101fc6103e2366004612984565b610c49565b3480156103f357600080fd5b506101fc610402366004612ced565b610cd0565b34801561041357600080fd5b506101fc610eb2565b34801561042857600080fd5b5061043c610437366004612a33565b610f25565b6040516102409190612d8e565b34801561045557600080fd5b506101fc610464366004612daf565b610fbf565b34801561047557600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610240565b3480156104c157600080fd5b506102366104d0366004612dcd565b60d160209081526000928352604080842090915290825290205481565b3480156104f957600080fd5b5061023660d05481565b34801561050f57600080fd5b506101fc61051e366004612e06565b611073565b34801561052f57600080fd5b50610236600181565b34801561054457600080fd5b506065546104909073ffffffffffffffffffffffffffffffffffffffff1681565b34801561057157600080fd5b5061023660cf5481565b34801561058757600080fd5b506101fc610596366004612e39565b61114b565b6101fc6105a9366004612984565b611249565b3480156105ba57600080fd5b506101fc6105c9366004612ea8565b6113d3565b3480156105da57600080fd5b5060cd5461030a9062010000900460ff1681565b3480156105fa57600080fd5b506101fc610609366004612ef6565b61149c565b34801561061a57600080fd5b5061043c610629366004612f13565b611598565b60655473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106b05760405162461bcd60e51b815260206004820152601e60248201527f4c7a4170703a20696e76616c696420656e64706f696e742063616c6c6572000060448201526064015b60405180910390fd5b61ffff8416600090815260666020526040812080546106ce90612f60565b80601f01602080910402602001604051908101604052809291908181526020018280546106fa90612f60565b80156107475780601f1061071c57610100808354040283529160200191610747565b820191906000526020600020905b81548152906001019060200180831161072a57829003601f168201915b505050505090508051845114801561076c575080805190602001208480519060200120145b6107de5760405162461bcd60e51b815260206004820152602660248201527f4c7a4170703a20696e76616c696420736f757263652073656e64696e6720636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016106a7565b6107ea85858585611660565b5050505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b6065546040517f07e0db1700000000000000000000000000000000000000000000000000000000815261ffff8316600482015273ffffffffffffffffffffffffffffffffffffffff909116906307e0db17906024015b600060405180830381600087803b1580156108c857600080fd5b505af11580156107ea573d6000803e3d6000fd5b333b1561092b5760405162461bcd60e51b815260206004820152600f60248201527f4163636f756e74206e6f7420454f41000000000000000000000000000000000060448201526064016106a7565b61093c87873333898989898961176b565b50505050505050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146109ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b6065546040517f10ddb13700000000000000000000000000000000000000000000000000000000815261ffff8316600482015273ffffffffffffffffffffffffffffffffffffffff909116906310ddb137906024016108ae565b60335473ffffffffffffffffffffffffffffffffffffffff163314610a6d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b60ce55565b61ffff831660009081526066602052604081208054829190610a9390612f60565b80601f0160208091040260200160405190810160405280929190818152602001828054610abf90612f60565b8015610b0c5780601f10610ae157610100808354040283529160200191610b0c565b820191906000526020600020905b815481529060010190602001808311610aef57829003601f168201915b505050505090508383604051610b23929190612fb4565b60405180910390208180519060200120149150505b9392505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610ba65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b6065546040517f42d65a8d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff909116906342d65a8d90610c0090869086908690600401612fef565b600060405180830381600087803b158015610c1a57600080fd5b505af115801561093c573d6000803e3d6000fd5b610c3f88883389898989898961176b565b5050505050505050565b333014610cbe5760405162461bcd60e51b815260206004820152602660248201527f4e6f6e626c6f636b696e674c7a4170703a2063616c6c6572206d75737420626560448201527f204c7a417070000000000000000000000000000000000000000000000000000060648201526084016106a7565b610cca84848484611a65565b50505050565b600054610100900460ff1680610ce9575060005460ff16155b610d5b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff16158015610d7d576000805461ffff19166101011790555b73ffffffffffffffffffffffffffffffffffffffff8416610e065760405162461bcd60e51b815260206004820152602260248201527f6c7a20656e64706f696e742063616e6e6f74206265207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b610e0f84611be3565b60cd805461ffff191661ffff85161790556040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084901b166020820152610e6c9084906034016040516020818303038152906040526113d3565b4260d0556969e10de76676d080000060ce558015610cca57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610f195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b610f236000611ccb565b565b60666020526000908152604090208054610f3e90612f60565b80601f0160208091040260200160405190810160405280929190818152602001828054610f6a90612f60565b8015610fb75780601f10610f8c57610100808354040283529160200191610fb7565b820191906000526020600020905b815481529060010190602001808311610f9a57829003601f168201915b505050505081565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110265760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b60cd805483151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff8216811790925561106f9161ffff908116911617600183611073565b5050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146110da5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b6000811161112a5760405162461bcd60e51b815260206004820152601c60248201527f4c7a4170703a20696e76616c6964205f647374476173416d6f756e740000000060448201526064016106a7565b61ffff90921660009081526067602090815260408083209383529290522055565b60335473ffffffffffffffffffffffffffffffffffffffff1633146111b25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b6065546040517fcbed8b9c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063cbed8b9c90611210908890889088908890889060040161300d565b600060405180830381600087803b15801561122a57600080fd5b505af115801561123e573d6000803e3d6000fd5b505050505050505050565b61ffff84166000908152609a6020526040808220905161126a90869061303b565b908152604080516020928190038301902067ffffffffffffffff8616600090815292529020549050806113055760405162461bcd60e51b815260206004820152602360248201527f4e6f6e626c6f636b696e674c7a4170703a206e6f2073746f726564206d65737360448201527f616765000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b8151602083012081146113805760405162461bcd60e51b815260206004820152602160248201527f4e6f6e626c6f636b696e674c7a4170703a20696e76616c6964207061796c6f6160448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016106a7565b61ffff85166000908152609a602052604080822090516113a190879061303b565b908152604080516020928190038301902067ffffffffffffffff8716600090815292529020556107ea85858585611a65565b60335473ffffffffffffffffffffffffffffffffffffffff16331461143a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b61ffff82166000908152606660209081526040909120825161145e928401906127de565b507ffa41487ad5d6728f0b19276fa1eddc16558578f5109fc39d2dc33c3230470dab8282604051611490929190613057565b60405180910390a15050565b60335473ffffffffffffffffffffffffffffffffffffffff1633146115035760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106a7565b73ffffffffffffffffffffffffffffffffffffffff811661158c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016106a7565b61159581611ccb565b50565b6065546040517ff5ecbdbc00000000000000000000000000000000000000000000000000000000815261ffff8087166004830152851660248201523060448201526064810183905260609173ffffffffffffffffffffffffffffffffffffffff169063f5ecbdbc9060840160006040518083038186803b15801561161b57600080fd5b505afa15801561162f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261165791908101906130b9565b95945050505050565b6040517f66ad5c8a00000000000000000000000000000000000000000000000000000000815230906366ad5c8a906116a29087908790879087906004016130ee565b600060405180830381600087803b1580156116bc57600080fd5b505af19250505080156116cd575060015b610cca578080519060200120609a60008661ffff1661ffff16815260200190815260200160002084604051611702919061303b565b90815260408051918290036020908101832067ffffffffffffffff87166000908152915220919091557fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d9061175e9086908690869086906130ee565b60405180910390a1610cca565b73ffffffffffffffffffffffffffffffffffffffff86166117ce5760405162461bcd60e51b815260206004820152601a60248201527f5f746f2063616e6e6f74206265207a65726f206164647265737300000000000060448201526064016106a7565b60d0546117de906201518061315c565b421015611855578460cf60008282546117f7919061315c565b909155505060ce5460cf5411156118505760405162461bcd60e51b815260206004820152601b60248201527f6d617820616d6f756e742070657220646179206578636565646564000000000060448201526064016106a7565b61185f565b60cf8590554260d0555b61188173ffffffffffffffffffffffffffffffffffffffff8a16883088611d42565b6000898989898987876040516020016118a09796959493929190613174565b60408051808303601f1901815291905260cd5490915062010000900460ff16156118de5760cd546118d99061ffff166001866000611e00565b611952565b8351156119525760405162461bcd60e51b8152602060048201526024808201527f4c7a4170703a205f61646170746572506172616d73206d75737420626520656d60448201527f7074792e0000000000000000000000000000000000000000000000000000000060648201526084016106a7565b73ffffffffffffffffffffffffffffffffffffffff808b16600090815260d160209081526040808320938d168352929052205461199090879061315c565b73ffffffffffffffffffffffffffffffffffffffff808c16600090815260d160209081526040808320938e168352929052205560cd546119d79061ffff1682338888611ee5565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167f718594027abd4eaed59f95162563e0cc6d0e8d5b86b1c7be8b1b0ac3343d03968a8a8888604051611a5194939291906131d1565b60405180910390a450505050505050505050565b60cd5461ffff858116911614611abd5760405162461bcd60e51b815260206004820152601660248201527f496e76616c696420736f7572636520636861696e49640000000000000000000060448201526064016106a7565b60008060008060008086806020019051810190611ada9190613211565b73ffffffffffffffffffffffffffffffffffffffff808716600090815260d16020908152604080832093891683529290522054959b50939950919750955093509150611b279083906132a5565b73ffffffffffffffffffffffffffffffffffffffff808816600081815260d160209081526040808320948b1683529390529190912091909155611b6b908484612097565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167f3ceee06c1e37648fcbb6ed52e17b3e1f275a1f8c7b22a84b2b84732431e046b3868686604051611a51939291906132bc565b600054610100900460ff1680611bfc575060005460ff16155b611c6e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff16158015611c90576000805461ffff19166101011790555b611c99826120f2565b801561106f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60405173ffffffffffffffffffffffffffffffffffffffff80851660248301528316604482015260648101829052610cca9085907f23b872dd00000000000000000000000000000000000000000000000000000000906084015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526121b0565b6000611e0d836022015190565b61ffff8616600090815260676020908152604080832088845290915281205491925090611e3b90849061315c565b905060008111611e8d5760405162461bcd60e51b815260206004820152601a60248201527f4c7a4170703a206d696e4761734c696d6974206e6f742073657400000000000060448201526064016106a7565b80821015611edd5760405162461bcd60e51b815260206004820152601b60248201527f4c7a4170703a20676173206c696d697420697320746f6f206c6f77000000000060448201526064016106a7565b505050505050565b61ffff851660009081526066602052604081208054611f0390612f60565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2f90612f60565b8015611f7c5780601f10611f5157610100808354040283529160200191611f7c565b820191906000526020600020905b815481529060010190602001808311611f5f57829003601f168201915b50505050509050805160001415611ffb5760405162461bcd60e51b815260206004820152603060248201527f4c7a4170703a2064657374696e6174696f6e20636861696e206973206e6f742060448201527f61207472757374656420736f757263650000000000000000000000000000000060648201526084016106a7565b6065546040517fc580310000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091169063c580310090349061205d908a9086908b908b908b908b906004016132f1565b6000604051808303818588803b15801561207657600080fd5b505af115801561208a573d6000803e3d6000fd5b5050505050505050505050565b60405173ffffffffffffffffffffffffffffffffffffffff83166024820152604481018290526120ed9084907fa9059cbb0000000000000000000000000000000000000000000000000000000090606401611d9c565b505050565b600054610100900460ff168061210b575060005460ff16155b61217d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff1615801561219f576000805461ffff19166101011790555b6121a76122a2565b611c9982612390565b6000612212826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166124af9092919063ffffffff16565b8051909150156120ed57808060200190518101906122309190613358565b6120ed5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff16806122bb575060005460ff16155b61232d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff1615801561234f576000805461ffff19166101011790555b6123576124c6565b61235f6125a3565b801561159557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff16806123a9575060005460ff16155b61241b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff1615801561243d576000805461ffff19166101011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055801561106f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b60606124be8484600085612659565b949350505050565b600054610100900460ff16806124df575060005460ff16155b6125515760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff1615801561235f576000805461ffff1916610101179055801561159557600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff16806125bc575060005460ff16155b61262e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016106a7565b600054610100900460ff16158015612650576000805461ffff19166101011790555b61235f33611ccb565b6060824710156126d15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016106a7565b843b61271f5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016106a7565b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612748919061303b565b60006040518083038185875af1925050503d8060008114612785576040519150601f19603f3d011682016040523d82523d6000602084013e61278a565b606091505b509150915061279a8282866127a5565b979650505050505050565b606083156127b4575081610b38565b8251156127c45782518084602001fd5b8160405162461bcd60e51b81526004016106a79190612d8e565b8280546127ea90612f60565b90600052602060002090601f01602090048101928261280c5760008555612852565b82601f1061282557805160ff1916838001178555612852565b82800160010185558215612852579182015b82811115612852578251825591602001919060010190612837565b5061285e929150612862565b5090565b5b8082111561285e5760008155600101612863565b803561ffff8116811461288957600080fd5b919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128e6576128e661288e565b604052919050565b600067ffffffffffffffff8211156129085761290861288e565b50601f01601f191660200190565b600082601f83011261292757600080fd5b813561293a612935826128ee565b6128bd565b81815284602083860101111561294f57600080fd5b816020850160208301376000918101602001919091529392505050565b803567ffffffffffffffff8116811461288957600080fd5b6000806000806080858703121561299a57600080fd5b6129a385612877565b9350602085013567ffffffffffffffff808211156129c057600080fd5b6129cc88838901612916565b94506129da6040880161296c565b935060608701359150808211156129f057600080fd5b506129fd87828801612916565b91505092959194509250565b60008060408385031215612a1c57600080fd5b612a2583612877565b946020939093013593505050565b600060208284031215612a4557600080fd5b610b3882612877565b73ffffffffffffffffffffffffffffffffffffffff8116811461159557600080fd5b60008083601f840112612a8257600080fd5b50813567ffffffffffffffff811115612a9a57600080fd5b602083019150836020828501011115612ab257600080fd5b9250929050565b600080600080600080600060c0888a031215612ad457600080fd5b8735612adf81612a4e565b96506020880135612aef81612a4e565b9550604088013594506060880135612b0681612a4e565b9350608088013567ffffffffffffffff80821115612b2357600080fd5b612b2f8b838c01612916565b945060a08a0135915080821115612b4557600080fd5b50612b528a828b01612a70565b989b979a50959850939692959293505050565b600060208284031215612b7757600080fd5b5035919050565b600080600060408486031215612b9357600080fd5b612b9c84612877565b9250602084013567ffffffffffffffff811115612bb857600080fd5b612bc486828701612a70565b9497909650939450505050565b600080600060608486031215612be657600080fd5b612bef84612877565b9250602084013567ffffffffffffffff811115612c0b57600080fd5b612c1786828701612916565b925050612c266040850161296c565b90509250925092565b60008060008060008060008060e0898b031215612c4b57600080fd5b8835612c5681612a4e565b97506020890135612c6681612a4e565b96506040890135612c7681612a4e565b9550606089013594506080890135612c8d81612a4e565b935060a089013567ffffffffffffffff80821115612caa57600080fd5b612cb68c838d01612916565b945060c08b0135915080821115612ccc57600080fd5b50612cd98b828c01612a70565b999c989b5096995094979396929594505050565b600080600060608486031215612d0257600080fd5b8335612d0d81612a4e565b9250612d1b60208501612877565b91506040840135612d2b81612a4e565b809150509250925092565b60005b83811015612d51578181015183820152602001612d39565b83811115610cca5750506000910152565b60008151808452612d7a816020860160208601612d36565b601f01601f19169290920160200192915050565b602081526000610b386020830184612d62565b801515811461159557600080fd5b60008060408385031215612dc257600080fd5b8235612a2581612da1565b60008060408385031215612de057600080fd5b8235612deb81612a4e565b91506020830135612dfb81612a4e565b809150509250929050565b600080600060608486031215612e1b57600080fd5b612e2484612877565b95602085013595506040909401359392505050565b600080600080600060808688031215612e5157600080fd5b612e5a86612877565b9450612e6860208701612877565b935060408601359250606086013567ffffffffffffffff811115612e8b57600080fd5b612e9788828901612a70565b969995985093965092949392505050565b60008060408385031215612ebb57600080fd5b612ec483612877565b9150602083013567ffffffffffffffff811115612ee057600080fd5b612eec85828601612916565b9150509250929050565b600060208284031215612f0857600080fd5b8135610b3881612a4e565b60008060008060808587031215612f2957600080fd5b612f3285612877565b9350612f4060208601612877565b92506040850135612f5081612a4e565b9396929550929360600135925050565b600181811c90821680612f7457607f821691505b60208210811415612fae577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b8183823760009101908152919050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b61ffff84168152604060208201526000611657604083018486612fc4565b600061ffff80881683528087166020840152508460408301526080606083015261279a608083018486612fc4565b6000825161304d818460208701612d36565b9190910192915050565b61ffff831681526040602082015260006124be6040830184612d62565b600082601f83011261308557600080fd5b8151613093612935826128ee565b8181528460208386010111156130a857600080fd5b6124be826020830160208701612d36565b6000602082840312156130cb57600080fd5b815167ffffffffffffffff8111156130e257600080fd5b6124be84828501613074565b61ffff8516815260806020820152600061310b6080830186612d62565b67ffffffffffffffff85166040840152828103606084015261279a8185612d62565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561316f5761316f61312d565b500190565b600073ffffffffffffffffffffffffffffffffffffffff808a1683528089166020840152808816604084015280871660608401525084608083015260c060a08301526131c460c083018486612fc4565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000613207606083018486612fc4565b9695505050505050565b60008060008060008060c0878903121561322a57600080fd5b865161323581612a4e565b602088015190965061324681612a4e565b604088015190955061325781612a4e565b606088015190945061326881612a4e565b608088015160a0890151919450925067ffffffffffffffff81111561328c57600080fd5b61329889828a01613074565b9150509295509295509295565b6000828210156132b7576132b761312d565b500390565b73ffffffffffffffffffffffffffffffffffffffff841681528260208201526060604082015260006116576060830184612d62565b61ffff8716815260c06020820152600061330e60c0830188612d62565b82810360408401526133208188612d62565b73ffffffffffffffffffffffffffffffffffffffff87811660608601528616608085015283810360a085015290506131c48185612d62565b60006020828403121561336a57600080fd5b8151610b3881612da156fea164736f6c6343000809000a",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/packages/boba/gateway/src/deployment/contracts/crosschain/L2StandardERC20.json b/packages/boba/gateway/src/deployment/contracts/crosschain/L2StandardERC20.json
new file mode 100644
index 0000000000..b5b9c82326
--- /dev/null
+++ b/packages/boba/gateway/src/deployment/contracts/crosschain/L2StandardERC20.json
@@ -0,0 +1,431 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "L2StandardERC20",
+ "sourceName": "contracts/standards/L2StandardERC20.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_l2Bridge",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "_l1Token",
+ "type": "address"
+ },
+ {
+ "internalType": "string",
+ "name": "_name",
+ "type": "string"
+ },
+ {
+ "internalType": "string",
+ "name": "_symbol",
+ "type": "string"
+ },
+ {
+ "internalType": "uint8",
+ "name": "decimals_",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Approval",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_account",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "Burn",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "_account",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "Mint",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "from",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "to",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "value",
+ "type": "uint256"
+ }
+ ],
+ "name": "Transfer",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "owner",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ }
+ ],
+ "name": "allowance",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "approve",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "account",
+ "type": "address"
+ }
+ ],
+ "name": "balanceOf",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_from",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "burn",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "decimals",
+ "outputs": [
+ {
+ "internalType": "uint8",
+ "name": "",
+ "type": "uint8"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "subtractedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "decreaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "spender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "addedValue",
+ "type": "uint256"
+ }
+ ],
+ "name": "increaseAllowance",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "l1Token",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "l2Bridge",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_to",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "mint",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "name",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes4",
+ "name": "_interfaceId",
+ "type": "bytes4"
+ }
+ ],
+ "name": "supportsInterface",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "symbol",
+ "outputs": [
+ {
+ "internalType": "string",
+ "name": "",
+ "type": "string"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "totalSupply",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transfer",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "recipient",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "amount",
+ "type": "uint256"
+ }
+ ],
+ "name": "transferFrom",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60a06040523480156200001157600080fd5b50604051620013fd380380620013fd833981016040819052620000349162000234565b8251839083906200004d906003906020850190620000a4565b50805162000063906004906020840190620000a4565b5050600580546001600160a01b039687166001600160a01b0319918216179091556006805497909616961695909517909355505060ff16608052506200031d565b828054620000b290620002e0565b90600052602060002090601f016020900481019282620000d6576000855562000121565b82601f10620000f157805160ff191683800117855562000121565b8280016001018555821562000121579182015b828111156200012157825182559160200191906001019062000104565b506200012f92915062000133565b5090565b5b808211156200012f576000815560010162000134565b80516001600160a01b03811681146200016257600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200018f57600080fd5b81516001600160401b0380821115620001ac57620001ac62000167565b604051601f8301601f19908116603f01168101908282118183101715620001d757620001d762000167565b81604052838152602092508683858801011115620001f457600080fd5b600091505b83821015620002185785820183015181830184015290820190620001f9565b838211156200022a5760008385830101525b9695505050505050565b600080600080600060a086880312156200024d57600080fd5b62000258866200014a565b945062000268602087016200014a565b60408701519094506001600160401b03808211156200028657600080fd5b6200029489838a016200017d565b94506060880151915080821115620002ab57600080fd5b50620002ba888289016200017d565b925050608086015160ff81168114620002d257600080fd5b809150509295509295909350565b600181811c90821680620002f557607f821691505b602082108114156200031757634e487b7160e01b600052602260045260246000fd5b50919050565b6080516110c462000339600039600061018101526110c46000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610237578063ae1f6aaf1461024a578063c01e1bd61461028f578063dd62ed3e146102af57600080fd5b806370a08231146101d357806395d89b41146102095780639dc29fac14610211578063a457c2d71461022457600080fd5b806323b872dd116100d357806323b872dd14610167578063313ce5671461017a57806339509351146101ab57806340c10f19146101be57600080fd5b806301ffc9a71461010557806306fdde031461012d578063095ea7b31461014257806318160ddd14610155575b600080fd5b610118610113366004610e6c565b6102f5565b60405190151581526020015b60405180910390f35b6101356103b5565b6040516101249190610eb5565b610118610150366004610f51565b610447565b6002545b604051908152602001610124565b610118610175366004610f7b565b61045d565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610124565b6101186101b9366004610f51565b61052e565b6101d16101cc366004610f51565b610577565b005b6101596101e1366004610fb7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61013561063c565b6101d161021f366004610f51565b61064b565b610118610232366004610f51565b610704565b610118610245366004610f51565b6107c2565b60065461026a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b60055461026a9073ffffffffffffffffffffffffffffffffffffffff1681565b6101596102bd366004610fd2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27f1d1d8b63000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084167f01ffc9a70000000000000000000000000000000000000000000000000000000014806103ad57507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b949350505050565b6060600380546103c490611005565b80601f01602080910402602001604051908101604052809291908181526020018280546103f090611005565b801561043d5780601f106104125761010080835404028352916020019161043d565b820191906000526020600020905b81548152906001019060200180831161042057829003601f168201915b5050505050905090565b60006104543384846107cf565b50600192915050565b600061046a84848461094f565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156105165760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052385338584036107cf565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610454918590610572908690611088565b6107cf565b60065473ffffffffffffffffffffffffffffffffffffffff1633146105de5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e604482015260640161050d565b6105e88282610bb5565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161063091815260200190565b60405180910390a25050565b6060600480546103c490611005565b60065473ffffffffffffffffffffffffffffffffffffffff1633146106b25760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e604482015260640161050d565b6106bc8282610cbb565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161063091815260200190565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161050d565b6107b833858584036107cf565b5060019392505050565b600061045433848461094f565b73ffffffffffffffffffffffffffffffffffffffff83166108575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff82166108e05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109d85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff8216610a615760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b41908490611088565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ba791815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610c185760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161050d565b8060026000828254610c2a9190611088565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610c64908490611088565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610d445760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610de05760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610e1c9084906110a0565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610942565b600060208284031215610e7e57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610eae57600080fd5b9392505050565b600060208083528351808285015260005b81811015610ee257858101830151858201604001528201610ec6565b81811115610ef4576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4c57600080fd5b919050565b60008060408385031215610f6457600080fd5b610f6d83610f28565b946020939093013593505050565b600080600060608486031215610f9057600080fd5b610f9984610f28565b9250610fa760208501610f28565b9150604084013590509250925092565b600060208284031215610fc957600080fd5b610eae82610f28565b60008060408385031215610fe557600080fd5b610fee83610f28565b9150610ffc60208401610f28565b90509250929050565b600181811c9082168061101957607f821691505b60208210811415611053577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561109b5761109b611059565b500190565b6000828210156110b2576110b2611059565b50039056fea164736f6c6343000809000a",
+ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c806370a0823111610097578063a9059cbb11610066578063a9059cbb14610237578063ae1f6aaf1461024a578063c01e1bd61461028f578063dd62ed3e146102af57600080fd5b806370a08231146101d357806395d89b41146102095780639dc29fac14610211578063a457c2d71461022457600080fd5b806323b872dd116100d357806323b872dd14610167578063313ce5671461017a57806339509351146101ab57806340c10f19146101be57600080fd5b806301ffc9a71461010557806306fdde031461012d578063095ea7b31461014257806318160ddd14610155575b600080fd5b610118610113366004610e6c565b6102f5565b60405190151581526020015b60405180910390f35b6101356103b5565b6040516101249190610eb5565b610118610150366004610f51565b610447565b6002545b604051908152602001610124565b610118610175366004610f7b565b61045d565b60405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152602001610124565b6101186101b9366004610f51565b61052e565b6101d16101cc366004610f51565b610577565b005b6101596101e1366004610fb7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b61013561063c565b6101d161021f366004610f51565b61064b565b610118610232366004610f51565b610704565b610118610245366004610f51565b6107c2565b60065461026a9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610124565b60055461026a9073ffffffffffffffffffffffffffffffffffffffff1681565b6101596102bd366004610fd2565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b60007f01ffc9a7a5cef8baa21ed3c5c0d7e23accb804b619e9333b597f47a0d84076e27f1d1d8b63000000000000000000000000000000000000000000000000000000007fffffffff0000000000000000000000000000000000000000000000000000000084167f01ffc9a70000000000000000000000000000000000000000000000000000000014806103ad57507fffffffff00000000000000000000000000000000000000000000000000000000848116908216145b949350505050565b6060600380546103c490611005565b80601f01602080910402602001604051908101604052809291908181526020018280546103f090611005565b801561043d5780601f106104125761010080835404028352916020019161043d565b820191906000526020600020905b81548152906001019060200180831161042057829003601f168201915b5050505050905090565b60006104543384846107cf565b50600192915050565b600061046a84848461094f565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600160209081526040808320338452909152902054828110156105165760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206160448201527f6c6c6f77616e636500000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b61052385338584036107cf565b506001949350505050565b33600081815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684529091528120549091610454918590610572908690611088565b6107cf565b60065473ffffffffffffffffffffffffffffffffffffffff1633146105de5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e604482015260640161050d565b6105e88282610bb5565b8173ffffffffffffffffffffffffffffffffffffffff167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d41213968858260405161063091815260200190565b60405180910390a25050565b6060600480546103c490611005565b60065473ffffffffffffffffffffffffffffffffffffffff1633146106b25760405162461bcd60e51b815260206004820181905260248201527f4f6e6c79204c32204272696467652063616e206d696e7420616e64206275726e604482015260640161050d565b6106bc8282610cbb565b8173ffffffffffffffffffffffffffffffffffffffff167fcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca58260405161063091815260200190565b33600090815260016020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152812054828110156107ab5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760448201527f207a65726f000000000000000000000000000000000000000000000000000000606482015260840161050d565b6107b833858584036107cf565b5060019392505050565b600061045433848461094f565b73ffffffffffffffffffffffffffffffffffffffff83166108575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f7265737300000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff82166108e05760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f7373000000000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff83811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff83166109d85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f6472657373000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff8216610a615760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f6573730000000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff831660009081526020819052604090205481811015610afd5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e63650000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260208190526040808220858503905591851681529081208054849290610b41908490611088565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ba791815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff8216610c185760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161050d565b8060026000828254610c2a9190611088565b909155505073ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604081208054839290610c64908490611088565b909155505060405181815273ffffffffffffffffffffffffffffffffffffffff8316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b73ffffffffffffffffffffffffffffffffffffffff8216610d445760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f7300000000000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090205481811015610de05760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f6365000000000000000000000000000000000000000000000000000000000000606482015260840161050d565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260408120838303905560028054849290610e1c9084906110a0565b909155505060405182815260009073ffffffffffffffffffffffffffffffffffffffff8516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001610942565b600060208284031215610e7e57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610eae57600080fd5b9392505050565b600060208083528351808285015260005b81811015610ee257858101830151858201604001528201610ec6565b81811115610ef4576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610f4c57600080fd5b919050565b60008060408385031215610f6457600080fd5b610f6d83610f28565b946020939093013593505050565b600080600060608486031215610f9057600080fd5b610f9984610f28565b9250610fa760208501610f28565b9150604084013590509250925092565b600060208284031215610fc957600080fd5b610eae82610f28565b60008060408385031215610fe557600080fd5b610fee83610f28565b9150610ffc60208401610f28565b90509250929050565b600181811c9082168061101957607f821691505b60208210811415611053577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561109b5761109b611059565b500190565b6000828210156110b2576110b2611059565b50039056fea164736f6c6343000809000a",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/packages/boba/gateway/src/deployment/contracts/crosschain/LZEndpointMock.json b/packages/boba/gateway/src/deployment/contracts/crosschain/LZEndpointMock.json
new file mode 100644
index 0000000000..41a125f88e
--- /dev/null
+++ b/packages/boba/gateway/src/deployment/contracts/crosschain/LZEndpointMock.json
@@ -0,0 +1,913 @@
+{
+ "_format": "hh-sol-artifact-1",
+ "contractName": "LZEndpointMock",
+ "sourceName": "contracts/test-helpers/mocks/LZEndpointMock.sol",
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_chainId",
+ "type": "uint16"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "constructor"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint16",
+ "name": "srcChainId",
+ "type": "uint16"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "srcAddress",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint64",
+ "name": "nonce",
+ "type": "uint64"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "dstAddress",
+ "type": "address"
+ }
+ ],
+ "name": "PayloadCleared",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint16",
+ "name": "srcChainId",
+ "type": "uint16"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "srcAddress",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "address",
+ "name": "dstAddress",
+ "type": "address"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint64",
+ "name": "nonce",
+ "type": "uint64"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "payload",
+ "type": "bytes"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "reason",
+ "type": "bytes"
+ }
+ ],
+ "name": "PayloadStored",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": false,
+ "internalType": "uint16",
+ "name": "chainId",
+ "type": "uint16"
+ },
+ {
+ "indexed": false,
+ "internalType": "bytes",
+ "name": "srcAddress",
+ "type": "bytes"
+ }
+ ],
+ "name": "UaForceResumeReceive",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "_a",
+ "type": "address"
+ }
+ ],
+ "name": "addrToPackedBytes",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "blockNextMsg",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_payload",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ },
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "name": "estimateFees",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "_nativeFee",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_zroFee",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ }
+ ],
+ "name": "forceResumeReceive",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "getChainId",
+ "outputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "getConfig",
+ "outputs": [
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_chainID",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ }
+ ],
+ "name": "getInboundNonce",
+ "outputs": [
+ {
+ "internalType": "uint64",
+ "name": "",
+ "type": "uint64"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ }
+ ],
+ "name": "getLengthOfQueue",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_chainID",
+ "type": "uint16"
+ },
+ {
+ "internalType": "address",
+ "name": "_srcAddress",
+ "type": "address"
+ }
+ ],
+ "name": "getOutboundNonce",
+ "outputs": [
+ {
+ "internalType": "uint64",
+ "name": "",
+ "type": "uint64"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "getReceiveLibraryAddress",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "getReceiveVersion",
+ "outputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "getSendLibraryAddress",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "getSendVersion",
+ "outputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ }
+ ],
+ "name": "hasStoredPayload",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "name": "inboundNonce",
+ "outputs": [
+ {
+ "internalType": "uint64",
+ "name": "",
+ "type": "uint64"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "isReceivingPayload",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "isSendingPayload",
+ "outputs": [
+ {
+ "internalType": "bool",
+ "name": "",
+ "type": "bool"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "lzEndpointLookup",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "mockBlockConfirmations",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "mockChainId",
+ "outputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "mockLayerZeroVersion",
+ "outputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "mockLibraryVersion",
+ "outputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "mockOracle",
+ "outputs": [
+ {
+ "internalType": "address payable",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "mockRelayer",
+ "outputs": [
+ {
+ "internalType": "address payable",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "mockStaticNativeFee",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "name": "msgsToDeliver",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "dstAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint64",
+ "name": "nonce",
+ "type": "uint64"
+ },
+ {
+ "internalType": "bytes",
+ "name": "payload",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "nativeFee",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "name": "outboundNonce",
+ "outputs": [
+ {
+ "internalType": "uint64",
+ "name": "",
+ "type": "uint64"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes",
+ "name": "_b",
+ "type": "bytes"
+ }
+ ],
+ "name": "packedBytesToAddr",
+ "outputs": [
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ }
+ ],
+ "stateMutability": "pure",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ },
+ {
+ "internalType": "address",
+ "name": "_dstAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "uint64",
+ "name": "_nonce",
+ "type": "uint64"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_payload",
+ "type": "bytes"
+ }
+ ],
+ "name": "receivePayload",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_srcChainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_srcAddress",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_payload",
+ "type": "bytes"
+ }
+ ],
+ "name": "retryPayload",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "_chainId",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_destination",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_payload",
+ "type": "bytes"
+ },
+ {
+ "internalType": "address payable",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes",
+ "name": "_adapterParams",
+ "type": "bytes"
+ }
+ ],
+ "name": "send",
+ "outputs": [],
+ "stateMutability": "payable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ },
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "name": "setConfig",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "destAddr",
+ "type": "address"
+ },
+ {
+ "internalType": "address",
+ "name": "lzEndpointAddr",
+ "type": "address"
+ }
+ ],
+ "name": "setDestLzEndpoint",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint256",
+ "name": "_nativeFee",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "_zroFee",
+ "type": "uint256"
+ }
+ ],
+ "name": "setEstimatedFees",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ }
+ ],
+ "name": "setReceiveVersion",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ }
+ ],
+ "name": "setSendVersion",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "uint16",
+ "name": "",
+ "type": "uint16"
+ },
+ {
+ "internalType": "bytes",
+ "name": "",
+ "type": "bytes"
+ }
+ ],
+ "name": "storedPayload",
+ "outputs": [
+ {
+ "internalType": "uint64",
+ "name": "payloadLength",
+ "type": "uint64"
+ },
+ {
+ "internalType": "address",
+ "name": "dstAddress",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "payloadHash",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [],
+ "name": "zroFee",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": "0x60806040523480156200001157600080fd5b506040516200299138038062002991833981016040819052620000349162000061565b602a60055560068054600161ffff19918216811790925581541661ffff929092169190911790556200008e565b6000602082840312156200007457600080fd5b815161ffff811681146200008757600080fd5b9392505050565b6128f3806200009e6000396000f3fe6080604052600436106102a05760003560e01c8063996f79c01161016e578063ca066b35116100cb578063db14f3051161007f578063e97a448a11610064578063e97a448a14610862578063f5ecbdbc14610938578063fdc07c701461096a57600080fd5b8063db14f30514610907578063e961a9521461092257600080fd5b8063d23104f1116100b0578063d23104f114610897578063da1a7c9a146102f8578063dab31277146108d457600080fd5b8063ca066b3514610862578063cbed8b9c1461087657600080fd5b8063b208649911610122578063c2fa481311610107578063c2fa4813146107ec578063c58031001461080c578063c81b383a1461081f57600080fd5b8063b20864991461073c578063c08f15a11461077e57600080fd5b8063aaff5f1611610153578063aaff5f16146106eb578063af406aa51461070b578063b12107701461072157600080fd5b8063996f79c0146106d55780639c729da11461050f57600080fd5b806340a7bb101161021c57806371ba2fd6116101d05780637a145748116101b55780637a145748146105e95780637f6df8e6146106625780639924d33b1461068257600080fd5b806371ba2fd61461050f57806376a386dc1461052f57600080fd5b80634f055b04116102015780634f055b04146104515780635952c4ec1461047e5780635b301135146104a257600080fd5b806340a7bb10146103fc57806342d65a8d1461043157600080fd5b80630eaf6ea61161027357806312a9ee6b1161025857806312a9ee6b1461038e5780632646af08146103bd5780633408e470146103e357600080fd5b80630eaf6ea61461035e57806310ddb137146102d857600080fd5b806305bc710f146102a557806307e0db17146102d8578063096568f6146102f857806309eddf5414610319575b600080fd5b3480156102b157600080fd5b506004546102c09061ffff1681565b60405161ffff90911681526020015b60405180910390f35b3480156102e457600080fd5b506102f66102f3366004611d8a565b50565b005b34801561030457600080fd5b506102c0610313366004611dce565b50600190565b34801561032557600080fd5b50610339610334366004611e34565b61098a565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102cf565b34801561036a57600080fd5b5061037e610379366004611e76565b6109c5565b60405190151581526020016102cf565b34801561039a57600080fd5b506103ae6103a9366004611fa3565b610a0a565b6040516102cf93929190612065565b3480156103c957600080fd5b506102f66103d83660046120ad565b600791909155600855565b3480156103ef57600080fd5b5060015461ffff166102c0565b34801561040857600080fd5b5061041c6104173660046120cf565b610b26565b604080519283526020830191909152016102cf565b34801561043d57600080fd5b506102f661044c366004611e76565b610b49565b34801561045d57600080fd5b506002546103399073ffffffffffffffffffffffffffffffffffffffff1681565b34801561048a57600080fd5b5061049460035481565b6040519081526020016102cf565b3480156104ae57600080fd5b506105026104bd366004611dce565b6040805160609290921b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166020830152805180830360140181526034909201905290565b6040516102cf9190612170565b34801561051b57600080fd5b5061033961052a366004611dce565b503090565b34801561053b57600080fd5b506105ae61054a366004612183565b600c60209081526000928352604090922081518083018401805192815290840192909301919091209152805460019091015467ffffffffffffffff82169168010000000000000000900473ffffffffffffffffffffffffffffffffffffffff169083565b6040805167ffffffffffffffff909416845273ffffffffffffffffffffffffffffffffffffffff9092166020840152908201526060016102cf565b3480156105f557600080fd5b506106496106043660046121d1565b61ffff82166000908152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205467ffffffffffffffff1692915050565b60405167ffffffffffffffff90911681526020016102cf565b34801561066e57600080fd5b5061049461067d366004611e76565b610cee565b34801561068e57600080fd5b5061064961069d366004612183565b600a602090815260009283526040909220815180830184018051928152908401929093019190912091525467ffffffffffffffff1681565b3480156106e157600080fd5b5061049460075481565b3480156106f757600080fd5b506102f6610706366004612208565b610d2a565b34801561071757600080fd5b5061049460085481565b34801561072d57600080fd5b506006546102c09061ffff1681565b34801561074857600080fd5b506106496107573660046121d1565b600b60209081526000928352604080842090915290825290205467ffffffffffffffff1681565b34801561078a57600080fd5b506102f6610799366004612289565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b3480156107f857600080fd5b506102f66108073660046122a7565b610fc6565b6102f661081a36600461235f565b6116f7565b34801561082b57600080fd5b5061033961083a366004611dce565b60006020819052908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561086e57600080fd5b50600061037e565b34801561088257600080fd5b506102f661089136600461242c565b50505050565b3480156108a357600080fd5b506102f6600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b3480156108e057600080fd5b506001546103399062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561091357600080fd5b506001546102c09061ffff1681565b34801561092e57600080fd5b5061049460055481565b34801561094457600080fd5b50610502610953366004612494565b604080516020810190915260008152949350505050565b34801561097657600080fd5b50610649610985366004611e76565b61198a565b600080604051600284016002860382377ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60151949350505050565b61ffff83166000908152600c602052604080822090518291906109eb90869086906124e1565b9081526040519081900360200190206001015415159150509392505050565b600d6020908152600084815260409020835180850183018051928152908301928501929092209152805482908110610a4157600080fd5b60009182526020909120600290910201805460018201805473ffffffffffffffffffffffffffffffffffffffff831696507401000000000000000000000000000000000000000090920467ffffffffffffffff169450919250610aa3906124f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610acf906124f1565b8015610b1c5780601f10610af157610100808354040283529160200191610b1c565b820191906000526020600020905b815481529060010190602001808311610aff57829003601f168201915b5050505050905083565b6000808451600754610b389190612574565b915060085490509550959350505050565b61ffff83166000908152600c60205260408082209051610b6c90859085906124e1565b9081526040519081900360200190206001810154909150610bee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c617965725a65726f3a206e6f2073746f726564207061796c6f61640000000060448201526064015b60405180910390fd5b805468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4c617965725a65726f3a20696e76616c69642063616c6c6572000000000000006044820152606401610be5565b80547fffffffff00000000000000000000000000000000000000000000000000000000168155600060018201556040517f23d2684f396e92a6e2ff2d16f98e6fea00d50cb27a64b531bc0748f730211f9890610cdb908690869086906125fa565b60405180910390a16108918484846119d0565b61ffff83166000908152600d60205260408082209051610d1190859085906124e1565b9081526040519081900360200190205490509392505050565b61ffff85166000908152600c60205260408082209051610d4d90879087906124e1565b9081526040519081900360200190206001810154909150610dca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c617965725a65726f3a206e6f2073746f726564207061796c6f6164000000006044820152606401610be5565b805467ffffffffffffffff1682148015610dfe575080600101548383604051610df49291906124e1565b6040518091039020145b610e64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f61640000000000006044820152606401610be5565b80547fffffffff000000000000000000000000000000000000000000000000000000008116825560006001830181905561ffff88168152600a602052604080822090516801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff1692610ed890899089906124e1565b908152604051908190036020018120547e1d356700000000000000000000000000000000000000000000000000000000825267ffffffffffffffff16915073ffffffffffffffffffffffffffffffffffffffff831690621d356790610f4b908b908b908b9087908c908c90600401612618565b600060405180830381600087803b158015610f6557600080fd5b505af1158015610f79573d6000803e3d6000fd5b505050507f612434f39581c8e7d99746c9c20c6eb0ce8c0eb99f007c5719d620841370957d8888888486604051610fb4959493929190612666565b60405180910390a15050505050505050565b61ffff88166000908152600c60205260408082209051610fe9908a908a906124e1565b90815260200160405180910390209050600a60008a61ffff1661ffff16815260200190815260200160002088886040516110249291906124e1565b908152604051908190036020019020805460009061104b9067ffffffffffffffff166126bc565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905567ffffffffffffffff168567ffffffffffffffff16146110ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c617965725a65726f3a2077726f6e67206e6f6e6365000000000000000000006044820152606401610be5565b6001810154156114e25761ffff89166000908152600d60205260408082209051611119908b908b906124e1565b90815260200160405180910390209050600060405180606001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018867ffffffffffffffff16815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250825490915015611435578154600181810184556000848152602090819020845160029094020180548286015167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff909516949094179390931783556040840151805185949361124693908501920190611c29565b50505060005b825461125a906001906126e4565b81101561137c57828181548110611273576112736126fb565b90600052602060002090600202018382600161128f919061272a565b8154811061129f5761129f6126fb565b600091825260209091208254600290920201805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117825583547fffffffff0000000000000000000000000000000000000000000000000000000090931617740100000000000000000000000000000000000000009283900467ffffffffffffffff16909202919091178155600180830180549183019161135a906124f1565b611365929190611cad565b50905050808061137490612742565b91505061124c565b508082600081548110611391576113916126fb565b6000918252602091829020835160029092020180548484015167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff9093169290921791909117815560408301518051919261142c92600185019290910190611c29565b509050506114db565b8154600181810184556000848152602090819020845160029094020180548286015167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff90951694909417939093178355604084015180518594936114d793908501920190611c29565b5050505b50506116ec565b60095460ff161561165f5760405180606001604052808484905067ffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200184846040516115379291906124e1565b604080519182900390912090915261ffff8b166000908152600c6020528190209051611566908b908b906124e1565b908152604080519182900360209081018320845181548684015173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090911667ffffffffffffffff909216919091171781559382015160019094019390935591810182526000815290517f0f9e4d95b62f08222d612b5ab92039cd8fbbbea550a95e8df9f927436bbdf5db9161162a918c918c918c918c918c918b918b919061277b565b60405180910390a1600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556116ec565b6040517e1d356700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871690621d3567906116b9908c908c908c908b908a908a90600401612618565b600060405180830381600087803b1580156116d357600080fd5b505af11580156116e7573d6000803e3d6000fd5b505050505b505050505050505050565b6000611703888861098a565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526020819052604090205491925016806117bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c617965725a65726f4d6f636b3a2064657374696e6174696f6e204c6179657260448201527f5a65726f20456e64706f696e74206e6f7420666f756e640000000000000000006064820152608401610be5565b6007546117c9908790612574565b341015611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4c617965725a65726f4d6f636b3a206e6f7420656e6f756768206e617469766560448201527f20666f72206665657300000000000000000000000000000000000000000000006064820152608401610be5565b61ffff8a166000908152600b6020908152604080832033845290915281208054829061188d9067ffffffffffffffff166126bc565b825467ffffffffffffffff8281166101009490940a9384029302191691909117909155604080517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201528151601481830301815260349091019091529091508273ffffffffffffffffffffffffffffffffffffffff1663c2fa4813600160009054906101000a900461ffff1683878660008f8f6040518863ffffffff1660e01b815260040161194a97969594939291906127fb565b600060405180830381600087803b15801561196457600080fd5b505af1158015611978573d6000803e3d6000fd5b50505050505050505050505050505050565b61ffff83166000908152600a602052604080822090516119ad90859085906124e1565b9081526040519081900360200190205467ffffffffffffffff1690509392505050565b61ffff83166000908152600d602052604080822090516119f390859085906124e1565b908152602001604051809103902090505b8054156108915780546000908290611a1e906001906126e4565b81548110611a2e57611a2e6126fb565b6000918252602091829020604080516060810182526002909302909101805473ffffffffffffffffffffffffffffffffffffffff8116845267ffffffffffffffff74010000000000000000000000000000000000000000909104169383019390935260018301805492939291840191611aa6906124f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad2906124f1565b8015611b1f5780601f10611af457610100808354040283529160200191611b1f565b820191906000526020600020905b815481529060010190602001808311611b0257829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff16621d3567868686856020015186604001516040518663ffffffff1660e01b8152600401611b7695949392919061286b565b600060405180830381600087803b158015611b9057600080fd5b505af1158015611ba4573d6000803e3d6000fd5b5050505081805480611bb857611bb86128b7565b60008281526020812060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019283020180547fffffffff0000000000000000000000000000000000000000000000000000000016815590611c1f6001830182611d28565b5050905550611a04565b828054611c35906124f1565b90600052602060002090601f016020900481019282611c575760008555611c9d565b82601f10611c7057805160ff1916838001178555611c9d565b82800160010185558215611c9d579182015b82811115611c9d578251825591602001919060010190611c82565b50611ca9929150611d5e565b5090565b828054611cb9906124f1565b90600052602060002090601f016020900481019282611cdb5760008555611c9d565b82601f10611cec5780548555611c9d565b82800160010185558215611c9d57600052602060002091601f016020900482015b82811115611c9d578254825591600101919060010190611d0d565b508054611d34906124f1565b6000825580601f10611d44575050565b601f0160209004906000526020600020908101906102f391905b5b80821115611ca95760008155600101611d5f565b803561ffff81168114611d8557600080fd5b919050565b600060208284031215611d9c57600080fd5b611da582611d73565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146102f357600080fd5b600060208284031215611de057600080fd5b8135611da581611dac565b60008083601f840112611dfd57600080fd5b50813567ffffffffffffffff811115611e1557600080fd5b602083019150836020828501011115611e2d57600080fd5b9250929050565b60008060208385031215611e4757600080fd5b823567ffffffffffffffff811115611e5e57600080fd5b611e6a85828601611deb565b90969095509350505050565b600080600060408486031215611e8b57600080fd5b611e9484611d73565b9250602084013567ffffffffffffffff811115611eb057600080fd5b611ebc86828701611deb565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112611f0957600080fd5b813567ffffffffffffffff80821115611f2457611f24611ec9565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611f6a57611f6a611ec9565b81604052838152866020858801011115611f8357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215611fb857600080fd5b611fc184611d73565b9250602084013567ffffffffffffffff811115611fdd57600080fd5b611fe986828701611ef8565b925050604084013590509250925092565b6000815180845260005b8181101561202057602081850181015186830182015201612004565b81811115612032576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff831660208201526060604082015260006120a46060830184611ffa565b95945050505050565b600080604083850312156120c057600080fd5b50508035926020909101359150565b600080600080600060a086880312156120e757600080fd5b6120f086611d73565b9450602086013561210081611dac565b9350604086013567ffffffffffffffff8082111561211d57600080fd5b61212989838a01611ef8565b945060608801359150811515821461214057600080fd5b9092506080870135908082111561215657600080fd5b5061216388828901611ef8565b9150509295509295909350565b602081526000611da56020830184611ffa565b6000806040838503121561219657600080fd5b61219f83611d73565b9150602083013567ffffffffffffffff8111156121bb57600080fd5b6121c785828601611ef8565b9150509250929050565b600080604083850312156121e457600080fd5b6121ed83611d73565b915060208301356121fd81611dac565b809150509250929050565b60008060008060006060868803121561222057600080fd5b61222986611d73565b9450602086013567ffffffffffffffff8082111561224657600080fd5b61225289838a01611deb565b9096509450604088013591508082111561226b57600080fd5b5061227888828901611deb565b969995985093965092949392505050565b6000806040838503121561229c57600080fd5b82356121ed81611dac565b60008060008060008060008060c0898b0312156122c357600080fd5b6122cc89611d73565b9750602089013567ffffffffffffffff808211156122e957600080fd5b6122f58c838d01611deb565b909950975060408b0135915061230a82611dac565b90955060608a013590808216821461232157600080fd5b90945060808a0135935060a08a0135908082111561233e57600080fd5b5061234b8b828c01611deb565b999c989b5096995094979396929594505050565b60008060008060008060008060c0898b03121561237b57600080fd5b61238489611d73565b9750602089013567ffffffffffffffff808211156123a157600080fd5b6123ad8c838d01611deb565b909950975060408b01359150808211156123c657600080fd5b6123d28c838d01611deb565b909750955060608b013591506123e782611dac565b90935060808a0135906123f982611dac565b90925060a08a0135908082111561240f57600080fd5b5061241c8b828c01611ef8565b9150509295985092959890939650565b6000806000806080858703121561244257600080fd5b61244b85611d73565b935061245960208601611d73565b925060408501359150606085013567ffffffffffffffff81111561247c57600080fd5b61248887828801611ef8565b91505092959194509250565b600080600080608085870312156124aa57600080fd5b6124b385611d73565b93506124c160208601611d73565b925060408501356124d181611dac565b9396929550929360600135925050565b8183823760009101908152919050565b600181811c9082168061250557607f821691505b6020821081141561253f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125ac576125ac612545565b500290565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b61ffff841681526040602082015260006120a46040830184866125b1565b61ffff871681526080602082015260006126366080830187896125b1565b67ffffffffffffffff8616604084015282810360608401526126598185876125b1565b9998505050505050505050565b61ffff861681526080602082015260006126846080830186886125b1565b905067ffffffffffffffff8416604083015273ffffffffffffffffffffffffffffffffffffffff831660608301529695505050505050565b600067ffffffffffffffff808316818114156126da576126da612545565b6001019392505050565b6000828210156126f6576126f6612545565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561273d5761273d612545565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561277457612774612545565b5060010190565b61ffff8916815260c06020820152600061279960c08301898b6125b1565b73ffffffffffffffffffffffffffffffffffffffff8816604084015267ffffffffffffffff8716606084015282810360808401526127d88186886125b1565b905082810360a08401526127ec8185611ffa565b9b9a5050505050505050505050565b61ffff8816815260c06020820152600061281860c0830189611ffa565b73ffffffffffffffffffffffffffffffffffffffff8816604084015267ffffffffffffffff8716606084015285608084015282810360a084015261285d8185876125b1565b9a9950505050505050505050565b61ffff861681526080602082015260006128896080830186886125b1565b67ffffffffffffffff8516604084015282810360608401526128ab8185611ffa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000809000a",
+ "deployedBytecode": "0x6080604052600436106102a05760003560e01c8063996f79c01161016e578063ca066b35116100cb578063db14f3051161007f578063e97a448a11610064578063e97a448a14610862578063f5ecbdbc14610938578063fdc07c701461096a57600080fd5b8063db14f30514610907578063e961a9521461092257600080fd5b8063d23104f1116100b0578063d23104f114610897578063da1a7c9a146102f8578063dab31277146108d457600080fd5b8063ca066b3514610862578063cbed8b9c1461087657600080fd5b8063b208649911610122578063c2fa481311610107578063c2fa4813146107ec578063c58031001461080c578063c81b383a1461081f57600080fd5b8063b20864991461073c578063c08f15a11461077e57600080fd5b8063aaff5f1611610153578063aaff5f16146106eb578063af406aa51461070b578063b12107701461072157600080fd5b8063996f79c0146106d55780639c729da11461050f57600080fd5b806340a7bb101161021c57806371ba2fd6116101d05780637a145748116101b55780637a145748146105e95780637f6df8e6146106625780639924d33b1461068257600080fd5b806371ba2fd61461050f57806376a386dc1461052f57600080fd5b80634f055b04116102015780634f055b04146104515780635952c4ec1461047e5780635b301135146104a257600080fd5b806340a7bb10146103fc57806342d65a8d1461043157600080fd5b80630eaf6ea61161027357806312a9ee6b1161025857806312a9ee6b1461038e5780632646af08146103bd5780633408e470146103e357600080fd5b80630eaf6ea61461035e57806310ddb137146102d857600080fd5b806305bc710f146102a557806307e0db17146102d8578063096568f6146102f857806309eddf5414610319575b600080fd5b3480156102b157600080fd5b506004546102c09061ffff1681565b60405161ffff90911681526020015b60405180910390f35b3480156102e457600080fd5b506102f66102f3366004611d8a565b50565b005b34801561030457600080fd5b506102c0610313366004611dce565b50600190565b34801561032557600080fd5b50610339610334366004611e34565b61098a565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102cf565b34801561036a57600080fd5b5061037e610379366004611e76565b6109c5565b60405190151581526020016102cf565b34801561039a57600080fd5b506103ae6103a9366004611fa3565b610a0a565b6040516102cf93929190612065565b3480156103c957600080fd5b506102f66103d83660046120ad565b600791909155600855565b3480156103ef57600080fd5b5060015461ffff166102c0565b34801561040857600080fd5b5061041c6104173660046120cf565b610b26565b604080519283526020830191909152016102cf565b34801561043d57600080fd5b506102f661044c366004611e76565b610b49565b34801561045d57600080fd5b506002546103399073ffffffffffffffffffffffffffffffffffffffff1681565b34801561048a57600080fd5b5061049460035481565b6040519081526020016102cf565b3480156104ae57600080fd5b506105026104bd366004611dce565b6040805160609290921b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166020830152805180830360140181526034909201905290565b6040516102cf9190612170565b34801561051b57600080fd5b5061033961052a366004611dce565b503090565b34801561053b57600080fd5b506105ae61054a366004612183565b600c60209081526000928352604090922081518083018401805192815290840192909301919091209152805460019091015467ffffffffffffffff82169168010000000000000000900473ffffffffffffffffffffffffffffffffffffffff169083565b6040805167ffffffffffffffff909416845273ffffffffffffffffffffffffffffffffffffffff9092166020840152908201526060016102cf565b3480156105f557600080fd5b506106496106043660046121d1565b61ffff82166000908152600b6020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205467ffffffffffffffff1692915050565b60405167ffffffffffffffff90911681526020016102cf565b34801561066e57600080fd5b5061049461067d366004611e76565b610cee565b34801561068e57600080fd5b5061064961069d366004612183565b600a602090815260009283526040909220815180830184018051928152908401929093019190912091525467ffffffffffffffff1681565b3480156106e157600080fd5b5061049460075481565b3480156106f757600080fd5b506102f6610706366004612208565b610d2a565b34801561071757600080fd5b5061049460085481565b34801561072d57600080fd5b506006546102c09061ffff1681565b34801561074857600080fd5b506106496107573660046121d1565b600b60209081526000928352604080842090915290825290205467ffffffffffffffff1681565b34801561078a57600080fd5b506102f6610799366004612289565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260208190526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b3480156107f857600080fd5b506102f66108073660046122a7565b610fc6565b6102f661081a36600461235f565b6116f7565b34801561082b57600080fd5b5061033961083a366004611dce565b60006020819052908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b34801561086e57600080fd5b50600061037e565b34801561088257600080fd5b506102f661089136600461242c565b50505050565b3480156108a357600080fd5b506102f6600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b3480156108e057600080fd5b506001546103399062010000900473ffffffffffffffffffffffffffffffffffffffff1681565b34801561091357600080fd5b506001546102c09061ffff1681565b34801561092e57600080fd5b5061049460055481565b34801561094457600080fd5b50610502610953366004612494565b604080516020810190915260008152949350505050565b34801561097657600080fd5b50610649610985366004611e76565b61198a565b600080604051600284016002860382377ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60151949350505050565b61ffff83166000908152600c602052604080822090518291906109eb90869086906124e1565b9081526040519081900360200190206001015415159150509392505050565b600d6020908152600084815260409020835180850183018051928152908301928501929092209152805482908110610a4157600080fd5b60009182526020909120600290910201805460018201805473ffffffffffffffffffffffffffffffffffffffff831696507401000000000000000000000000000000000000000090920467ffffffffffffffff169450919250610aa3906124f1565b80601f0160208091040260200160405190810160405280929190818152602001828054610acf906124f1565b8015610b1c5780601f10610af157610100808354040283529160200191610b1c565b820191906000526020600020905b815481529060010190602001808311610aff57829003601f168201915b5050505050905083565b6000808451600754610b389190612574565b915060085490509550959350505050565b61ffff83166000908152600c60205260408082209051610b6c90859085906124e1565b9081526040519081900360200190206001810154909150610bee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c617965725a65726f3a206e6f2073746f726564207061796c6f61640000000060448201526064015b60405180910390fd5b805468010000000000000000900473ffffffffffffffffffffffffffffffffffffffff163314610c7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4c617965725a65726f3a20696e76616c69642063616c6c6572000000000000006044820152606401610be5565b80547fffffffff00000000000000000000000000000000000000000000000000000000168155600060018201556040517f23d2684f396e92a6e2ff2d16f98e6fea00d50cb27a64b531bc0748f730211f9890610cdb908690869086906125fa565b60405180910390a16108918484846119d0565b61ffff83166000908152600d60205260408082209051610d1190859085906124e1565b9081526040519081900360200190205490509392505050565b61ffff85166000908152600c60205260408082209051610d4d90879087906124e1565b9081526040519081900360200190206001810154909150610dca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4c617965725a65726f3a206e6f2073746f726564207061796c6f6164000000006044820152606401610be5565b805467ffffffffffffffff1682148015610dfe575080600101548383604051610df49291906124e1565b6040518091039020145b610e64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4c617965725a65726f3a20696e76616c6964207061796c6f61640000000000006044820152606401610be5565b80547fffffffff000000000000000000000000000000000000000000000000000000008116825560006001830181905561ffff88168152600a602052604080822090516801000000000000000090930473ffffffffffffffffffffffffffffffffffffffff1692610ed890899089906124e1565b908152604051908190036020018120547e1d356700000000000000000000000000000000000000000000000000000000825267ffffffffffffffff16915073ffffffffffffffffffffffffffffffffffffffff831690621d356790610f4b908b908b908b9087908c908c90600401612618565b600060405180830381600087803b158015610f6557600080fd5b505af1158015610f79573d6000803e3d6000fd5b505050507f612434f39581c8e7d99746c9c20c6eb0ce8c0eb99f007c5719d620841370957d8888888486604051610fb4959493929190612666565b60405180910390a15050505050505050565b61ffff88166000908152600c60205260408082209051610fe9908a908a906124e1565b90815260200160405180910390209050600a60008a61ffff1661ffff16815260200190815260200160002088886040516110249291906124e1565b908152604051908190036020019020805460009061104b9067ffffffffffffffff166126bc565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905567ffffffffffffffff168567ffffffffffffffff16146110ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4c617965725a65726f3a2077726f6e67206e6f6e6365000000000000000000006044820152606401610be5565b6001810154156114e25761ffff89166000908152600d60205260408082209051611119908b908b906124e1565b90815260200160405180910390209050600060405180606001604052808973ffffffffffffffffffffffffffffffffffffffff1681526020018867ffffffffffffffff16815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050915250825490915015611435578154600181810184556000848152602090819020845160029094020180548286015167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff909516949094179390931783556040840151805185949361124693908501920190611c29565b50505060005b825461125a906001906126e4565b81101561137c57828181548110611273576112736126fb565b90600052602060002090600202018382600161128f919061272a565b8154811061129f5761129f6126fb565b600091825260209091208254600290920201805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117825583547fffffffff0000000000000000000000000000000000000000000000000000000090931617740100000000000000000000000000000000000000009283900467ffffffffffffffff16909202919091178155600180830180549183019161135a906124f1565b611365929190611cad565b50905050808061137490612742565b91505061124c565b508082600081548110611391576113916126fb565b6000918252602091829020835160029092020180548484015167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff9093169290921791909117815560408301518051919261142c92600185019290910190611c29565b509050506114db565b8154600181810184556000848152602090819020845160029094020180548286015167ffffffffffffffff1674010000000000000000000000000000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090911673ffffffffffffffffffffffffffffffffffffffff90951694909417939093178355604084015180518594936114d793908501920190611c29565b5050505b50506116ec565b60095460ff161561165f5760405180606001604052808484905067ffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200184846040516115379291906124e1565b604080519182900390912090915261ffff8b166000908152600c6020528190209051611566908b908b906124e1565b908152604080519182900360209081018320845181548684015173ffffffffffffffffffffffffffffffffffffffff1668010000000000000000027fffffffff0000000000000000000000000000000000000000000000000000000090911667ffffffffffffffff909216919091171781559382015160019094019390935591810182526000815290517f0f9e4d95b62f08222d612b5ab92039cd8fbbbea550a95e8df9f927436bbdf5db9161162a918c918c918c918c918c918b918b919061277b565b60405180910390a1600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556116ec565b6040517e1d356700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff871690621d3567906116b9908c908c908c908b908a908a90600401612618565b600060405180830381600087803b1580156116d357600080fd5b505af11580156116e7573d6000803e3d6000fd5b505050505b505050505050505050565b6000611703888861098a565b73ffffffffffffffffffffffffffffffffffffffff80821660009081526020819052604090205491925016806117bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c617965725a65726f4d6f636b3a2064657374696e6174696f6e204c6179657260448201527f5a65726f20456e64706f696e74206e6f7420666f756e640000000000000000006064820152608401610be5565b6007546117c9908790612574565b341015611858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4c617965725a65726f4d6f636b3a206e6f7420656e6f756768206e617469766560448201527f20666f72206665657300000000000000000000000000000000000000000000006064820152608401610be5565b61ffff8a166000908152600b6020908152604080832033845290915281208054829061188d9067ffffffffffffffff166126bc565b825467ffffffffffffffff8281166101009490940a9384029302191691909117909155604080517fffffffffffffffffffffffffffffffffffffffff0000000000000000000000003360601b1660208201528151601481830301815260349091019091529091508273ffffffffffffffffffffffffffffffffffffffff1663c2fa4813600160009054906101000a900461ffff1683878660008f8f6040518863ffffffff1660e01b815260040161194a97969594939291906127fb565b600060405180830381600087803b15801561196457600080fd5b505af1158015611978573d6000803e3d6000fd5b50505050505050505050505050505050565b61ffff83166000908152600a602052604080822090516119ad90859085906124e1565b9081526040519081900360200190205467ffffffffffffffff1690509392505050565b61ffff83166000908152600d602052604080822090516119f390859085906124e1565b908152602001604051809103902090505b8054156108915780546000908290611a1e906001906126e4565b81548110611a2e57611a2e6126fb565b6000918252602091829020604080516060810182526002909302909101805473ffffffffffffffffffffffffffffffffffffffff8116845267ffffffffffffffff74010000000000000000000000000000000000000000909104169383019390935260018301805492939291840191611aa6906124f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611ad2906124f1565b8015611b1f5780601f10611af457610100808354040283529160200191611b1f565b820191906000526020600020905b815481529060010190602001808311611b0257829003601f168201915b5050505050815250509050806000015173ffffffffffffffffffffffffffffffffffffffff16621d3567868686856020015186604001516040518663ffffffff1660e01b8152600401611b7695949392919061286b565b600060405180830381600087803b158015611b9057600080fd5b505af1158015611ba4573d6000803e3d6000fd5b5050505081805480611bb857611bb86128b7565b60008281526020812060027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9093019283020180547fffffffff0000000000000000000000000000000000000000000000000000000016815590611c1f6001830182611d28565b5050905550611a04565b828054611c35906124f1565b90600052602060002090601f016020900481019282611c575760008555611c9d565b82601f10611c7057805160ff1916838001178555611c9d565b82800160010185558215611c9d579182015b82811115611c9d578251825591602001919060010190611c82565b50611ca9929150611d5e565b5090565b828054611cb9906124f1565b90600052602060002090601f016020900481019282611cdb5760008555611c9d565b82601f10611cec5780548555611c9d565b82800160010185558215611c9d57600052602060002091601f016020900482015b82811115611c9d578254825591600101919060010190611d0d565b508054611d34906124f1565b6000825580601f10611d44575050565b601f0160209004906000526020600020908101906102f391905b5b80821115611ca95760008155600101611d5f565b803561ffff81168114611d8557600080fd5b919050565b600060208284031215611d9c57600080fd5b611da582611d73565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146102f357600080fd5b600060208284031215611de057600080fd5b8135611da581611dac565b60008083601f840112611dfd57600080fd5b50813567ffffffffffffffff811115611e1557600080fd5b602083019150836020828501011115611e2d57600080fd5b9250929050565b60008060208385031215611e4757600080fd5b823567ffffffffffffffff811115611e5e57600080fd5b611e6a85828601611deb565b90969095509350505050565b600080600060408486031215611e8b57600080fd5b611e9484611d73565b9250602084013567ffffffffffffffff811115611eb057600080fd5b611ebc86828701611deb565b9497909650939450505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f830112611f0957600080fd5b813567ffffffffffffffff80821115611f2457611f24611ec9565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908282118183101715611f6a57611f6a611ec9565b81604052838152866020858801011115611f8357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215611fb857600080fd5b611fc184611d73565b9250602084013567ffffffffffffffff811115611fdd57600080fd5b611fe986828701611ef8565b925050604084013590509250925092565b6000815180845260005b8181101561202057602081850181015186830182015201612004565b81811115612032576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b73ffffffffffffffffffffffffffffffffffffffff8416815267ffffffffffffffff831660208201526060604082015260006120a46060830184611ffa565b95945050505050565b600080604083850312156120c057600080fd5b50508035926020909101359150565b600080600080600060a086880312156120e757600080fd5b6120f086611d73565b9450602086013561210081611dac565b9350604086013567ffffffffffffffff8082111561211d57600080fd5b61212989838a01611ef8565b945060608801359150811515821461214057600080fd5b9092506080870135908082111561215657600080fd5b5061216388828901611ef8565b9150509295509295909350565b602081526000611da56020830184611ffa565b6000806040838503121561219657600080fd5b61219f83611d73565b9150602083013567ffffffffffffffff8111156121bb57600080fd5b6121c785828601611ef8565b9150509250929050565b600080604083850312156121e457600080fd5b6121ed83611d73565b915060208301356121fd81611dac565b809150509250929050565b60008060008060006060868803121561222057600080fd5b61222986611d73565b9450602086013567ffffffffffffffff8082111561224657600080fd5b61225289838a01611deb565b9096509450604088013591508082111561226b57600080fd5b5061227888828901611deb565b969995985093965092949392505050565b6000806040838503121561229c57600080fd5b82356121ed81611dac565b60008060008060008060008060c0898b0312156122c357600080fd5b6122cc89611d73565b9750602089013567ffffffffffffffff808211156122e957600080fd5b6122f58c838d01611deb565b909950975060408b0135915061230a82611dac565b90955060608a013590808216821461232157600080fd5b90945060808a0135935060a08a0135908082111561233e57600080fd5b5061234b8b828c01611deb565b999c989b5096995094979396929594505050565b60008060008060008060008060c0898b03121561237b57600080fd5b61238489611d73565b9750602089013567ffffffffffffffff808211156123a157600080fd5b6123ad8c838d01611deb565b909950975060408b01359150808211156123c657600080fd5b6123d28c838d01611deb565b909750955060608b013591506123e782611dac565b90935060808a0135906123f982611dac565b90925060a08a0135908082111561240f57600080fd5b5061241c8b828c01611ef8565b9150509295985092959890939650565b6000806000806080858703121561244257600080fd5b61244b85611d73565b935061245960208601611d73565b925060408501359150606085013567ffffffffffffffff81111561247c57600080fd5b61248887828801611ef8565b91505092959194509250565b600080600080608085870312156124aa57600080fd5b6124b385611d73565b93506124c160208601611d73565b925060408501356124d181611dac565b9396929550929360600135925050565b8183823760009101908152919050565b600181811c9082168061250557607f821691505b6020821081141561253f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156125ac576125ac612545565b500290565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b61ffff841681526040602082015260006120a46040830184866125b1565b61ffff871681526080602082015260006126366080830187896125b1565b67ffffffffffffffff8616604084015282810360608401526126598185876125b1565b9998505050505050505050565b61ffff861681526080602082015260006126846080830186886125b1565b905067ffffffffffffffff8416604083015273ffffffffffffffffffffffffffffffffffffffff831660608301529695505050505050565b600067ffffffffffffffff808316818114156126da576126da612545565b6001019392505050565b6000828210156126f6576126f6612545565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000821982111561273d5761273d612545565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561277457612774612545565b5060010190565b61ffff8916815260c06020820152600061279960c08301898b6125b1565b73ffffffffffffffffffffffffffffffffffffffff8816604084015267ffffffffffffffff8716606084015282810360808401526127d88186886125b1565b905082810360a08401526127ec8185611ffa565b9b9a5050505050505050505050565b61ffff8816815260c06020820152600061281860c0830189611ffa565b73ffffffffffffffffffffffffffffffffffffffff8816604084015267ffffffffffffffff8716606084015285608084015282810360a084015261285d8185876125b1565b9a9950505050505050505050565b61ffff861681526080602082015260006128896080830186886125b1565b67ffffffffffffffff8516604084015282810360608401526128ab8185611ffa565b98975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000809000a",
+ "linkReferences": {},
+ "deployedLinkReferences": {}
+}
diff --git a/packages/boba/gateway/src/images/avax.svg b/packages/boba/gateway/src/images/avax.svg
new file mode 100644
index 0000000000..e2316b863a
--- /dev/null
+++ b/packages/boba/gateway/src/images/avax.svg
@@ -0,0 +1,4 @@
+
\ No newline at end of file
diff --git a/packages/boba/gateway/src/images/glmr.svg b/packages/boba/gateway/src/images/glmr.svg
new file mode 100644
index 0000000000..aa8d41ae4c
--- /dev/null
+++ b/packages/boba/gateway/src/images/glmr.svg
@@ -0,0 +1,21 @@
+
\ No newline at end of file
diff --git a/packages/boba/gateway/src/reducers/balanceReducer.js b/packages/boba/gateway/src/reducers/balanceReducer.js
index 8a846f17a0..c422417d6d 100644
--- a/packages/boba/gateway/src/reducers/balanceReducer.js
+++ b/packages/boba/gateway/src/reducers/balanceReducer.js
@@ -28,6 +28,7 @@ const initialState = {
fastExitCost: '',
classicExitCost: '',
fastDepositCost: '',
+ altL1DepositCost: '',
fastDepositBatchCost: '',
l1FeeBalance: '',
l2BalanceETH: '',
@@ -124,6 +125,11 @@ function balanceReducer(state = initialState, action) {
...state,
fastDepositCost: action.payload
}
+ case 'FETCH/ALTL1DEPOSIT/COST/SUCCESS':
+ return {
+ ...state,
+ altL1DepositCost: action.payload
+ }
case 'FETCH/FASTDEPOSIT/BATCH/COST/SUCCESS':
return {
...state,
diff --git a/packages/boba/gateway/src/selectors/balanceSelector.js b/packages/boba/gateway/src/selectors/balanceSelector.js
index 625d383569..2db0f1f567 100644
--- a/packages/boba/gateway/src/selectors/balanceSelector.js
+++ b/packages/boba/gateway/src/selectors/balanceSelector.js
@@ -81,6 +81,10 @@ export function selectFastDepositCost (state) {
return state.balance.fastDepositCost
}
+export function selectAltL1DepositCost(state) {
+ return state.balance.altL1DepositCost
+}
+
export function selectFastDepositBatchCost (state) {
return state.balance.fastDepositBatchCost
}
diff --git a/packages/boba/gateway/src/services/networkService.js b/packages/boba/gateway/src/services/networkService.js
index 740a3b1f8c..4bc2efe1ba 100644
--- a/packages/boba/gateway/src/services/networkService.js
+++ b/packages/boba/gateway/src/services/networkService.js
@@ -83,6 +83,12 @@ import veJson from "../deployment/contracts/ve.json"
// import voterJson from "../deployment/contracts/BaseV1Voter.json"
// import dispatcherJson from "../deployment/contracts/BaseV1Dispatcher.json"
+// multi chain alt l1s ABI's
+// import AltL1BridgeJson from "../deployment/contracts/crosschain/AltL1Bridge.json"
+import ETHL1BridgeJson from "../deployment/contracts/crosschain/EthBridge.json"
+import L2StandardERC20Json from "../deployment/contracts/crosschain/L2StandardERC20.json"
+import LZEndpointMockJson from "../deployment/contracts/crosschain/LZEndpointMock.json"
+
import { getNftImageUrl } from 'util/nftImage'
import { getNetwork } from 'util/masterConfig'
@@ -97,6 +103,10 @@ import GraphQLService from "./graphQLService"
import addresses_Rinkeby from "@boba/register/addresses/addressesRinkeby_0x93A96D6A5beb1F661cf052722A1424CDDA3e9418"
import addresses_Mainnet from "@boba/register/addresses/addressesMainnet_0x8376ac6C3f73a25Dd994E0b0669ca7ee0C02F089"
+
+import layerZeroTestnet from "@boba/register/addresses/layerZeroTestnet"
+import layerZeroMainnet from "@boba/register/addresses/layerZeroMainnet"
+
import { bobaBridges } from 'util/bobaBridges'
import { APP_AIRDROP, APP_CHAIN, SPEED_CHECK } from 'util/constant'
@@ -106,21 +116,32 @@ const L2_ETH_Address = '0x4200000000000000000000000000000000000006'
const L2MessengerAddress = '0x4200000000000000000000000000000000000007'
const L2StandardBridgeAddress = '0x4200000000000000000000000000000000000010'
const L2GasOracle = '0x420000000000000000000000000000000000000F'
+let supportedAltL1Chains = []
let allAddresses = {}
// preload allAddresses
if (APP_CHAIN === 'rinkeby') {
+ const bobaBridges = layerZeroTestnet.BOBA_Bridges.Testnet;
+ const l0Protocols = layerZeroTestnet.Layer_Zero_Protocol.Testnet;
allAddresses = {
...addresses_Rinkeby,
L1LPAddress: addresses_Rinkeby.Proxy__L1LiquidityPool,
- L2LPAddress: addresses_Rinkeby.Proxy__L2LiquidityPool
+ L2LPAddress: addresses_Rinkeby.Proxy__L2LiquidityPool,
+ ...bobaBridges,
+ ...l0Protocols
}
+ supportedAltL1Chains = ['BNB', 'Fantom', 'Avalanche']
} else if (APP_CHAIN === 'mainnet') {
+ const bobaBridges = layerZeroMainnet.BOBA_Bridges.Mainnet;
+ const l0Protocols = layerZeroMainnet.Layer_Zero_Protocol.Mainnet;
allAddresses = {
...addresses_Mainnet,
L1LPAddress: addresses_Mainnet.Proxy__L1LiquidityPool,
- L2LPAddress: addresses_Mainnet.Proxy__L2LiquidityPool
+ L2LPAddress: addresses_Mainnet.Proxy__L2LiquidityPool,
+ ...bobaBridges,
+ ...l0Protocols
}
+ supportedAltL1Chains = ['Moonbeam']
}
let allTokens = {}
@@ -200,6 +221,9 @@ class NetworkService {
// support token
this.supportedTokens = []
+
+ // support alt l1 tokens
+ this.supportedAltL1Chains = supportedAltL1Chains
}
bindProviderListeners() {
@@ -714,16 +738,15 @@ class NetworkService {
this.L1Provider = new ethers.providers.StaticJsonRpcProvider(
nw[networkGateway]['L1']['rpcUrl']
)
+
this.L2Provider = new ethers.providers.StaticJsonRpcProvider(
nw[networkGateway]['L2']['rpcUrl']
)
if (networkGateway === 'rinkeby') {
addresses = addresses_Rinkeby
- console.log('Rinkeby Addresses:', addresses)
} else if (networkGateway === 'mainnet') {
addresses = addresses_Mainnet
- console.log('Mainnet Addresses:', addresses)
}
// else if (networkGateway === 'local') {
// //addresses = addresses_Local
@@ -794,7 +817,6 @@ class NetworkService {
L1StandardBridgeJson.abi,
this.L1Provider
)
- console.log("L1StandardBridgeContract:", this.L1StandardBridgeContract.address)
this.supportedTokens = [ 'USDT', 'DAI', 'USDC', 'WBTC',
'REP', 'BAT', 'ZRX', 'SUSHI',
@@ -1200,11 +1222,10 @@ class NetworkService {
if (this.networkGateway === 'local') return
if (this.account === null) return
- console.log("Getting transactions...")
-
let txL1 = []
let txL1pending = []
let txL2 = []
+ let txL0 = []
const responseL1 = await etherScanInstance(
this.networkGateway,
@@ -1224,45 +1245,54 @@ class NetworkService {
}
}
- //console.log("responseL1",txL1)
-
const responseL2 = await omgxWatcherAxiosInstance(
this.networkGateway
).post('get.l2.transactions', {
address: this.account,
- fromRange: 0,
+ fromRange: 0,
toRange: 1000,
})
- //console.log("responseL2",responseL2)
-
if (responseL2.status === 201) {
- //add the chain: 'L2' field
- txL2 = responseL2.data.map(v => ({...v, chain: 'L2'}))
+ txL2 = responseL2.data.map(v => ({ ...v, chain: 'L2' }))
+ }
+
+ const responseL0 = await omgxWatcherAxiosInstance(
+ this.networkGateway
+ ).post('get.layerzero.transactions', {
+ address: this.account,
+ fromRange: 0,
+ toRange: 1000,
+ })
+
+ if (responseL0.status === 201) {
+ txL0 = responseL0.data.map((v) => ({
+ ...v,
+ hash: v.tx_hash,
+ blockNumber: parseInt(v.block_number),
+ timeStamp: parseInt(v.timestamp), //fix bug - sometimes this is string, sometimes an integer
+ chain: 'L0',
+ altL1: true,
+ }))
}
const responseL1pending = await omgxWatcherAxiosInstance(
this.networkGateway
).post('get.l1.transactions', {
address: this.account,
- fromRange: 0,
+ fromRange: 0,
toRange: 1000,
})
- //console.log("responseL1pending",responseL1pending)
-
if (responseL1pending.status === 201) {
//add the chain: 'L1pending' field
- txL1pending = responseL1pending.data.map(v => ({...v, chain: 'L1pending'}))
- //console.log("txL1pending",txL1pending)
- const annotated = //await this.parseTransaction(
- [
- ...txL1,
- ...txL2,
- ...txL1pending //the new data product
- ]
- //)
- //console.log("annotated:",annotated)
+ txL1pending = responseL1pending.data.map(v => ({ ...v, chain: 'L1pending' }))
+ const annotated = [
+ ...txL1,
+ ...txL2,
+ ...txL0,
+ ...txL1pending //the new data product
+ ]
return annotated
}
@@ -1404,7 +1434,7 @@ class NetworkService {
if(NFTs && Number(monsterBalance) > 0) {
//console.log("checking monsters")
- for (const [ key, value ] of Object.entries(NFTs)) {
+ for (const [ , value ] of Object.entries(NFTs)) {
//console.log(`${key} value: ${value.name}`)
if(value.name === 'TuringMonster') {
const owner = await contract.ownerOf(value.tokenID)
@@ -4864,6 +4894,176 @@ class NetworkService {
}
}
+
+ /*************************************************
+ **************** Alt L1 Functions ***************
+ *************************************************/
+
+ /**
+ * Get Cross Chain Deposit Fee
+ * @getAltL1DepositFee
+ * - as of now we are just supporting BOBA so no need to check for other tokens.
+ */
+
+
+ async getAltL1DepositFee() {
+ if (this.account === null) {
+ console.log('NS: depositErc20ToL1() error - called but account === null')
+ return
+ }
+ try {
+ const pResponse = supportedAltL1Chains.map(async (type) => {
+ let L0_ETH_ENDPOINT = allAddresses.Layer_Zero_Endpoint;
+ let ETH_L1_BOBA_ADDRESS = allAddresses.TK_L1BOBA;
+ let L0_CHAIN_ID = allAddresses.Layer_Zero_ChainId;
+ let ALT_L1_BOBA_ADDRESS = allAddresses[`Proxy__EthBridgeTo${type}`];
+ let PROXY_ETH_L1_BRIDGE_ADDRESS_TO = allAddresses[`${type}_TK_BOBA`];
+
+ // Layer zero doesn't support moonbase
+ // return 0 for those bridges that haven't been implemented yet
+ if (typeof ALT_L1_BOBA_ADDRESS === 'undefined' || typeof PROXY_ETH_L1_BRIDGE_ADDRESS_TO === 'undefined') {
+ return {type, fee: '0' }
+ }
+
+ const Proxy__EthBridge = new ethers.Contract(
+ PROXY_ETH_L1_BRIDGE_ADDRESS_TO,
+ ETHL1BridgeJson.abi,
+ this.provider.getSigner()
+ );
+
+ const ETHLayzerZeroEndpoint = new ethers.Contract(
+ L0_ETH_ENDPOINT,
+ LZEndpointMockJson.abi,
+ this.provider.getSigner()
+ );
+
+ const payload = ethers.utils.defaultAbiCoder.encode(
+ [ "address", "address", "address", "address", "uint256", "bytes" ],
+ [
+ ETH_L1_BOBA_ADDRESS,
+ ALT_L1_BOBA_ADDRESS,
+ this.account,
+ this.account,
+ ethers.utils.parseEther('1'),
+ "0x",
+ ]
+ );
+
+ console.log(`🆙 loading 💵 FEE for ${type}`);
+ const estimatedFee = await ETHLayzerZeroEndpoint.estimateFees(
+ L0_CHAIN_ID,
+ Proxy__EthBridge.address,
+ payload,
+ false,
+ "0x"
+ );
+ console.log(`💵 FEE for ${type} => ${ethers.utils.formatEther(estimatedFee._nativeFee)}`);
+
+ return { type, ...estimatedFee, fee: ethers.utils.formatEther(estimatedFee._nativeFee) }
+ })
+ const fees = await Promise.all(pResponse);
+ let result = {};
+ fees.forEach((fee) => result[ fee.type ] = fee);
+ return result
+
+ } catch (error) {
+ console.log('NS: getAltL1DepositFee() error - called but account === null')
+ return error
+ }
+ }
+
+ /**
+ * Multichain Deposit to alt l1s Only support boba as of now.
+ *
+ */
+
+ async depositErc20ToL1({
+ value,
+ type
+ }) {
+ if (this.account === null) {
+ console.log('NS: depositErc20ToL1() error - called but account === null')
+ return
+ }
+ try {
+ let L0_ETH_ENDPOINT = allAddresses.Layer_Zero_Endpoint;
+ let ETH_L1_BOBA_ADDRESS = allAddresses.TK_L1BOBA;
+ let PROXY_ETH_L1_BRIDGE_ADDRESS_TO = allAddresses[`Proxy__EthBridgeTo${type}`];
+ let ALT_L1_BOBA_ADDRESS = allAddresses[`${type}_TK_BOBA`];
+ /* proxy eth bridge contract */
+ const Proxy__EthBridge = new ethers.Contract(
+ PROXY_ETH_L1_BRIDGE_ADDRESS_TO,
+ ETHL1BridgeJson.abi,
+ this.provider.getSigner()
+ );
+
+ /* eth boba bridge contract */
+ const EthBOBA = new ethers.Contract(
+ ETH_L1_BOBA_ADDRESS,
+ L2StandardERC20Json.abi,
+ this.provider
+ );
+
+ /* L0 endpoint contract*/
+ const ETHLayzerZeroEndpoint = new ethers.Contract(
+ L0_ETH_ENDPOINT,
+ LZEndpointMockJson.abi,
+ this.provider.getSigner()
+ );
+
+ let approveTx = await EthBOBA
+ .connect(this.provider.getSigner())
+ .approve(
+ Proxy__EthBridge.address,
+ ethers.utils.parseEther(value)
+ );
+
+ console.log(`⏲ Waiting for approval`)
+
+ await approveTx.wait();
+
+ console.log(`✅ approval done`)
+
+ let payload = ethers.utils.defaultAbiCoder.encode(
+ ["address", "address", "address", "address", "uint256", "bytes"],
+ [
+ ETH_L1_BOBA_ADDRESS,
+ ALT_L1_BOBA_ADDRESS,
+ this.account,
+ this.account,
+ ethers.utils.parseEther(value),
+ "0x",
+ ]
+ );
+
+ let estimatedFee = await ETHLayzerZeroEndpoint.estimateFees(
+ allAddresses.Layer_Zero_ChainId,
+ Proxy__EthBridge.address,
+ payload,
+ false,
+ "0x"
+ );
+
+ console.log(`🆙 Depositing ${value} 👉 ${type} l1 with 💵 FEE ${ethers.utils.formatEther(estimatedFee._nativeFee)}`);
+
+ await Proxy__EthBridge.depositERC20(
+ ETH_L1_BOBA_ADDRESS,
+ ALT_L1_BOBA_ADDRESS,
+ ethers.utils.parseEther(value),
+ ethers.constants.AddressZero,
+ "0x", // adapterParams
+ "0x",
+ { value: estimatedFee._nativeFee }
+ );
+
+ console.log(`🔥 🔥 🔥 🔥 🔥 ${value} AMT TRANSFER 👉 ${type} !`);
+ return true;
+ } catch (error) {
+ console.log("NS: Ve: depositErc20ToL1 error:", error)
+ return error;
+ }
+ }
+
}
const networkService = new NetworkService()
diff --git a/packages/boba/gateway/src/util/coinImage.js b/packages/boba/gateway/src/util/coinImage.js
index 00984b94b8..6de701919c 100644
--- a/packages/boba/gateway/src/util/coinImage.js
+++ b/packages/boba/gateway/src/util/coinImage.js
@@ -30,6 +30,8 @@ import wagmiv3Logo from 'images/wagmiv3.png'
import wagmiv2OLOLogo from 'images/wagmiv2olo.png'
import oloLogo from 'images/olo.svg'
import CGTLogo from 'images/CGT.svg'
+import avaxLog from 'images/avax.svg'
+import glmrLog from 'images/glmr.svg'
export const getCoinImage = (symbol) => {
@@ -138,6 +140,12 @@ export const getCoinImage = (symbol) => {
case "CGT":
logo = CGTLogo;
break;
+ case "AVAX":
+ logo = avaxLog;
+ break;
+ case "GLMR":
+ logo = glmrLog;
+ break;
default:
logo = ethLogo;
break;
diff --git a/packages/boba/gateway/src/util/constant.js b/packages/boba/gateway/src/util/constant.js
index 54a57226b3..7041be1a97 100644
--- a/packages/boba/gateway/src/util/constant.js
+++ b/packages/boba/gateway/src/util/constant.js
@@ -22,12 +22,13 @@ export const SELLER_OPTIMISM_API_URL = process.env.REACT_APP_SELLER_OPTIMISM_API
export const SERVICE_OPTIMISM_API_URL = process.env.REACT_APP_SERVICE_OPTIMISM_API_URL
export const APP_AIRDROP = process.env.REACT_APP_AIRDROP
export const SPEED_CHECK = process.env.REACT_APP_SPEED_CHECK
-
+export const TARGET_CHAIN_URL = process.env.REACT_APP_TARGET_CHAIN_URL
export const BRIDGE_TYPE = {
FAST_BRIDGE: "FAST_BRIDGE",
CLASSIC_BRIDGE: "CLASSIC_BRIDGE",
- MULTI_BRIDGE: "MULTI_BRIDGE", /// FIXME: remove me
+ MULTI_BRIDGE: "MULTI_BRIDGE", /// FIXME: remove me,
+ MULTI_CHAIN_BRIDGE: "MULTI_CHAIN_BRIDGE"
}
diff --git a/packages/boba/gateway/src/util/masterConfig.js b/packages/boba/gateway/src/util/masterConfig.js
index 87f2ada923..16b981048f 100644
--- a/packages/boba/gateway/src/util/masterConfig.js
+++ b/packages/boba/gateway/src/util/masterConfig.js
@@ -40,6 +40,14 @@ if (APP_CHAIN === 'rinkeby') {
blockExplorer: `https://testnet.bobascan.com/`,
transaction: `https://testnet.bobascan.com/tx/`
},
+ ALTL1: {
+ name: "Alt L1s",
+ // chainId: 28,
+ // chainIdHex: '0x1C',
+ rpcUrl: ``,
+ // blockExplorer: `https://testnet.bobascan.com/`,
+ // transaction: `https://testnet.bobascan.com/tx/`
+ },
payloadForL1SecurityFee: {
from: '0x122816e7A7AeB40601d0aC0DCAA8402F7aa4cDfA',
to: '0x4df04E20cCd9a8B82634754fcB041e86c5FF085A',
diff --git a/packages/boba/register/addresses/layerZeroMainnet.json b/packages/boba/register/addresses/layerZeroMainnet.json
index 150602f7d6..25447a6e92 100644
--- a/packages/boba/register/addresses/layerZeroMainnet.json
+++ b/packages/boba/register/addresses/layerZeroMainnet.json
@@ -22,41 +22,41 @@
}
},
"BOBA_Bridges": {
- "Mainnet": {
- "Proxy__EthBridgeToBNB": "",
- "Proxy__EthBridgeToFantom": "",
+ "Mainnet":{
+ "Proxy__EthBridgeToBNB": "0x1A36E24D61BC1aDa68C21C2Da1aD53EaB8E03e55",
+ "Proxy__EthBridgeToFantom": "0x9DD4202AA5ee9625d1eaa671E2294014dd434E7E",
"Proxy__EthBridgeToAvalanche": "0xB0003eB166654f7e57c0463F8D1a438eB238c490",
"Proxy__EthBridgeToMoonbeam": "0x6F537839714761388B6d7ED61Bc09579d5dA2F41",
- "EthBridgeToBNB": "",
- "EthBridgeToFantom": "",
+ "EthBridgeToBNB": "0x5d7824051Ea90F05eC1c6EcfEF05d5234B59040F",
+ "EthBridgeToFantom": "0xd5c567aC6571aB35568A8E8C73470dFf8Eed939e",
"EthBridgeToAvalanche": "0x51C3db474B023e4924133F36152f40a7b6E27f3F",
"EthBridgeToMoonbeam": "0x6482767251d24f309C0C9985E2EA1262465400dE",
- "Proxy__BNBBridgeToEth": "",
- "Proxy__FantomBridgeToEth": "",
+ "Proxy__BNBBridgeToEth": "0x819FF4d9215C9dAC76f5eC676b1355973157eBBa",
+ "Proxy__FantomBridgeToEth": "0x409e3693A23D4331F613c36f6D5f439a5b9834e8",
"Proxy__AvalancheBridgeToEth": "0x351F4853A0E94DB055ed6ad5DF1b3590791c1F71",
"Proxy__MoonbeamBridgeToEth": "0x9F868333DB1720Fb1412AFfb1AeF47e8C6cFc8c3",
- "BNBBridgeToEth": "",
- "FantomBridgeToEth": "",
+ "BNBBridgeToEth": "0x62C1275bf5484d940BF46d1fCC1e1Ad5DbdD5AE5",
+ "FantomBridgeToEth": "0x2164dFc94E0f2EE6C2982045950ed052298D12a0",
"AvalancheBridgeToEth": "0xBFcB8A6eD80Ef99a5265B72fdC87f4B4dAA598D3",
"MoonbeamBridgeToEth": "0x05469d879dF44cD83f6923Be12f46E2871dA2DAf",
- "BNB_TK_BOBA": "",
+ "BNB_TK_BOBA": "0xE0DB679377A0F5Ae2BaE485DE475c9e1d8A4607D",
"Avalanche_TK_BOBA": "0x3cD790449CF7D187a143d4Bd7F4654d4f2403e02",
- "Fantom_TK_BOBA": "",
+ "Fantom_TK_BOBA": "0x4389b230D15119c347B9E8BEA6d930A21aaDF6BA",
"Moonbeam_TK_BOBA": "0x18D17A9fD652D7d6a59903E23792ab97F832Ed6C"
},
"BNB": {
- "Proxy__EthBridgeToBNB": "",
- "EthBridgeToBNB": "",
- "Proxy__BNBBridgeToEth": "",
- "BNBBridgeToEth": "",
- "BNB_TK_BOBA": ""
+ "Proxy__EthBridgeToBNB": "0x1A36E24D61BC1aDa68C21C2Da1aD53EaB8E03e55",
+ "EthBridgeToBNB": "0x5d7824051Ea90F05eC1c6EcfEF05d5234B59040F",
+ "Proxy__BNBBridgeToEth": "0x819FF4d9215C9dAC76f5eC676b1355973157eBBa",
+ "BNBBridgeToEth": "0x62C1275bf5484d940BF46d1fCC1e1Ad5DbdD5AE5",
+ "BNB_TK_BOBA": "0xE0DB679377A0F5Ae2BaE485DE475c9e1d8A4607D"
},
"Fantom": {
- "Proxy__EthBridgeToFantom": "",
- "EthBridgeToFantom": "",
- "Proxy__FantomBridgeToEth": "",
- "FantomBridgeToEth": "",
- "Fantom_TK_BOBA": ""
+ "Proxy__EthBridgeToFantom": "0x9DD4202AA5ee9625d1eaa671E2294014dd434E7E",
+ "EthBridgeToFantom": "0xd5c567aC6571aB35568A8E8C73470dFf8Eed939e",
+ "Proxy__FantomBridgeToEth": "0x409e3693A23D4331F613c36f6D5f439a5b9834e8",
+ "FantomBridgeToEth": "0x2164dFc94E0f2EE6C2982045950ed052298D12a0",
+ "Fantom_TK_BOBA": "0x4389b230D15119c347B9E8BEA6d930A21aaDF6BA"
},
"Avalanche": {
"Proxy__EthBridgeToAvalanche": "0xB0003eB166654f7e57c0463F8D1a438eB238c490",