diff --git a/packages/boba/gateway/package.json b/packages/boba/gateway/package.json
index 9545facda3..5324d79f73 100644
--- a/packages/boba/gateway/package.json
+++ b/packages/boba/gateway/package.json
@@ -26,8 +26,8 @@
"@mui/icons-material": "^5.3.1",
"@mui/material": "^5.4.0",
"@mui/styles": "^5.3.0",
- "@sentry/react": "^7.24.1",
- "@sentry/tracing": "^7.24.1",
+ "@sentry/react": "^7.34.0",
+ "@sentry/tracing": "^7.34.0",
"@typescript-eslint/eslint-plugin": "^5.10.2",
"@typescript-eslint/parser": "^5.10.2",
"axios": "^0.21.1",
diff --git a/packages/boba/gateway/src/actions/farmAction.js b/packages/boba/gateway/src/actions/farmAction.js
index aa91df06ef..cdafb74e42 100644
--- a/packages/boba/gateway/src/actions/farmAction.js
+++ b/packages/boba/gateway/src/actions/farmAction.js
@@ -1,6 +1,6 @@
/*
Varna - A Privacy-Preserving Marketplace
- Varna uses Fully Homomorphic Encryption to make markets fair.
+ Varna uses Fully Homomorphic Encryption to make markets fair.
Copyright (C) 2021 Enya Inc. Palo Alto, CA
This program is free software: you can redistribute it and/or modify
@@ -48,7 +48,6 @@ const getFarmInfoSuccess = (L1PoolInfo, L1UserInfo, L2PoolInfo, L2UserInfo) => (
// })
export const getFarmInfo = () => async (dispatch) => {
- console.log("getFarmInfo()")
dispatch(getFarmInfoBegin())
const [L1LPInfo, L2LPInfo] = await Promise.all([
networkService.getL1LPInfo(),
@@ -122,4 +121,4 @@ export function fetchL1LPBalance(currency) {
export function fetchL2LPBalance(currency) {
return createAction('FETCH/L2LPBALANCE', () => networkService.L2LPBalance(currency))
-}
\ No newline at end of file
+}
diff --git a/packages/boba/gateway/src/actions/networkAction.js b/packages/boba/gateway/src/actions/networkAction.js
index 7c46931e34..150daedadf 100644
--- a/packages/boba/gateway/src/actions/networkAction.js
+++ b/packages/boba/gateway/src/actions/networkAction.js
@@ -13,7 +13,9 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
+import gasService from 'services/gas.service'
import networkService from 'services/networkService'
+import transctionService from 'services/transaction.service'
import { createAction } from './createAction'
export function fetchBalances() {
@@ -21,17 +23,16 @@ export function fetchBalances() {
}
export function fetchGas() {
- return createAction('GAS/GET', () => networkService.getGas())
+ return createAction('GAS/GET', () => gasService.getGas())
}
export function addTokenList() {
- console.log("addTokenList")
return createAction('TOKENLIST/GET', () => networkService.addTokenList())
}
export function fetchTransactions() {
return createAction('TRANSACTION/GETALL', () =>
- networkService.getTransactions()
+ transctionService.getTransactions()
)
}
@@ -47,10 +48,6 @@ export function fetchFastExits() {
)
}
-export function fetchExits() {
- return createAction('EXIT/GETALL', () => networkService.getExits())
-}
-
export function exitBOBA(token, value) {
return createAction('EXIT/CREATE', () =>
networkService.exitBOBA(token, value)
diff --git a/packages/boba/gateway/src/actions/verifierAction.js b/packages/boba/gateway/src/actions/verifierAction.js
index 7cd2e34ffb..8684c26863 100644
--- a/packages/boba/gateway/src/actions/verifierAction.js
+++ b/packages/boba/gateway/src/actions/verifierAction.js
@@ -13,9 +13,9 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. */
-import networkService from 'services/networkService'
+import verifierService from 'services/verifier.service'
import { createAction } from './createAction'
export function fetchVerifierStatus() {
- return createAction('VERIFIER/GET', () => networkService.fetchVerifierStatus())
+ return createAction('VERIFIER/GET', () => verifierService.getVerifierStatus())
}
diff --git a/packages/boba/gateway/src/api/etherScanAxios.js b/packages/boba/gateway/src/api/etherScanAxios.js
index c7a2fa84c7..204331d4cf 100644
--- a/packages/boba/gateway/src/api/etherScanAxios.js
+++ b/packages/boba/gateway/src/api/etherScanAxios.js
@@ -1,39 +1,13 @@
import axios from 'axios'
-import { LAYER } from 'util/constant';
-import { getNetwork } from 'util/masterConfig'
-const nw = getNetwork()
+export default function etherScanInstance(blockExplorer) {
-export default function etherScanInstance(networkGateway, layer){
-
- let axiosInstance = null;
-
- if(networkGateway === 'local') {
- return null //does not make sense on local
- }
- else if (networkGateway === 'goerli' && layer === LAYER.L1) {
- axiosInstance = axios.create({
- baseURL: nw.goerli.L1.blockExplorer,
- })
- }
- else if (networkGateway === 'goerli' && layer === LAYER.L2) {
- axiosInstance = axios.create({
- baseURL: nw.goerli.L2.blockExplorer,
- })
- }
- else if (networkGateway === 'mainnet' && layer === LAYER.L1) {
- axiosInstance = axios.create({
- baseURL: nw.mainnet.L1.blockExplorer,
- })
- }
- else if (networkGateway === 'mainnet' && layer === LAYER.L2) {
- axiosInstance = axios.create({
- baseURL: nw.mainnet.L2.blockExplorer,
- })
- }
+ let axiosInstance = axios.create({
+ baseURL: blockExplorer,
+ })
axiosInstance.interceptors.request.use((config) => {
- config.headers['Accept'] = 'application/json'
- config.headers['Content-Type'] = 'application/json'
+ config.headers[ 'Accept' ] = 'application/json'
+ config.headers[ 'Content-Type' ] = 'application/json'
return config
})
diff --git a/packages/boba/gateway/src/api/metaTransactionAxios.js b/packages/boba/gateway/src/api/metaTransactionAxios.js
index 8f0bc37044..9d6cfc235d 100644
--- a/packages/boba/gateway/src/api/metaTransactionAxios.js
+++ b/packages/boba/gateway/src/api/metaTransactionAxios.js
@@ -1,23 +1,11 @@
import axios from 'axios'
-import { getBaseServices } from 'util/masterConfig'
-export default function metaTransactionAxiosInstance(networkGateway){
+export default function metaTransactionAxiosInstance(networkConfig) {
+ const url = networkConfig['META_TRANSACTION']
- let axiosInstance = null;
-
- if(networkGateway === 'local') {
- return null //does not make sense on local
- }
- else if (networkGateway === 'goerli') {
- axiosInstance = axios.create({
- baseURL: getBaseServices().GOERLI_META_TRANSACTION,
- })
- }
- else if (networkGateway === 'mainnet') {
- axiosInstance = axios.create({
- baseURL: getBaseServices().MAINNET_META_TRANSACTION,
- })
- }
+ let axiosInstance = axios.create({
+ baseURL: url,
+ })
axiosInstance.interceptors.request.use((config) => {
config.headers['Accept'] = 'application/json'
diff --git a/packages/boba/gateway/src/api/omgxWatcherAxios.js b/packages/boba/gateway/src/api/omgxWatcherAxios.js
index f313540d3e..2255191cf0 100644
--- a/packages/boba/gateway/src/api/omgxWatcherAxios.js
+++ b/packages/boba/gateway/src/api/omgxWatcherAxios.js
@@ -1,31 +1,15 @@
import axios from 'axios'
-import { getNetwork } from 'util/masterConfig'
-const nw = getNetwork()
-export default function omgxWatcherAxiosInstance(networkGateway){
+export default function omgxWatcherAxiosInstance(networkConfig) {
+ const watcherUrl = networkConfig[ 'OMGX_WATCHER_URL' ]
- let axiosInstance = null
-
- if(networkGateway === 'local') {
- return null //does not make sense on local
- }
- else if (networkGateway === 'goerli') {
- if(nw.goerli.OMGX_WATCHER_URL === null) return
- axiosInstance = axios.create({
- baseURL: nw.goerli.OMGX_WATCHER_URL,
- })
- }
- else if (networkGateway === 'mainnet') {
-
- if(nw.mainnet.OMGX_WATCHER_URL === null) return
- axiosInstance = axios.create({
- baseURL: nw.mainnet.OMGX_WATCHER_URL,
- })
- }
+ let axiosInstance = axios.create({
+ baseURL: watcherUrl,
+ })
axiosInstance.interceptors.request.use((config) => {
- config.headers['Accept'] = 'application/json'
- config.headers['Content-Type'] = 'application/json'
+ config.headers[ 'Accept' ] = 'application/json'
+ config.headers[ 'Content-Type' ] = 'application/json'
return config
})
diff --git a/packages/boba/gateway/src/api/verifierWatcherAxios.js b/packages/boba/gateway/src/api/verifierWatcherAxios.js
index 270aa035b6..55dd883452 100644
--- a/packages/boba/gateway/src/api/verifierWatcherAxios.js
+++ b/packages/boba/gateway/src/api/verifierWatcherAxios.js
@@ -1,31 +1,15 @@
import axios from 'axios'
-import { getNetwork } from 'util/masterConfig'
-const nw = getNetwork()
-export default function verifierWatcherAxiosInstance(networkGateway){
+export default function verifierWatcherAxiosInstance(networkConfig) {
+ const url = networkConfig[ 'VERIFIER_WATCHER_URL' ]
- let axiosInstance = null
-
- if(networkGateway === 'local') {
- return null //does not make sense on local
- }
- else if (networkGateway === 'goerli') {
- if(nw.goerli.VERIFIER_WATCHER_URL === null) return
- axiosInstance = axios.create({
- baseURL: nw.goerli.VERIFIER_WATCHER_URL,
- })
- }
- else if (networkGateway === 'mainnet') {
-
- if(nw.mainnet.VERIFIER_WATCHER_URL === null) return
- axiosInstance = axios.create({
- baseURL: nw.mainnet.VERIFIER_WATCHER_URL,
- })
- }
+ let axiosInstance = axios.create({
+ baseURL: url
+ })
axiosInstance.interceptors.request.use((config) => {
- config.headers['Accept'] = 'application/json'
- config.headers['Content-Type'] = 'application/json'
+ config.headers[ 'Accept' ] = 'application/json'
+ config.headers[ 'Content-Type' ] = 'application/json'
return config
})
diff --git a/packages/boba/gateway/src/components/SentryWrapper/SentryWrapper.js b/packages/boba/gateway/src/components/SentryWrapper/SentryWrapper.js
index 78f6e7a83f..c1f480c6a0 100644
--- a/packages/boba/gateway/src/components/SentryWrapper/SentryWrapper.js
+++ b/packages/boba/gateway/src/components/SentryWrapper/SentryWrapper.js
@@ -1,10 +1,9 @@
import React, { useEffect } from 'react'
import * as Sentry from '@sentry/react';
-import { BrowserTracing } from '@sentry/tracing';
import { Typography } from '@mui/material';
import { APP_ENV, SENTRY_DSN } from 'util/constant';
import { useSelector } from 'react-redux';
-import { selectNetwork } from 'selectors/networkSelector';
+import { selectActiveNetwork } from 'selectors/networkSelector';
/**
@@ -18,7 +17,7 @@ const SentryWrapper = ({
children
}) => {
- const network = useSelector(selectNetwork());
+ const network = useSelector(selectActiveNetwork());
useEffect(() => {
const dns = SENTRY_DSN;
@@ -33,7 +32,7 @@ const SentryWrapper = ({
onunhandledrejection: false, /// will avoid to send unhandle browser error.
onerror: false,
}),
- new BrowserTracing()
+ // new BrowserTracing()
],
ignoreErrors: [
'top.GLOBALS', //stop sentry to report the random plugin / extensions errors.
diff --git a/packages/boba/gateway/src/components/faucet/Faucet.js b/packages/boba/gateway/src/components/faucet/Faucet.js
new file mode 100644
index 0000000000..2d8f7d724c
--- /dev/null
+++ b/packages/boba/gateway/src/components/faucet/Faucet.js
@@ -0,0 +1,149 @@
+import React, { useState } from 'react';
+import { useDispatch, useSelector } from 'react-redux';
+import { selectActiveNetworkType } from 'selectors/networkSelector';
+
+import * as G from 'containers/Global.styles'
+import { Box, Typography, Input } from '@mui/material';
+
+import faucetService from 'services/faucet.service';
+import { openAlert } from 'actions/uiAction';
+import { selectLayer, selectWalletAddress } from 'selectors/setupSelector';
+import { NETWORK_TYPE } from 'util/network/network.util';
+import Copy from 'components/copy/Copy';
+import Button from 'components/button/Button';
+import twitter from 'images/twitter.png'
+import { Md5 } from 'ts-md5';
+import networkService from 'services/networkService';
+
+
+/**
+ * @Faucet
+ * - only accessible on L2 for testnet env.
+ */
+
+const Faucet = (props) => {
+
+ const dispatch = useDispatch();
+ const activeNetworkType = useSelector(selectActiveNetworkType());
+ const layer = useSelector(selectLayer())
+ const walletAddress = useSelector(selectWalletAddress())
+
+
+ const [ tweetUrl, setTweetUrl ] = useState("")
+ const [ isClaimFaucetLoading, setIsClaimFaucetLoading ] = useState(false)
+ const [ faucetErrorMsg, setFaucetErrorMsg ] = useState("")
+
+ let bobaTag = ''
+ if (walletAddress)
+ bobaTag = Md5.hashStr(walletAddress.toLowerCase().substring(2))
+
+ let BT = ''
+ let tweet = ''
+ if (bobaTag) {
+ BT = "BOBA" + bobaTag.substring(0, 9).toUpperCase()
+ tweet = networkService.networkConfig.twitterFaucetPromotionText + BT
+ }
+
+ async function claimAuthenticatedFaucetTokens() {
+ try {
+ setIsClaimFaucetLoading(true)
+ const tweetId = tweetUrl?.match(/twitter\.com\/.*\/status\/(\d+)/)[ 1 ]
+ const res = await faucetService.getTestnetETHAuthenticatedMetaTransaction(tweetId)
+ if (!res) {
+ dispatch(openAlert('Faucet request submitted'))
+ } else {
+ setFaucetErrorMsg(res)
+ }
+ } catch (err) {
+ let error = err.message.match(/execution reverted: (.*)\\+"}}/)
+ if (error) {
+ error = error[ 1 ]
+ } else {
+ error = err?.message ?? err
+ }
+ setFaucetErrorMsg(error)
+ } finally {
+ setIsClaimFaucetLoading(false)
+ }
+ }
+
+ if (layer === 'L2' &&
+ activeNetworkType === NETWORK_TYPE.TESTNET)
+ {
+ return (
+
+
+
+
+ Developer Twitter/Turing test token fountain - your Boba Bubble:{" "}
+ {BT}
+
+
+
+
+ Welcome developers.
+ For testnet BOBA and ETH, tweet your Boba Bubble and
+ then paste the tweet link in the field below.
+
+
+ Tweet Now
+
+
+
+ For the Tweet link, tap the share icon, tap "Share Tweet via", and finally select "Copy link to Tweet".
+
+
+ setTweetUrl(e?.target?.value.split('?')[ 0 ])} //remove the superfluous stuff after the "?"
+ />
+
+
+ You are limited to one fountain call per twitter account per day.
+ The transaction will not show in your history since it's a MetaTransaction (the gas is covered by Boba).
+
+
+
+
+ {faucetErrorMsg ? {faucetErrorMsg} : null}
+
+
+ )
+ }
+
+ return null;
+}
+
+export default Faucet;
diff --git a/packages/boba/gateway/src/components/mainMenu/feeSwitcher/FeeSwitcher.js b/packages/boba/gateway/src/components/mainMenu/feeSwitcher/FeeSwitcher.js
index 7bb2d4b7c9..d95486e00b 100644
--- a/packages/boba/gateway/src/components/mainMenu/feeSwitcher/FeeSwitcher.js
+++ b/packages/boba/gateway/src/components/mainMenu/feeSwitcher/FeeSwitcher.js
@@ -37,6 +37,9 @@ import { isEqual } from 'lodash'
import BN from 'bignumber.js'
import { logAmount } from 'util/amountConvert.js'
import { HelpOutline } from '@mui/icons-material'
+import networkService from 'services/networkService.js'
+import { selectActiveNetwork, selectActiveNetworkName } from 'selectors/networkSelector.js'
+import { NETWORK } from 'util/network/network.util.js'
function FeeSwitcher() {
@@ -44,36 +47,35 @@ function FeeSwitcher() {
const accountEnabled = useSelector(selectAccountEnabled())
const feeUseBoba = useSelector(selectBobaFeeChoice())
+ const networkName = useSelector(selectActiveNetworkName())
+ const network = useSelector(selectActiveNetwork())
const layer = useSelector(selectLayer())
const l2Balances = useSelector(selectlayer2Balance, isEqual)
const l2BalanceETH = l2Balances.filter((i) => i.symbol === 'ETH')
- const balanceETH = l2BalanceETH[0]
-
+ const balanceETH = l2BalanceETH[ 0 ]
const l2BalanceBOBA = l2Balances.filter((i) => i.symbol === 'BOBA')
- const balanceBOBA = l2BalanceBOBA[0]
+ const balanceBOBA = l2BalanceBOBA[ 0 ]
const dispatchSwitchFee = useCallback(async (targetFee) => {
- //console.log("balanceBOBA:",balanceBOBA)
- //console.log("balanceETH:",balanceETH)
-
- let tooSmallETH = false
+ let tooSmallL1NativeToken = false
+ let minL1NativeBalance = network === NETWORK.ETHEREUM ? 0.0002 : 0.5
let tooSmallBOBA = false
- if(typeof(balanceBOBA) === 'undefined') {
+ if (typeof (balanceBOBA) === 'undefined') {
tooSmallBOBA = true
} else {
//check actual balance
- tooSmallBOBA = new BN(logAmount(balanceBOBA.balance, 18)).lt(new BN(3.0))
+ tooSmallBOBA = new BN(logAmount(balanceBOBA.balance, 18)).lt(new BN(1))
}
- if(typeof(balanceETH) === 'undefined') {
- tooSmallETH = true
+ if (typeof (balanceETH) === 'undefined') {
+ tooSmallL1NativeToken = true
} else {
//check actual balance
- tooSmallETH = new BN(logAmount(balanceETH.balance, 18)).lt(new BN(0.002))
+ tooSmallL1NativeToken = new BN(logAmount(balanceETH.balance, 18)).lt(new BN(minL1NativeBalance))
}
if (!balanceBOBA && !balanceETH) {
@@ -86,23 +88,23 @@ function FeeSwitcher() {
if (feeUseBoba && targetFee === 'BOBA') {
// do nothing - already set to BOBA
}
- else if ( !feeUseBoba && targetFee === 'ETH' ) {
+ else if (!feeUseBoba && targetFee === networkService.L1NativeTokenSymbol) {
// do nothing - already set to ETH
}
- else if ( !feeUseBoba && targetFee === 'BOBA' ) {
+ else if (!feeUseBoba && targetFee === 'BOBA') {
// change to BOBA
- if( tooSmallBOBA ) {
- dispatch(openError(`You cannot change the fee token to BOBA since your BOBA balance is below 3 BOBA.
+ if (tooSmallBOBA) {
+ dispatch(openError(`You cannot change the fee token to BOBA since your BOBA balance is below 1 BOBA.
If you change fee token now, you might get stuck. Please swap some ETH for BOBA first.`))
} else {
res = await dispatch(switchFee(targetFee))
}
}
- else if (feeUseBoba && targetFee === 'ETH') {
- // change to ETH
- if( tooSmallETH ) {
- dispatch(openError(`You cannot change the fee token to ETH since your ETH balance is below 0.002 ETH.
- If you change fee token now, you might get stuck. Please swap some BOBA for ETH first.`))
+ else if (feeUseBoba && targetFee === networkService.L1NativeTokenSymbol) {
+ // change to L1Native Token
+ if (tooSmallL1NativeToken) {
+ dispatch(openError(`You cannot change the fee token to ${networkService.L1NativeTokenSymbol} since your ${networkService.L1NativeTokenSymbol} balance is below ${minL1NativeBalance}.
+ If you change fee token now, you might get stuck. Please obtain some ${networkService.L1NativeTokenSymbol} first.`))
} else {
res = await dispatch(switchFee(targetFee))
}
@@ -112,11 +114,11 @@ function FeeSwitcher() {
dispatch(openAlert(`Successfully changed fee to ${targetFee}`))
}
- }, [ dispatch, feeUseBoba, balanceETH, balanceBOBA ])
+ }, [ dispatch, feeUseBoba, balanceETH, balanceBOBA, network ])
if (!accountEnabled && layer !== 'L2') {
return
-
+
Fee
@@ -125,7 +127,7 @@ function FeeSwitcher() {
return (
-
+
Fee
@@ -133,16 +135,16 @@ function FeeSwitcher() {
onSelect={(e, d) => {
dispatchSwitchFee(e.target.value)
}}
- value={!feeUseBoba ? "ETH" : 'BOBA'}
- options={[ {
- value: 'ETH',
- title: 'ETH',
- },
- {
- value: 'BOBA',
- title: 'BOBA',
- description: 'Save another 25% by using Boba as your gas fee token'
- }
+ value={!feeUseBoba ? networkService.L1NativeTokenSymbol: 'BOBA' }
+ options={[
+ {
+ value: 'BOBA',
+ title: 'BOBA',
+ },
+ {
+ value: networkService.L1NativeTokenSymbol,
+ title: networkService.L1NativeTokenName,
+ }
]}
/>
diff --git a/packages/boba/gateway/src/components/mainMenu/gasSwitcher/GasSwitcher.js b/packages/boba/gateway/src/components/mainMenu/gasSwitcher/GasSwitcher.js
index 81fea89790..58854b0d61 100644
--- a/packages/boba/gateway/src/components/mainMenu/gasSwitcher/GasSwitcher.js
+++ b/packages/boba/gateway/src/components/mainMenu/gasSwitcher/GasSwitcher.js
@@ -7,6 +7,10 @@ import * as S from './GasSwitcher.styles.js'
import { selectGas } from 'selectors/balanceSelector'
import { selectVerifierStatus } from 'selectors/verifierSelector'
import { selectBaseEnabled } from 'selectors/setupSelector.js'
+import {
+ selectActiveNetwork,
+ selectActiveNetworkName
+} from 'selectors/networkSelector.js'
import { fetchGas } from 'actions/networkAction.js'
import { fetchVerifierStatus } from 'actions/verifierAction.js'
@@ -16,6 +20,7 @@ import networkService from 'services/networkService.js'
import useInterval from 'hooks/useInterval.js'
import { GAS_POLL_INTERVAL } from 'util/constant.js'
+import { NETWORK, NETWORK_TYPE } from 'util/network/network.util.js'
function GasSwitcher() {
const dispatch = useDispatch()
@@ -23,9 +28,18 @@ function GasSwitcher() {
const baseEnabled = useSelector(selectBaseEnabled())
const gas = useSelector(selectGas)
const verifierStatus = useSelector(selectVerifierStatus)
-
+ const networkName = useSelector(selectActiveNetworkName())
+ const activeNetwork = useSelector(selectActiveNetwork())
const [ savings, setSavings ] = useState(0)
+ // fetch the gas on changing deployment
+ useEffect(() => {
+ if (baseEnabled) {
+ dispatch(fetchGas())
+ dispatch(fetchVerifierStatus())
+ }
+ }, [ networkName, baseEnabled , dispatch])
+
useInterval(() => {
if (baseEnabled) {
dispatch(fetchGas())
@@ -35,7 +49,7 @@ function GasSwitcher() {
useEffect(() => {
async function getGasSavings() {
- if (networkService.networkGateway === 'mainnet') {
+ if (networkService.networkType === NETWORK_TYPE.MAINNET) {
const l1SecurityFee = await networkService.estimateL1SecurityFee()
const l2Fee = await networkService.estimateL2Fee()
// The l1 security fee is moved to the l2 fee
@@ -47,24 +61,30 @@ function GasSwitcher() {
}
return 1
}
- getGasSavings()
- }, [ gas ])
+ // fetch savings only if network is ethereum and mainnet.
+ if (activeNetwork === NETWORK.ETHEREUM) {
+ getGasSavings()
+ }
+ }, [ gas, activeNetwork ])
return (
- Ethereum
+ {networkName[ 'l1' ]}
{gas.gasL1} Gwei
- Boba
+ {networkName[ 'l2' ]}
{gas.gasL2} Gwei
-
- Savings
- {savings.toFixed(0)}x
-
+ {
+ activeNetwork === NETWORK.ETHEREUM &&
+ (
+ Savings
+ {savings.toFixed(0)}x
+ )
+ }
L1
{gas.blockL1}
diff --git a/packages/boba/gateway/src/components/modal/Modal.js b/packages/boba/gateway/src/components/modal/Modal.js
index 4a7073fdee..0cca6c5287 100644
--- a/packages/boba/gateway/src/components/modal/Modal.js
+++ b/packages/boba/gateway/src/components/modal/Modal.js
@@ -53,7 +53,7 @@ function _Modal({
onClose={onClose}
ismobile={isMobile ? 1 : 0}
// closeAfterTransition
- BackdropComponent={S.Backdrop}
+ slots={S.Backdrop}
disableAutoFocus={true}
>
@@ -61,7 +61,7 @@ function _Modal({
{
!!newStyle ?
-
+
diff --git a/packages/boba/gateway/src/components/modal/Modal.styles.js b/packages/boba/gateway/src/components/modal/Modal.styles.js
index 8b08150e6a..90107ac8a0 100644
--- a/packages/boba/gateway/src/components/modal/Modal.styles.js
+++ b/packages/boba/gateway/src/components/modal/Modal.styles.js
@@ -27,9 +27,11 @@ export const Backdrop = styled('div')`
opacity: 0.8;
backdrop-filter: blur(10px);
-webkit-tap-highlight-color: transparent;
-`;
+`;
-export const Style = styled(Box)`
+export const Style = styled(Box, {
+ shouldForwardProp: (props) => props !== 'transparent' && props !== 'isMobile',
+})`
display: flex;
flex-direction: column;
justify-content: space-between;
@@ -61,7 +63,7 @@ export const WrapperActionsModal = styled(Box)`
margin-top: 50px;
`;
-
+
export const ModalHead = styled(Box)(({ theme }) => ({
display: "flex",
justifyContent: "space-between",
diff --git a/packages/boba/gateway/src/components/pageHeader/PageHeader.js b/packages/boba/gateway/src/components/pageHeader/PageHeader.js
index 7f91362d27..fe8304bbf5 100644
--- a/packages/boba/gateway/src/components/pageHeader/PageHeader.js
+++ b/packages/boba/gateway/src/components/pageHeader/PageHeader.js
@@ -15,9 +15,10 @@ import networkService from 'services/networkService'
import { makeStyles } from '@mui/styles'
import Copy from 'components/copy/Copy'
import { useSelector } from 'react-redux'
-import { selectAccountEnabled, selectMonster } from 'selectors/setupSelector'
+import { selectAccountEnabled, selectLayer, selectMonster } from 'selectors/setupSelector'
import NetworkSwitcher from 'components/mainMenu/networkSwitcher/NetworkSwitcher'
import WalletSwitch from 'components/walletSwitch/WalletSwitch'
+import { LAYER } from 'util/constant'
const useStyles = makeStyles({
root: {
@@ -36,6 +37,7 @@ const PageHeader = ({ maintenance }) => {
const theme = useTheme()
const accountEnabled = useSelector(selectAccountEnabled())
+ const layer = useSelector(selectLayer())
const monsterNumber = useSelector(selectMonster())
const isMobile = useMediaQuery(theme.breakpoints.down('md'))
@@ -109,7 +111,7 @@ const PageHeader = ({ maintenance }) => {
-
+ {layer === LAYER.L2 ? : null}
@@ -118,7 +120,7 @@ const PageHeader = ({ maintenance }) => {
: (
-
+ {layer === LAYER.L2 ? : null}
{!!accountEnabled ? : null}
diff --git a/packages/boba/gateway/src/components/transaction/Transaction.js b/packages/boba/gateway/src/components/transaction/Transaction.js
index f9bf232787..20cb6aa583 100644
--- a/packages/boba/gateway/src/components/transaction/Transaction.js
+++ b/packages/boba/gateway/src/components/transaction/Transaction.js
@@ -21,10 +21,9 @@ import ExpandMoreIcon from '@mui/icons-material/ExpandMore'
import * as S from "./ListFarm.styles"
import { useTheme } from '@emotion/react'
-import { selectNetwork } from 'selectors/networkSelector'
-import { useSelector } from 'react-redux'
-import { getNetwork } from 'util/masterConfig'
+
import truncate from 'truncate-middle'
+import networkService from 'services/networkService'
function Transaction({
link,
@@ -53,12 +52,9 @@ function Transaction({
const theme = useTheme()
const isMobile = useMediaQuery(theme.breakpoints.down('md'))
- const currentNetwork = useSelector(selectNetwork())
- const nw = getNetwork()
-
const chainLink = ({chain,hash}) => {
- let network = nw[currentNetwork]
- if (!!network && !!network[chain]) {
+ const network = networkService.networkConfig;
+ if (!!network && !!network[ chain ]) {
return `${network[chain].transaction}${hash}`;
}
return ''
diff --git a/packages/boba/gateway/src/containers/bridge/bobaBridge/bobaBridge.styles.js b/packages/boba/gateway/src/containers/bridge/bobaBridge/bobaBridge.styles.js
index 7b863d7631..9beb545dd3 100644
--- a/packages/boba/gateway/src/containers/bridge/bobaBridge/bobaBridge.styles.js
+++ b/packages/boba/gateway/src/containers/bridge/bobaBridge/bobaBridge.styles.js
@@ -19,7 +19,9 @@ export const BobaContent = styled(Box)(({ theme }) => ({
gap: '10px'
}))
-export const BobaContentWrapper = styled(Box)(({ theme, flexDirection }) => ({
+export const BobaContentWrapper = styled(Box, {
+ shouldForwardProp: (props) => props !== 'fullWidth'
+})(({ theme, flexDirection }) => ({
display: 'flex',
justifyContent: 'space-between',
flexDirection: flexDirection || 'column',
diff --git a/packages/boba/gateway/src/containers/history/History.js b/packages/boba/gateway/src/containers/history/History.js
index 107d2ab3ee..9495808b19 100644
--- a/packages/boba/gateway/src/containers/history/History.js
+++ b/packages/boba/gateway/src/containers/history/History.js
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. */
import React, { useState } from 'react'
-import { batch, useDispatch } from 'react-redux'
+import { useDispatch } from 'react-redux'
import { isEqual, orderBy } from 'lodash'
import { useSelector } from 'react-redux'
import DatePicker from 'react-datepicker'
@@ -30,7 +30,7 @@ import { selectActiveHistoryTab } from 'selectors/uiSelector'
import { fetchTransactions } from 'actions/networkAction'
import { selectTransactions } from 'selectors/transactionSelector'
-import { selectLayer } from 'selectors/setupSelector'
+import { selectAccountEnabled, selectLayer } from 'selectors/setupSelector'
import Exits from './TX_Exits'
import Deposits from './TX_Deposits'
@@ -47,6 +47,7 @@ import Connect from 'containers/connect/Connect'
import Tabs from 'components/tabs/Tabs'
import { POLL_INTERVAL } from 'util/constant'
+import { selectActiveNetworkName } from 'selectors/networkSelector'
function History() {
@@ -61,9 +62,11 @@ function History() {
const [startDate, setStartDate] = useState(last_6months)
const [endDate, setEndDate] = useState(now)
const layer = useSelector(selectLayer())
+ const accountEnabled = useSelector(selectAccountEnabled())
const [searchHistory, setSearchHistory] = useState('')
const activeTab = useSelector(selectActiveHistoryTab, isEqual)
+ const networkName = useSelector(selectActiveNetworkName())
const unorderedTransactions = useSelector(selectTransactions, isEqual)
const orderedTransactions = orderBy(unorderedTransactions, i => i.timeStamp, 'desc')
@@ -76,9 +79,9 @@ function History() {
})
useInterval(() => {
- batch(()=>{
+ if (accountEnabled) {
dispatch(fetchTransactions())
- })
+ }
}, POLL_INTERVAL)
return (
@@ -139,7 +142,7 @@ function History() {
{dispatch(setActiveHistoryTab(tab))}}
activeTab={activeTab}
- tabs={['All', 'Ethereum to Boba Ethereum L2', 'Boba Ethereum L2 to Ethereum', 'Bridge between L1s', 'Pending']}
+ tabs={['All', `${networkName['l1']} to ${networkName['l2']}`, `${networkName['l2']} to ${networkName['l1']}`, 'Bridge between L1s', 'Pending']}
/>
{activeTab === 'All' && (
@@ -149,14 +152,14 @@ function History() {
/>
)}
- {activeTab === 'Ethereum to Boba Ethereum L2' &&
+ {activeTab === `${networkName['l1']} to ${networkName['l2']}` &&
}
- {activeTab === 'Boba Ethereum L2 to Ethereum' &&
+ {activeTab === `${networkName['l2']} to ${networkName['l1']}` &&
{
setPage(1)
@@ -125,7 +127,7 @@ function TX_Deposits({ searchHistory, transactions }) {
title={`Hash: ${i.hash}`}
time={moment.unix(i.timeStamp).format('lll')}
blockNumber={`Block ${i.blockNumber}`}
- chain={`Ethereum to Boba Ethereum L2 ${i.activity === 'ClientDepositL1Batch' ? 'in Batch' : ''}`}
+ chain={`${networkName['l1']} to ${networkName['l2']} ${i.activity === 'ClientDepositL1Batch' ? 'in Batch' : ''}`}
typeTX={`TX Type: ${metaData}`}
detail={details}
oriChain={chain}
diff --git a/packages/boba/gateway/src/containers/history/TX_Exits.js b/packages/boba/gateway/src/containers/history/TX_Exits.js
index f3fe02b5e1..8c38d87921 100644
--- a/packages/boba/gateway/src/containers/history/TX_Exits.js
+++ b/packages/boba/gateway/src/containers/history/TX_Exits.js
@@ -34,8 +34,8 @@ const PER_PAGE = 8
function TX_Exits({ searchHistory, transactions, chainLink }) {
- const [page, setPage] = useState(1)
- const loading = useSelector(selectLoading(['EXIT/GETALL']))
+ const [ page, setPage ] = useState(1)
+ const loading = useSelector(selectLoading(['TRANSACTION/GETALL']))
const tokenList = useSelector(selectTokens)
const allAddresses = networkService.getAllAddresses()
diff --git a/packages/boba/gateway/src/containers/history/TX_Pending.js b/packages/boba/gateway/src/containers/history/TX_Pending.js
index 42cc4c7742..aaebc83db5 100644
--- a/packages/boba/gateway/src/containers/history/TX_Pending.js
+++ b/packages/boba/gateway/src/containers/history/TX_Pending.js
@@ -17,12 +17,7 @@ import React, { useState, useEffect } from 'react'
import { useSelector } from 'react-redux'
import "react-datepicker/dist/react-datepicker.css"
import { Grid, Box } from '@mui/material'
-
import { orderBy } from 'lodash'
-// import { selectNetwork } from 'selectors/setupSelector'
-
-// import { getNetwork } from 'util/masterConfig'
-
import moment from 'moment'
import { selectLoading } from 'selectors/loadingSelector'
@@ -169,7 +164,6 @@ function TX_Pending({ searchHistory, transactions }) {
// return '';
// }
- console.log("PendingToShow:", paginatedTransactions)
return (
diff --git a/packages/boba/gateway/src/containers/home/Home.js b/packages/boba/gateway/src/containers/home/Home.js
index 5e1f85cffb..8536ab6ac2 100644
--- a/packages/boba/gateway/src/containers/home/Home.js
+++ b/packages/boba/gateway/src/containers/home/Home.js
@@ -42,8 +42,7 @@ import { getFS_Saves, getFS_Info } from 'actions/fixedAction'
import {
fetchBalances,
- addTokenList,
- fetchExits
+ addTokenList
} from 'actions/networkAction'
import {
getMonsterInfo
@@ -90,6 +89,7 @@ import useInterval from 'hooks/useInterval'
import useGoogleAnalytics from 'hooks/useGoogleAnalytics'
import { selectActiveNetwork, selectActiveNetworkType } from 'selectors/networkSelector'
import useNetwork from 'hooks/useNetwork'
+import { NETWORK } from 'util/network/network.util'
function Home() {
@@ -167,7 +167,9 @@ function Home() {
if (initialized === 'enabled') {
dispatch(setBaseState(true))
// load DAO to speed up the process
- dispatch(fetchDaoProposals())
+ if (activeNetwork === NETWORK.ETHEREUM) {
+ dispatch(fetchDaoProposals())
+ }
return true
}
}
@@ -177,16 +179,20 @@ function Home() {
useInterval(() => {
if(accountEnabled /*== MetaMask is connected*/) {
dispatch(fetchBalances()) // account specific
- dispatch(fetchDaoBalance()) // account specific
- dispatch(fetchDaoVotes()) // account specific
- dispatch(fetchDaoBalanceX()) // account specific
- dispatch(fetchDaoVotesX()) // account specific
- dispatch(fetchExits()) // account specific
- dispatch(getFS_Saves()) // account specific
- dispatch(getFS_Info()) // account specific
- dispatch(getMonsterInfo()) // account specific
+
+ //specific to ETH network
+ if (activeNetwork === NETWORK.ETHEREUM) {
+ dispatch(fetchDaoBalance()) // account specific
+ dispatch(fetchDaoVotes()) // account specific
+ dispatch(fetchDaoBalanceX()) // account specific
+ dispatch(fetchDaoVotesX()) // account specific
+ dispatch(getFS_Info()) // account specific
+ dispatch(getFS_Saves()) // account specific
+ dispatch(getMonsterInfo()) // account specific
+ }
}
- if(baseEnabled /*== we only have have Base L1 and L2 providers*/) {
+ /*== we only have have Base L1 and L2 providers*/
+ if (baseEnabled && activeNetwork === NETWORK.ETHEREUM) {
dispatch(getProposalThreshold())
dispatch(fetchDaoProposals())
}
@@ -203,9 +209,12 @@ function Home() {
if (maintenance) return
if (accountEnabled) {
dispatch(addTokenList())
- dispatch(getMonsterInfo())
+ // monster only availble for ETH
+ if (activeNetwork === NETWORK.ETHEREUM) {
+ dispatch(getMonsterInfo())
+ }
}
- }, [ dispatch, accountEnabled, maintenance ])
+ }, [ dispatch, accountEnabled, maintenance, activeNetwork ])
// Invoking GA analysis page view hooks
useGoogleAnalytics();
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 0cd6d6de2a..970ece9ea0 100644
--- a/packages/boba/gateway/src/containers/modals/deposit/steps/InputStep.js
+++ b/packages/boba/gateway/src/containers/modals/deposit/steps/InputStep.js
@@ -3,7 +3,7 @@ import React, { useEffect, useState } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import { depositErc20, depositETHL2 } from 'actions/networkAction'
-import { setActiveHistoryTab } from 'actions/uiAction'
+import { setActiveHistoryTab, openAlert } from 'actions/uiAction'
import Button from 'components/button/Button'
import Input from 'components/input/Input'
@@ -18,6 +18,8 @@ import { WrapperActionsModal } from 'components/modal/Modal.styles'
import { selectLookupPrice } from 'selectors/lookupSelector'
import BN from 'bignumber.js'
+import { ethers } from 'ethers'
+import { selectActiveNetworkName } from 'selectors/networkSelector'
function InputStep({ handleClose, token, isBridge, openTokenPicker }) {
@@ -30,6 +32,7 @@ function InputStep({ handleClose, token, isBridge, openTokenPicker }) {
const [ validValue, setValidValue ] = useState(false)
const depositLoading = useSelector(selectLoading([ 'DEPOSIT/CREATE' ]))
+ const networkName = useSelector(selectActiveNetworkName())
const signatureStatus = useSelector(selectSignatureStatus_depositTRAD)
const lookupPrice = useSelector(selectLookupPrice)
@@ -52,18 +55,20 @@ function InputStep({ handleClose, token, isBridge, openTokenPicker }) {
async function doDeposit() {
let res
+ let toL2Account = enableToL2Account ? recipient : '';
- if (token.symbol === 'ETH') {
+ // TO check for ETH
+ if (token.address === ethers.constants.AddressZero) {
res = await dispatch(
depositETHL2({
- recipient,
+ recipient: toL2Account,
value_Wei_String
})
)
} else {
res = await dispatch(
depositErc20({
- recipient,
+ recipient: toL2Account,
value_Wei_String,
currency: token.address,
currencyL2: token.addressL2,
@@ -71,7 +76,8 @@ function InputStep({ handleClose, token, isBridge, openTokenPicker }) {
)
}
if (res) {
- dispatch(setActiveHistoryTab('Ethereum to Boba Ethereum L2'))
+ dispatch(openAlert(`Your funds were bridged to ${networkName[ 'l2' ]}`))
+ dispatch(setActiveHistoryTab(`${networkName[ 'l1' ]} to ${networkName[ 'l2' ]}`))
handleClose()
}
@@ -88,7 +94,6 @@ function InputStep({ handleClose, token, isBridge, openTokenPicker }) {
}
}, [ signatureStatus, depositLoading, handleClose ])
- console.log("Loading:", depositLoading)
let buttonLabel_1 = 'Cancel'
if (depositLoading) buttonLabel_1 = 'Close'
diff --git a/packages/boba/gateway/src/containers/modals/exit/steps/DoExitStep.js b/packages/boba/gateway/src/containers/modals/exit/steps/DoExitStep.js
index 8fbb5c85db..8aefc25b43 100644
--- a/packages/boba/gateway/src/containers/modals/exit/steps/DoExitStep.js
+++ b/packages/boba/gateway/src/containers/modals/exit/steps/DoExitStep.js
@@ -56,6 +56,7 @@ import {
selectL2BalanceBOBA,
selectExitFee,
} from 'selectors/balanceSelector'
+import networkService from 'services/networkService'
function DoExitStep({ handleClose, token, isBridge, openTokenPicker }) {
@@ -230,7 +231,8 @@ function DoExitStep({ handleClose, token, isBridge, openTokenPicker }) {
const balance = Number(logAmount(token.balance, token.decimals))
// because of MetaMask issue always have to limit ETH
- if(token.symbol === 'ETH') {
+ // if(token.symbol === 'ETH') {
+ if(token.symbol === networkService.L1NativeTokenSymbol) {
if(balance - safeCost > 0.0)
setMax_Float(balance - safeCost)
else
@@ -262,7 +264,7 @@ function DoExitStep({ handleClose, token, isBridge, openTokenPicker }) {
if(feeUseBoba) {
estGas = `${Number(feeBOBA).toFixed(4)} BOBA`
} else {
- estGas = `${Number(feeETH).toFixed(4)} ETH`
+ estGas = `${Number(feeETH).toFixed(4)} ${networkService.L1NativeTokenSymbol}`
}
}
diff --git a/packages/boba/gateway/src/containers/modals/exit/steps/DoExitStepFast.js b/packages/boba/gateway/src/containers/modals/exit/steps/DoExitStepFast.js
index dd05c43038..9419da3daf 100644
--- a/packages/boba/gateway/src/containers/modals/exit/steps/DoExitStepFast.js
+++ b/packages/boba/gateway/src/containers/modals/exit/steps/DoExitStepFast.js
@@ -63,6 +63,7 @@ import {
selectBobaFeeChoice,
selectBobaPriceRatio,
} from 'selectors/setupSelector'
+import networkService from 'services/networkService'
function DoExitStepFast({ handleClose, token, isBridge, openTokenPicker }) {
@@ -282,7 +283,7 @@ function DoExitStepFast({ handleClose, token, isBridge, openTokenPicker }) {
const balance = Number(logAmount(token.balance, token.decimals))
// because of MetaMask issue always have to limit ETH
- if(token.symbol === 'ETH') {
+ if(token.symbol === networkService.L1NativeTokenSymbol) {
if(balance - safeCost > 0.0)
setMax_Float(balance - safeCost)
else
@@ -318,15 +319,16 @@ function DoExitStepFast({ handleClose, token, isBridge, openTokenPicker }) {
if(feeUseBoba) {
estGas = `${Number(feeBOBA).toFixed(4)} BOBA`
} else {
- estGas = `${Number(feeETH).toFixed(4)} ETH`
+ estGas = `${Number(feeETH).toFixed(4)} ${networkService.L1NativeTokenSymbol}`
}
}
// prohibit ExitAll when paying with the token that is to be exited
let allowUseAll = true
- if(token.symbol === 'ETH') {
+ if(token.symbol === networkService.L1NativeTokenSymbol) {
allowUseAll = false
}
+
else if (token.symbol === 'BOBA' && feeUseBoba) {
allowUseAll = false
}
diff --git a/packages/boba/gateway/src/containers/modals/transfer/TransferModal.js b/packages/boba/gateway/src/containers/modals/transfer/TransferModal.js
index eaa456914b..56312947ea 100644
--- a/packages/boba/gateway/src/containers/modals/transfer/TransferModal.js
+++ b/packages/boba/gateway/src/containers/modals/transfer/TransferModal.js
@@ -197,7 +197,7 @@ function TransferModal ({ open, token, minHeight }) {
{fee && !feeUseBoba && (
- Fee: {fee} ETH
+ Fee: {fee} {networkService.L1NativeTokenSymbol}
)}
diff --git a/packages/boba/gateway/src/containers/wallet/Wallet.js b/packages/boba/gateway/src/containers/wallet/Wallet.js
index a6658135c1..a64003d76d 100644
--- a/packages/boba/gateway/src/containers/wallet/Wallet.js
+++ b/packages/boba/gateway/src/containers/wallet/Wallet.js
@@ -33,87 +33,79 @@ import { selectlayer2Balance } from 'selectors/balanceSelector'
import PageTitle from 'components/pageTitle/PageTitle'
import { isEqual } from 'lodash'
-import { DEFAULT_NETWORK, POLL_INTERVAL } from "util/constant"
+import { DEFAULT_NETWORK, LAYER, POLL_INTERVAL } from "util/constant"
import useInterval from "hooks/useInterval"
import BN from 'bignumber.js'
import { logAmount } from 'util/amountConvert.js'
-import { selectActiveNetworkName } from "selectors/networkSelector"
+import { selectActiveNetwork, selectActiveNetworkName } from "selectors/networkSelector"
+import networkService from "services/networkService"
+import { NETWORK } from "util/network/network.util"
function Wallet() {
const [ page, setPage ] = useState('Token')
- const [ chain, setChain ] = useState('')
- const [ tooSmallETH, setTooSmallETH ] = useState(false)
+ const [ tooSmallSec, setTooSmallSec ] = useState(false)
const [ tooSmallBOBA, setTooSmallBOBA ] = useState(false)
const dispatch = useDispatch()
-
+ const network = useSelector(selectActiveNetwork())
const layer = useSelector(selectLayer())
const accountEnabled = useSelector(selectAccountEnabled())
const networkName = useSelector(selectActiveNetworkName())
// low balance warnings
const l2Balances = useSelector(selectlayer2Balance, isEqual)
- useEffect(()=>{
+ // fetching transactions
+ useEffect(() => {
if (accountEnabled)
dispatch(fetchTransactions())
- },[ dispatch, accountEnabled ])
+ }, [ dispatch, accountEnabled ])
+
+ useInterval(() => {
+ if (accountEnabled) {
+ dispatch(fetchTransactions())
+ }
+ }, POLL_INTERVAL)
- useEffect(()=>{
- if (accountEnabled && l2Balances.length > 0) {
+ useEffect(() => {
+ if (accountEnabled && l2Balances.length > 0) {
- const l2BalanceETH = l2Balances.find((i) => i.symbol === 'ETH')
+ const l2BalanceSec = l2Balances.find((i) => i.symbol === networkService.L1NativeTokenSymbol)
const l2BalanceBOBA = l2Balances.find((i) => i.symbol === 'BOBA')
- if (l2BalanceETH && l2BalanceETH.balance) {
- setTooSmallETH(new BN(logAmount(l2BalanceETH.balance, 18)).lt(new BN(0.003)))
+ if (l2BalanceSec && l2BalanceSec.balance) {
+ // FOR ETH MIN BALANCE 0.003ETH for other sec tokens 1
+ const minBalance = network === NETWORK.ETHEREUM ? 0.003 : 1;
+ setTooSmallSec(new BN(logAmount(l2BalanceSec.balance, 18)).lt(new BN(minBalance)))
} else {
- // in case of zero ETH balance we are setting tooSmallETH
- setTooSmallETH(true)
+ // in case of zero ETH balance we are setting tooSmallSec
+ setTooSmallSec(true)
}
if (l2BalanceBOBA && l2BalanceBOBA.balance) {
- setTooSmallBOBA(new BN(logAmount(l2BalanceBOBA.balance, 18)).lt(new BN(4.0)))
+ // FOR BOBA MIN BALANCE of 1
+ setTooSmallBOBA(new BN(logAmount(l2BalanceBOBA.balance, 18)).lt(new BN(1)))
} else {
// in case of zero BOBA balance we are setting tooSmallBOBA
setTooSmallBOBA(true)
}
}
- },[ l2Balances, accountEnabled ])
+ }, [ l2Balances, accountEnabled, network ])
useEffect(() => {
if (layer === 'L2') {
- if (tooSmallBOBA && tooSmallETH) {
- dispatch(openError('Wallet empty - please bridge in ETH or BOBA from L1'))
+ if (tooSmallBOBA && tooSmallSec) {
+ dispatch(openError(`Wallet empty - please bridge in ${networkService.L1NativeTokenSymbol} or BOBA from L1`))
}
}
- },[tooSmallETH, tooSmallBOBA, layer, dispatch])
+ }, [ tooSmallSec, tooSmallBOBA, layer, dispatch ])
- useInterval(() => {
- if (accountEnabled) {
- dispatch(fetchTransactions())
- }
- }, POLL_INTERVAL)
-
- useEffect(() => {
- if (layer === 'L2') {
- setChain('Boba Wallet')
- } else if (layer === 'L1') {
- setChain('Ethereum Wallet')
- }
- }, [ layer ])
- const handleSwitch = (l) => {
- if (l === 'Token') {
- setPage('Token')
- } else if (l === 'NFT') {
- setPage('NFT')
- }
- }
-
- async function emergencySwap () {
+ async function emergencySwap() {
const res = await dispatch(getETHMetaTransaction())
- if (res) dispatch(openAlert('Emergency Swap submitted'))
+ if (res) {
+ dispatch(openAlert('Emergency Swap submitted'))
+ }
}
return (
@@ -126,10 +118,11 @@ function Wallet() {
accountEnabled={accountEnabled}
/>
- {layer === 'L2' && tooSmallETH &&
-
+ {layer === 'L2' &&
+ tooSmallSec &&
+
-
+
- Using Boba requires a minimum ETH balance (of 0.002 ETH) regardless of your fee setting,
- otherwise MetaMask may incorrectly reject transactions. If you ran out of ETH, use
- EMERGENCY SWAP to swap BOBA for 0.005 ETH at market rates.
+ Using {networkService.L1NativeTokenSymbol} requires a minimum BOBA balance (of 1 BOBA) regardless of your fee setting,
+ otherwise MetaMask may incorrectly reject transactions. If you ran out of BOBA, use
+ EMERGENCY SWAP to swap {networkService.L1NativeTokenSymbol} for 1 BOBA at market rates.
+ }
+
+ }
+
+
+
+ {!!accountEnabled && inflight.length > 0 &&
+
+ {
+ dispatch(setActiveHistoryTab("Pending"));
+ navigate('/history')
}}
- >Tweet Now
-
-
-
- For the Tweet link, tap the share icon, tap "Share Tweet via", and finally select "Copy link to Tweet".
-
-
- setTweetUrl(e?.target?.value.split('?')[0])} //remove the superfluous stuff after the "?"
- />
-
-
- You are limited to one fountain call per twitter account per day.
- The transaction will not show in your history since it's a MetaTransaction (the gas is covered by Boba).
-
-
- {await claimAuthenticatedFaucetTokens()}}
- size="small"
>
- Authenticated Faucet
-
-
- {faucetErrorMsg ? {faucetErrorMsg} : null}
+ Bridge in progress:{' '}
+ Click for detailed status
+
+
-
- }
-
- {!!accountEnabled && inflight.length > 0 &&
-
- {
- dispatch(setActiveHistoryTab("Pending"));
- navigate('/history')
- }}
- >
- Bridge in progress:{' '}
- Click for detailed status
-
-
-
- }
-
-
-
-
- {tokenTableHeads.map((item) => {
+ }
+
+
+
+
+ {tokenTableHeads.map((item) => {
+ return (
+ {item.label}
+ )
+ })}
+
+ {layer === 'L2' ? !balanceLoading || !!l2Balance.length ? l2Balance.map((i) => {
return (
- {item.label}
+
)
- })}
-
- {networkLayer === 'L2' ? !balanceLoading || !!childBalance.length ? childBalance.map((i, index) => {
- return (
-
- )
- }) :
-
-
- : null}
- {networkLayer === 'L1' ? !balanceLoading || !!rootBalance.length ? rootBalance.map((i, index) => {
- return (
-
- )
- }) :
-
-
- : null}
-
-
- >)
+ }) :
+
+
+ : null}
+ {layer === 'L1' ? !balanceLoading || !!l1Balance.length ? l1Balance.map((i) => {
+ return (
+
+ )
+ }) :
+
+
+ : null}
+
+
+ >)
}
}
diff --git a/packages/boba/gateway/src/images/moonbase.png b/packages/boba/gateway/src/images/moonbase.png
new file mode 100644
index 0000000000..e4961a5a62
Binary files /dev/null and b/packages/boba/gateway/src/images/moonbase.png differ
diff --git a/packages/boba/gateway/src/reducers/exitReducer.js b/packages/boba/gateway/src/reducers/exitReducer.js
deleted file mode 100644
index b53f74738a..0000000000
--- a/packages/boba/gateway/src/reducers/exitReducer.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-Copyright 2021-present Boba Network.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License. */
-
-import { keyBy } from 'lodash';
-
-const initialState = {
- pending: {},
- exited: {}
-};
-
-function exitReducer (state = initialState, action) {
- switch (action.type) {
- case 'EXIT/GETALL/SUCCESS':
- // action.payload will be null on an event timeout, so return old state
- if (!action.payload) {
- return state;
- }
- return { ...state, ...action.payload };
- case 'EXIT/CREATE/SUCCESS':
- return {
- ...state,
- };
- case 'EXIT/CHECKALL/SUCCESS':
- return {
- ...state,
- pending: {
- ...state.pending,
- ...keyBy(action.payload, 'hash')
- }
- };
- default:
- return state;
- }
-}
-
-export default exitReducer;
diff --git a/packages/boba/gateway/src/reducers/index.js b/packages/boba/gateway/src/reducers/index.js
index de385c09ac..97f9bc93a7 100644
--- a/packages/boba/gateway/src/reducers/index.js
+++ b/packages/boba/gateway/src/reducers/index.js
@@ -21,7 +21,6 @@ import transactionReducer from './transactionReducer'
import dataReducer from './dataReducer'
import statusReducer from './statusReducer'
import balanceReducer from './balanceReducer'
-import exitReducer from './exitReducer'
import queueReducer from './queueReducer'
import tokenReducer from './tokenReducer'
import nftReducer from './nftReducer'
@@ -47,7 +46,6 @@ const rootReducer = combineReducers({
signature: signatureReducer,
status: statusReducer,
balance: balanceReducer,
- exit: exitReducer,
queue: queueReducer,
tokenList: tokenReducer,
nft: nftReducer,
diff --git a/packages/boba/gateway/src/reducers/networkReducer.js b/packages/boba/gateway/src/reducers/networkReducer.js
index b0d633497b..1482dcb82c 100644
--- a/packages/boba/gateway/src/reducers/networkReducer.js
+++ b/packages/boba/gateway/src/reducers/networkReducer.js
@@ -76,4 +76,3 @@ function networkReducer(state = initialState, action) {
}
export default networkReducer
-
diff --git a/packages/boba/gateway/src/selectors/exitSelector.js b/packages/boba/gateway/src/selectors/exitSelector.js
deleted file mode 100644
index 75bca8b658..0000000000
--- a/packages/boba/gateway/src/selectors/exitSelector.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-Copyright 2021-present Boba Network.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License. */
-
-export function selectPendingExits (state) {
- return Object.values(state.exit.pending);
-}
-
-export function selectExitedExits (state) {
- return Object.values(state.exit.exited);
-}
diff --git a/packages/boba/gateway/src/services/abi/BobaGasPriceOracle.abi.js b/packages/boba/gateway/src/services/abi/BobaGasPriceOracle.abi.js
new file mode 100644
index 0000000000..621133adc6
--- /dev/null
+++ b/packages/boba/gateway/src/services/abi/BobaGasPriceOracle.abi.js
@@ -0,0 +1,12 @@
+const BobaGasPriceOracleABI = [
+ 'function priceRatio() public view returns (uint256)',
+ 'function bobaFeeTokenUsers(address) public view returns (bool user)',
+ 'function secondaryFeeTokenUsers(address) public view returns (bool user)',
+ 'function getBOBAForSwap() public view returns (uint256)',
+ 'function getSecondaryFeeTokenForSwap() public view returns (uint256)',
+ 'function useBobaAsFeeToken() public',
+ 'function useETHAsFeeToken() public',
+ 'function useSecondaryFeeTokenAsFeeToken() public',
+]
+
+export default BobaGasPriceOracleABI;
diff --git a/packages/boba/gateway/src/services/abi/L1StandardBridge.abi.js b/packages/boba/gateway/src/services/abi/L1StandardBridge.abi.js
new file mode 100644
index 0000000000..8bc8a62ca1
--- /dev/null
+++ b/packages/boba/gateway/src/services/abi/L1StandardBridge.abi.js
@@ -0,0 +1,10 @@
+const L1StandardBridgeABI = [
+ 'function depositETH(uint32 _l2Gas, bytes calldata _data) external payable',
+ 'function depositETHTo(address _to, uint32 _l2Gas, bytes calldata _data) external payable',
+ 'function depositERC20(address _l1Token,address _l2Token, uint256 _amount, uint32 _l2Gas,bytes calldata _data) external',
+ 'function depositERC20To(address _l1Token, address _l2Token, address _to, uint256 _amount, uint32 _l2Gas,bytes calldata _data) external',
+ 'function depositNativeToken(uint32 _l2Gas, bytes calldata _data) external payable',
+ 'function depositNativeTokenTo(address _to,uint32 _l2Gas,bytes calldata _data) external payable'
+]
+
+export default L1StandardBridgeABI;
diff --git a/packages/boba/gateway/src/services/app.service.js b/packages/boba/gateway/src/services/app.service.js
new file mode 100644
index 0000000000..24a8b19342
--- /dev/null
+++ b/packages/boba/gateway/src/services/app.service.js
@@ -0,0 +1,259 @@
+import { NETWORK, NETWORK_TYPE } from "util/network/network.util";
+// testnet addresss
+import addresses_Goerli from "@boba/register/addresses/addressesGoerli_0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148"
+import addresses_BobaBase from "@boba/register/addresses/addressesBobaBase_0xF8d0bF3a1411AC973A606f90B2d1ee0840e5979B"
+import addresses_BobaOperaTestnet from "@boba/register/addresses/addressesBobaOperaTestnet_0x12ad9f501149D3FDd703cC10c567F416B7F0af8b"
+import addresses_BobaFuji from "@boba/register/addresses/addressBobaFuji_0xcE78de95b85212BC348452e91e0e74c17cf37c79"
+import addresses_BobaBnbTestnet from "@boba/register/addresses/addressBobaBnbTestnet_0xAee1fb3f4353a9060aEC3943fE932b6Efe35CdAa"
+
+// mainnet address
+import addresses_Mainnet from "@boba/register/addresses/addressesMainnet_0x8376ac6C3f73a25Dd994E0b0669ca7ee0C02F089"
+import addresses_BobaBeam from "@boba/register/addresses/addressBobaBeam_0x564c10A60af35a07f0EA8Be3106a4D81014b21a0"
+import addresses_BobaAvax from "@boba/register/addresses/addressBobaAvax_0x00220f8ce1c4be8436574e575fE38558d85e2E6b"
+import addresses_BobaBnb from "@boba/register/addresses/addressBobaBnb_0xeb989B25597259cfa51Bd396cE1d4B085EC4c753"
+import addresses_BobaOpera from "@boba/register/addresses/addressBobaOpera_0x4e7325bcf09e091Bb8119258B885D4ef687B7386"
+
+// layerzero addresses.
+import layerZeroTestnet from "@boba/register/addresses/layerZeroTestnet"
+import layerZeroMainnet from "@boba/register/addresses/layerZeroMainnet"
+import store from "store";
+
+// predeployed contracts.
+
+const ERROR_ADDRESS = '0x0000000000000000000000000000000000000000'
+const L1_ETH_Address = '0x0000000000000000000000000000000000000000'
+const L2_BOBA_Address = '0x4200000000000000000000000000000000000006'
+const L2MessengerAddress = '0x4200000000000000000000000000000000000007'
+const L2StandardBridgeAddress = '0x4200000000000000000000000000000000000010'
+const L2GasOracle = '0x420000000000000000000000000000000000000F'
+const L2_SECONDARYFEETOKEN_ADDRESS = '0x4200000000000000000000000000000000000023'
+
+const ADDRESS_CONFIG = {
+ [ NETWORK_TYPE.MAINNET ]: {
+ [ NETWORK.ETHEREUM ]: {
+ ...addresses_Mainnet,
+ ...layerZeroMainnet.BOBA_Bridges.Mainnet,
+ ...layerZeroMainnet.Layer_Zero_Protocol.Mainnet,
+ layerZeroTargetChainID: layerZeroMainnet.Layer_Zero_Protocol.Mainnet.Layer_Zero_ChainId,
+ },
+ [ NETWORK.AVAX ]: {
+ ...addresses_BobaAvax,
+ ...layerZeroMainnet.BOBA_Bridges.Avalanche,
+ ...layerZeroMainnet.Layer_Zero_Protocol.Avalanche,
+ layerZeroTargetChainID: layerZeroMainnet.Layer_Zero_Protocol.Mainnet.Layer_Zero_ChainId,
+ },
+ [ NETWORK.MOONBEAM ]: {
+ ...addresses_BobaBeam,
+ ...layerZeroMainnet.BOBA_Bridges.Moonbeam,
+ ...layerZeroMainnet.Layer_Zero_Protocol.Moonbeam,
+ layerZeroTargetChainID: layerZeroMainnet.Layer_Zero_Protocol.Mainnet.Layer_Zero_ChainId,
+ },
+ [ NETWORK.BNB ]: {
+ ...addresses_BobaBnb,
+ ...layerZeroMainnet.BOBA_Bridges.BNB,
+ ...layerZeroMainnet.Layer_Zero_Protocol.BNB,
+ layerZeroTargetChainID: layerZeroMainnet.Layer_Zero_Protocol.Mainnet.Layer_Zero_ChainId,
+ },
+ [ NETWORK.FANTOM ]: addresses_BobaOpera,
+ },
+ [ NETWORK_TYPE.TESTNET ]: {
+ [ NETWORK.ETHEREUM ]: {
+ ...addresses_Goerli,
+ ...layerZeroTestnet.BOBA_Bridges.Testnet,
+ ...layerZeroTestnet.Layer_Zero_Protocol.Testnet,
+ layerZeroTargetChainID: layerZeroTestnet.Layer_Zero_Protocol.Testnet.Layer_Zero_ChainId,
+ },
+ [ NETWORK.AVAX ]: {
+ ...addresses_BobaFuji,
+ ...layerZeroTestnet.BOBA_Bridges.Avalanche,
+ ...layerZeroTestnet.Layer_Zero_Protocol.Avalanche,
+ layerZeroTargetChainID: layerZeroTestnet.Layer_Zero_Protocol.Avalanche.Layer_Zero_ChainId,
+ },
+ [ NETWORK.FANTOM ]: {
+ ...addresses_BobaOperaTestnet,
+ ...layerZeroTestnet.BOBA_Bridges.Fantom,
+ ...layerZeroTestnet.Layer_Zero_Protocol.Fantom,
+ layerZeroTargetChainID: layerZeroTestnet.Layer_Zero_Protocol.Fantom.Layer_Zero_ChainId,
+ },
+ [ NETWORK.BNB ]: {
+ ...addresses_BobaBnbTestnet,
+ ...layerZeroTestnet.BOBA_Bridges.BNB,
+ ...layerZeroTestnet.Layer_Zero_Protocol.BNB,
+ layerZeroTargetChainID: layerZeroTestnet.Layer_Zero_Protocol.Fantom.Layer_Zero_ChainId,
+ },
+ [ NETWORK.MOONBEAM ]: addresses_BobaBase,
+ }
+}
+
+const SUPPORTED_ASSETS = {
+ [ NETWORK_TYPE.MAINNET ]: {
+ [ NETWORK.ETHEREUM ]: {
+ tokens: [
+ 'USDT', 'DAI', 'USDC', 'WBTC', 'REP', 'BAT', 'ZRX', 'SUSHI',
+ 'LINK', 'UNI', 'BOBA', 'xBOBA', 'OMG', 'FRAX', 'FXS', 'DODO',
+ 'UST', 'BUSD', 'BNB', 'FTM', 'MATIC', 'UMA', 'DOM', 'OLO',
+ 'WAGMIv0', 'WAGMIv1', 'WAGMIv2', 'WAGMIv2-Oolong', 'WAGMIv3', 'WAGMIv3-Oolong',
+ 'CGT'
+ ],
+ tokenAddresses: {
+ WAGMIv0: {
+ 'L1': 'WAGMIv0',
+ 'L2': '0x8493C4d9Cd1a79be0523791E3331c78Abb3f9672'
+ },
+ WAGMIv1: {
+ 'L1': 'WAGMIv1',
+ 'L2': '0xCe055Ea4f29fFB8bf35E852522B96aB67Cbe8197'
+ },
+ WAGMIv2: {
+ 'L1': 'WAGMIv2',
+ 'L2': '0x76B5908ecd0ae3DB23011ae96b7C1f803D63136c'
+ },
+ 'WAGMIv2-Oolong': {
+ 'L1': 'WAGMIv2-Oolong',
+ 'L2': '0x49a3e4a1284829160f95eE785a1A5FfE2DD5Eb1D'
+ },
+ 'WAGMIv3': {
+ 'L1': 'WAGMIv3',
+ 'L2': '0xC6158B1989f89977bcc3150fC1F2eB2260F6cabE'
+ },
+ 'WAGMIv3-Oolong': {
+ 'L1': 'WAGMIv3-Oolong',
+ 'L2': '0x70bf3c5B5d80C4Fece8Bde0fCe7ef38B688463d4'
+ },
+ OLO: {
+ 'L1': 'OLO',
+ 'L2': '0x5008F837883EA9a07271a1b5eB0658404F5a9610'
+ },
+ CGT: {
+ 'L1': '0xf56b164efd3cfc02ba739b719b6526a6fa1ca32a',
+ 'L2': '0xf56b164efd3cfc02ba739b719b6526a6fa1ca32a'
+ }
+ }
+ },
+ [ NETWORK.AVAX ]: {
+ tokenAddresses: {
+ 'EVO': { 'L1': '0x42006Ab57701251B580bDFc24778C43c9ff589A1', 'L2': '0xc8849f32138de93F6097199C5721a9EfD91ceE01' }
+ },
+ tokens: [ 'BOBA', 'AVAX', 'EVO', 'USDT.e', 'USDt', 'USDC.e', 'BUSD.e', 'BUSD', 'DAI.e' ]
+ },
+ [ NETWORK.MOONBEAM ]: {
+ tokenAddresses: {},
+ tokens: [ 'BOBA', 'GLMR' ]
+ },
+ [ NETWORK.BNB ]: {
+ tokenAddresses: {},
+ tokens: [ 'BOBA', 'BNB', 'BUSD', 'USDC', 'USDT', 'SUSHI' ]
+ },
+ [ NETWORK.FANTOM ]: {
+ tokenAddresses: {},
+ tokens: [ 'BOBA', 'FTM', 'USDC', 'DAI' ]
+ },
+ },
+ [ NETWORK_TYPE.TESTNET ]: {
+ [ NETWORK.ETHEREUM ]: {
+ tokenAddresses: {},
+ tokens: [ 'BOBA', 'USDC', 'OMG', 'xBOBA' ]
+ },
+ [ NETWORK.AVAX ]: {
+ tokenAddresses: {},
+ tokens: [ 'BOBA', 'AVAX' ]
+ },
+ [ NETWORK.MOONBEAM ]: {
+ tokenAddresses: {},
+ tokens: [ 'BOBA', 'GLMR' ]
+ },
+ [ NETWORK.BNB ]: {
+ tokenAddresses: {},
+ tokens: [ 'BOBA', 'BNB' ]
+ },
+ [ NETWORK.FANTOM ]: {
+ tokenAddresses: {},
+ tokens: [ 'BOBA', 'FTM' ]
+ },
+ }
+}
+
+class AppService {
+
+
+
+ /**
+ * @fetchAddresses
+ *
+ * NOTE:
+ * Pre Deployeed contracts add address manually
+ *
+ * - L2StandardBridgeAddress
+ * - L2MessengerAddress
+ * - L2_ETH_Address
+ * - L1_ETH_Address
+ *
+ */
+
+
+ fetchAddresses({
+ networkType,
+ network
+ }) {
+ let addresses = ADDRESS_CONFIG[ networkType ][ network ] || {};
+
+ return {
+ ...addresses,
+ L1LPAddress: addresses.Proxy__L1LiquidityPool,
+ L2LPAddress: addresses.Proxy__L2LiquidityPool,
+ L2StandardBridgeAddress,
+ L2MessengerAddress,
+ L2_ETH_Address: L2_BOBA_Address,
+ L2_BOBA_Address,
+ L1_ETH_Address
+ };
+
+ }
+
+ /**
+ * @fetchSupportedTokens
+ * - get the supported tokens base on network and network type.
+ *
+ * will return {supported tokens and token address}
+ *
+ */
+
+ fetchSupportedAssets({
+ networkType,
+ network
+ }) {
+ return SUPPORTED_ASSETS[ networkType ][ network ] || {};
+ }
+
+
+ /**
+ * @setupInitState
+ * setup initial state of token reducer
+ *
+ */
+
+ setupInitState({
+ l1Token,
+ l1TokenName
+ }) {
+
+ store.dispatch({
+ type: 'TOKEN/GET/SUCCESS',
+ payload: {
+ currency: L1_ETH_Address,
+ addressL1: L1_ETH_Address,
+ addressL2: L2_SECONDARYFEETOKEN_ADDRESS,
+ symbolL1: l1Token,
+ symbolL2: l1Token,
+ decimals: 18,
+ name: l1TokenName,
+ redalert: false,
+ }
+ });
+ }
+
+};
+
+const appService = new AppService();
+
+export default appService;
diff --git a/packages/boba/gateway/src/services/errorService.js b/packages/boba/gateway/src/services/error.service.js
similarity index 100%
rename from packages/boba/gateway/src/services/errorService.js
rename to packages/boba/gateway/src/services/error.service.js
diff --git a/packages/boba/gateway/src/services/faucet.service.js b/packages/boba/gateway/src/services/faucet.service.js
new file mode 100644
index 0000000000..09a3c0ac05
--- /dev/null
+++ b/packages/boba/gateway/src/services/faucet.service.js
@@ -0,0 +1,81 @@
+import networkService from "./networkService";
+import AuthenticatedFaucetJson from "../deployment/contracts/AuthenticatedFaucet.json"
+import { ethers } from "ethers";
+import metaTransactionAxiosInstance from "api/metaTransactionAxios";
+
+class FaucetService {
+
+ /**
+ * @getTestnetETHAuthenticatedMetaTransaction
+ *
+ * @dev Only works on testnet, but can be freely called on production app
+ * */
+ async getTestnetETHAuthenticatedMetaTransaction(tweetId) {
+
+ const Boba_AuthenticatedFaucet = new ethers.Contract(
+ networkService.addresses.AuthenticatedFaucet,
+ AuthenticatedFaucetJson.abi,
+ networkService.L2Provider,
+ )
+
+ const nonce = parseInt(
+ await Boba_AuthenticatedFaucet.getNonce(networkService.account),
+ 10
+ )
+
+ const signer = networkService.provider.getSigner(networkService.account)
+ const hashedMsg = ethers.utils.solidityKeccak256(
+ ['address', 'uint'],
+ [networkService.account, nonce]
+ )
+ const messageHashBin = ethers.utils.arrayify(hashedMsg)
+ const signature = await signer.signMessage(messageHashBin)
+
+ try {
+ const response = await metaTransactionAxiosInstance(
+ networkService.networkConfig
+ ).post('/send.getTestnetETH', { hashedMsg, signature, tweetId, walletAddress: networkService.account })
+ console.log(["metaTransactionAxiosInstance res",response])
+ } catch (error) {
+ let errorMsg = error?.response?.data?.error?.error?.body
+ if (errorMsg) {
+ errorMsg = JSON.stringify(errorMsg)?.match(/execution reverted:\s(.+)\\"/)
+ errorMsg = errorMsg ? errorMsg[1]?.trim() : null;
+ }
+ console.log(`MetaTx error for getTestnetETH: ${errorMsg}`)
+ if (errorMsg?.includes('Invalid request')) {
+ errorMsg = errorMsg.match(/Invalid request:(.+)/)
+ if (errorMsg) {
+ const errorMap = [
+ 'Twitter API error - Probably limits hit.',
+ 'Twitter account needs to exist at least 48 hours.',
+ 'Invalid Tweet, be sure to tweet the Boba Bubble provided above.',
+ 'Your Twitter account needs more than 5 followers.',
+ 'You need to have tweeted more than 2 times.',
+ ]
+ try {
+ errorMsg = errorMap[parseInt(errorMsg[1]) - 1]
+ } catch(err) {
+ console.error(err)
+ errorMsg = 'Unexpected Twitter error.'
+ }
+ } else {
+ errorMsg = 'Not expected Turing error.'
+ }
+ } else {
+ const errorMap = {
+ 'Cooldown': 'Cooldown: You need to wait 24h to claim again with this Twitter account.',
+ 'No testnet funds': 'Faucet drained: Please reach out to us.',
+ 'Rate limit reached': 'Throttling: Too many requests. Throttling to not hit Twitter rate limits.',
+ }
+ errorMsg = errorMap[errorMsg];
+ }
+ return errorMsg ?? 'Limits reached or Twitter constraints not met.'
+ }
+ }
+
+}
+
+const faucetService = new FaucetService();
+
+export default faucetService;
diff --git a/packages/boba/gateway/src/services/gas.service.js b/packages/boba/gateway/src/services/gas.service.js
new file mode 100644
index 0000000000..ba0bc351c9
--- /dev/null
+++ b/packages/boba/gateway/src/services/gas.service.js
@@ -0,0 +1,40 @@
+
+
+import { logAmount } from "util/amountConvert";
+import networkService from "./networkService";
+
+
+class GasService {
+
+ /**
+ * @getGas
+ */
+
+ async getGas() {
+ try {
+ // get gas price
+ const gasPrice1 = await networkService.L1Provider.getGasPrice()
+ const gasPrice2 = await networkService.L2Provider.getGasPrice()
+ // get block count
+ const block1 = await networkService.L1Provider.getBlockNumber()
+ const block2 = await networkService.L2Provider.getBlockNumber()
+
+ const gasData = {
+ gasL1: Number(logAmount(gasPrice1.toString(),9)).toFixed(0),
+ gasL2: Number(logAmount(gasPrice2.toString(),9)).toFixed(0),
+ blockL1: Number(block1),
+ blockL2: Number(block2),
+ }
+
+ return gasData
+ } catch (error) {
+ console.log("GS: getGas error:",error)
+ return error
+ }
+ }
+
+}
+
+const gasService = new GasService();
+
+export default gasService;
diff --git a/packages/boba/gateway/src/services/graphQLService.js b/packages/boba/gateway/src/services/graphql.service.js
similarity index 100%
rename from packages/boba/gateway/src/services/graphQLService.js
rename to packages/boba/gateway/src/services/graphql.service.js
diff --git a/packages/boba/gateway/src/services/networkService.js b/packages/boba/gateway/src/services/networkService.js
index 78b9ab049c..93a38d5396 100644
--- a/packages/boba/gateway/src/services/networkService.js
+++ b/packages/boba/gateway/src/services/networkService.js
@@ -64,10 +64,8 @@ import L2BillingContractJson from "@boba/contracts/artifacts/contracts/L2Billing
//special one-off locations
import L1ERC20Json from '../deployment/contracts/L1ERC20.json'
-import OMGJson from '../deployment/contracts/OMG.json'
import TuringMonsterJson from "../deployment/contracts/NFTMonsterV2.json"
import AuthenticatedFaucetJson from "../deployment/contracts/AuthenticatedFaucet.json"
-import Boba_GasPriceOracleJson from "../deployment/contracts/Boba_GasPriceOracle.json"
//WAGMI ABIs
import WAGMIv0Json from "../deployment/contracts/WAGMIv0.json"
@@ -86,20 +84,12 @@ import LZEndpointMockJson from "../deployment/contracts/crosschain/LZEndpointMoc
import { getNftImageUrl } from 'util/nftImage'
import { getNetwork } from 'util/masterConfig'
-import etherScanInstance from 'api/etherScanAxios'
import omgxWatcherAxiosInstance from 'api/omgxWatcherAxios'
import coinGeckoAxiosInstance from 'api/coinGeckoAxios'
-import verifierWatcherAxiosInstance from 'api/verifierWatcherAxios'
import metaTransactionAxiosInstance from 'api/metaTransactionAxios'
import { sortRawTokens } from 'util/common'
-import GraphQLService from "./graphQLService"
-
-import addresses_Goerli from "@boba/register/addresses/addressesGoerli_0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148"
-import addresses_Mainnet from "@boba/register/addresses/addressesMainnet_0x8376ac6C3f73a25Dd994E0b0669ca7ee0C02F089"
-
-import layerZeroTestnet from "@boba/register/addresses/layerZeroTestnet"
-import layerZeroMainnet from "@boba/register/addresses/layerZeroMainnet"
+import GraphQLService from "./graphql.service"
import tokenInfo from "@boba/register/addresses/tokenInfo"
@@ -107,41 +97,23 @@ import { bobaBridges } from 'util/bobaBridges'
import { APP_CHAIN, SPEED_CHECK } from 'util/constant'
import { getPoolDetail } from 'util/poolDetails'
import { getNetworkDetail, NETWORK } from 'util/network/network.util'
+import appService from './app.service'
+import BobaGasPriceOracleABI from './abi/BobaGasPriceOracle.abi'
+import L1StandardBridgeABI from './abi/L1StandardBridge.abi'
const ERROR_ADDRESS = '0x0000000000000000000000000000000000000000'
const L1_ETH_Address = '0x0000000000000000000000000000000000000000'
const L2_ETH_Address = '0x4200000000000000000000000000000000000006'
-const L2MessengerAddress = '0x4200000000000000000000000000000000000007'
-const L2StandardBridgeAddress = '0x4200000000000000000000000000000000000010'
+// const L2MessengerAddress = '0x4200000000000000000000000000000000000007'
+// const L2StandardBridgeAddress = '0x4200000000000000000000000000000000000010'
const L2GasOracle = '0x420000000000000000000000000000000000000F'
+const L2_SECONDARYFEETOKEN_ADDRESS = '0x4200000000000000000000000000000000000023'
+
let supportedAltL1Chains = []
-let allAddresses = {}
-let l0AllProtocols = {}
-// preload allAddresses
if (APP_CHAIN === 'goerli') {
- const bobaBridges = layerZeroTestnet.BOBA_Bridges.Testnet;
- const l0Protocols = layerZeroTestnet.Layer_Zero_Protocol.Testnet;
- l0AllProtocols = layerZeroTestnet.Layer_Zero_Protocol;
- allAddresses = {
- ...addresses_Goerli,
- L1LPAddress: addresses_Goerli.Proxy__L1LiquidityPool,
- L2LPAddress: addresses_Goerli.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;
- l0AllProtocols = layerZeroMainnet.Layer_Zero_Protocol;
- allAddresses = {
- ...addresses_Mainnet,
- L1LPAddress: addresses_Mainnet.Proxy__L1LiquidityPool,
- L2LPAddress: addresses_Mainnet.Proxy__L2LiquidityPool,
- ...bobaBridges,
- ...l0Protocols
- }
supportedAltL1Chains = ['Moonbeam','BNB', 'Fantom', 'Avalanche']
}
let allTokens = {}
@@ -170,8 +142,7 @@ class NetworkService {
this.L1orL2 = null
this.networkGateway = null
this.networkType = null
- this.L1ProviderBASE = null
- this.L2ProviderBASE = null
+
// Watcher
this.watcher = null
@@ -224,12 +195,18 @@ class NetworkService {
// support token
this.supportedTokens = []
+ this.supportedTokenAddresses = {}
// support alt l1 tokens
this.supportedAltL1Chains = supportedAltL1Chains
// token info
this.tokenInfo = {}
+
+ // newly added properties to network services.
+ this.addresses = {}
+ this.network = null;
+ this.networkConfig = null
}
bindProviderListeners() {
@@ -251,40 +228,37 @@ class NetworkService {
})
}
- async fetchVerifierStatus() {
- const response = await verifierWatcherAxiosInstance(
- this.networkGateway
- ).post('/', { jsonrpc: "2.0", method: "status", id: 1 })
-
- if (response.status === 200) {
- const status = response.data.result
- return status
- } else {
- console.log("Bad verifier response")
- return false
- }
- }
async getBobaFeeChoice() {
+
const bobaFeeContract = new ethers.Contract(
- allAddresses.Boba_GasPriceOracle,
- Boba_GasPriceOracleJson.abi,
+ this.addresses.Boba_GasPriceOracle,
+ BobaGasPriceOracleABI,
this.L2Provider
)
try {
-
let priceRatio = await bobaFeeContract.priceRatio()
- let feeChoice = await bobaFeeContract.bobaFeeTokenUsers(this.account)
+ let feeChoice;
+ if (this.networkGateway === NETWORK.ETHEREUM) {
+ feeChoice = await bobaFeeContract.bobaFeeTokenUsers(this.account)
+ } else {
+ // this returns weather the secondary token getting use as tokenfee
+ feeChoice = await bobaFeeContract.secondaryFeeTokenUsers(this.account)
+ // if it's false which means boba is getting used as tokenfee which is default value.
+ feeChoice = !feeChoice;
+
+ }
+ console.log(
+ 'Fee used as boba', feeChoice
+ )
const bobaFee = {
priceRatio: priceRatio.toString(),
feeChoice
}
-
await addBobaFee( bobaFee )
-
return bobaFee
} catch (error) {
@@ -292,7 +266,6 @@ class NetworkService {
console.log(error)
return error
}
-
}
async switchFee( targetFee ) {
@@ -300,8 +273,8 @@ class NetworkService {
if( this.L1orL2 !== 'L2' ) return
const bobaFeeContract = new ethers.Contract(
- allAddresses.Boba_GasPriceOracle,
- Boba_GasPriceOracleJson.abi,
+ this.addresses.Boba_GasPriceOracle,
+ BobaGasPriceOracleABI,
this.provider.getSigner()
)
@@ -316,6 +289,9 @@ class NetworkService {
} else if (targetFee === 'ETH') {
tx = await bobaFeeContract.useETHAsFeeToken()
await tx.wait()
+ } else if (targetFee === this.L1NativeTokenSymbol) {
+ tx = await bobaFeeContract.useSecondaryFeeTokenAsFeeToken()
+ await tx.wait()
}
await this.getBobaFeeChoice()
@@ -344,15 +320,23 @@ class NetworkService {
]
const owner = this.account
- const spender = allAddresses.Boba_GasPriceOracle
+ const spender = this.addresses.Proxy__Boba_GasPriceOracle
const Boba_GasPriceOracle = new ethers.Contract(
- allAddresses.Boba_GasPriceOracle,
- Boba_GasPriceOracleJson.abi,
+ this.addresses.Proxy__Boba_GasPriceOracle,
+ BobaGasPriceOracleABI,
this.provider.getSigner()
)
- let value = (await Boba_GasPriceOracle.getBOBAForSwap()).toString()
+ let rawValue;
+ if (this.networkGateway === NETWORK.ETHEREUM) {
+ rawValue = await Boba_GasPriceOracle.getBOBAForSwap();
+ } else {
+ rawValue = await Boba_GasPriceOracle.getSecondaryFeeTokenForSwap();
+ }
+
+ let value = (rawValue).toString()
+
const nonce = (await this.BobaContract.nonces(this.account)).toNumber()
const deadline = Math.floor(Date.now() / 1000) + 300
const verifyingContract = this.BobaContract.address
@@ -371,108 +355,37 @@ class NetworkService {
let signature
try {
- signature = await this.provider.send('eth_signTypedData_v4', [this.account, JSON.stringify(data)])
+ signature = await this.provider.send('eth_signTypedData_v4', [ this.account, JSON.stringify(data) ])
} catch (error) {
- console.log(error)
return error
}
try {
+ // change url if network is etheruem
+ const swapUrl = this.networkGateway === NETWORK.ETHEREUM ? '/send.swapBOBAForETH' : '/send.swapSecondaryFeeToken'
const response = await metaTransactionAxiosInstance(
- this.networkGateway
- ).post('/send.swapBOBAForETH', { owner, spender, value, deadline, signature, data })
- console.log("response",response)
+ this.networkConfig
+ ).post(swapUrl, { owner, spender, value, deadline, signature, data })
+ console.log(['meta tx fee res', response])
await this.getBobaFeeChoice()
} catch (error) {
- console.log(error)
- // sigh
let errorData = error.response.data.error
if(errorData.hasOwnProperty('error')) {
errorData = errorData.error.error.body
}
- console.log("returning:",error)
return errorData
}
}
- /** @dev Only works on testnet, but can be freely called on production app */
- async getTestnetETHAuthenticatedMetaTransaction(tweetId) {
-
- console.log("triggering getTestnetETH")
-
- const Boba_AuthenticatedFaucet = new ethers.Contract(
- addresses_Goerli.AuthenticatedFaucet,
- AuthenticatedFaucetJson.abi,
- this.L2Provider,
- )
-
- const nonce = parseInt(
- await Boba_AuthenticatedFaucet.getNonce(this.account),
- 10
- )
-
- const signer = this.provider.getSigner(this.account)
- const hashedMsg = ethers.utils.solidityKeccak256(
- ['address', 'uint'],
- [this.account, nonce]
- )
- const messageHashBin = ethers.utils.arrayify(hashedMsg)
- const signature = await signer.signMessage(messageHashBin)
-
- try {
- const response = await metaTransactionAxiosInstance(
- this.networkGateway
- ).post('/send.getTestnetETH', { hashedMsg, signature, tweetId, walletAddress: this.account })
- console.log("response",response)
- } catch (error) {
- let errorMsg = error?.response?.data?.error?.error?.body
- if (errorMsg) {
- errorMsg = JSON.stringify(errorMsg)?.match(/execution reverted:\s(.+)\\"/)
- errorMsg = errorMsg ? errorMsg[1]?.trim() : null;
- }
- console.log(`MetaTx error for getTestnetETH: ${errorMsg}`)
- if (errorMsg?.includes('Invalid request')) {
- errorMsg = errorMsg.match(/Invalid request:(.+)/)
- if (errorMsg) {
- const errorMap = [
- 'Twitter API error - Probably limits hit.',
- 'Twitter account needs to exist at least 48 hours.',
- 'Invalid Tweet, be sure to tweet the Boba Bubble provided above.',
- 'Your Twitter account needs more than 5 followers.',
- 'You need to have tweeted more than 2 times.',
- ]
- try {
- errorMsg = errorMap[parseInt(errorMsg[1]) - 1]
- } catch(err) {
- console.error(err)
- errorMsg = 'Unexpected Twitter error.'
- }
- } else {
- errorMsg = 'Not expected Turing error.'
- }
- } else {
- const errorMap = {
- 'Cooldown': 'Cooldown: You need to wait 24h to claim again with this Twitter account.',
- 'No testnet funds': 'Faucet drained: Please reach out to us.',
- 'Rate limit reached': 'Throttling: Too many requests. Throttling to not hit Twitter rate limits.',
- }
- errorMsg = errorMap[errorMsg];
- }
- return errorMsg ?? 'Limits reached or Twitter constraints not met.'
- }
- }
-
async getAddress(contractName, varToSet) {
const address = await this.AddressManager.getAddress(contractName)
if (address === ERROR_ADDRESS) {
- console.log(contractName + ' ERROR: NOT IN ADDRESSMANAGER')
return false
} else {
- allAddresses = {
- ...allAddresses,
+ this.addresses = {
+ ...this.addresses,
[varToSet]: address
}
- console.log(contractName +' pulled from AddressManager and set to:', address)
return true
}
}
@@ -480,56 +393,44 @@ class NetworkService {
async getAddressCached(cache, contractName, varToSet) {
const address = cache[contractName]
if (typeof(address) === 'undefined') {
- console.log(contractName + ' ERROR: NOT IN CACHE')
return false
} else {
- allAddresses = {
- ...allAddresses,
+ this.addresses = {
+ ...this.addresses,
[varToSet]: address
}
- console.log(contractName +' pulled from address cache and set to:', address)
return true
}
}
getAllAddresses() {
- return allAddresses
+ return this.addresses;
}
async initializeBase({
- networkGateway,
+ networkGateway: network,
networkType
}) {
- let addresses = null
- this.networkGateway = networkGateway // e.g. mainnet | goerli | ...
+ let addresses = null;
+ this.network = network; //// refer this in other services and clean up iteratively.
+ this.networkGateway = network // e.g. mainnet | goerli | ...
this.networkType = networkType // e.g. mainnet | goerli | ...
// defines the set of possible networks along with chainId for L1 and L2
const networkDetail = getNetworkDetail({
- network: networkGateway,
+ network,
networkType
})
- const L1rpc = networkDetail['L1']['rpcUrl']
- const L2rpc = networkDetail['L2']['rpcUrl']
+ this.networkConfig = networkDetail;
try {
- //fire up the base providers
- const Web3 = require("web3")
-
- this.L1ProviderBASE = new Web3(new Web3.providers.HttpProvider(L1rpc))
- this.L2ProviderBASE = new Web3(new Web3.providers.HttpProvider(L2rpc))
-
- //this.L1ProviderBASE.eth.handleRevert = true
- //this.L2ProviderBASE.eth.handleRevert = true
-
- if (NETWORK[networkGateway]) {
+ if (NETWORK[network]) {
this.payloadForL1SecurityFee = networkDetail.payloadForL1SecurityFee
this.payloadForFastDepositBatchCost = networkDetail.payloadForFastDepositBatchCost
this.gasEstimateAccount = networkDetail.gasEstimateAccount
- console.log('gasEstimateAccount:', this.gasEstimateAccount)
}
this.L1Provider = new ethers.providers.StaticJsonRpcProvider(
@@ -540,13 +441,27 @@ class NetworkService {
networkDetail['L2']['rpcUrl']
)
+ this.L1NativeTokenSymbol = networkDetail['L1']['symbol']
+ this.L1NativeTokenName = networkDetail['L1']['tokenName'] || this.L1NativeTokenSymbol
+
+ appService.setupInitState({
+ l1Token: this.L1NativeTokenSymbol,
+ l1TokenName: this.L1NativeTokenName
+ })
+
+ // get the tokens based on l1ChainId
const chainId = (await this.L1Provider.getNetwork()).chainId
this.tokenInfo = tokenInfo[chainId]
- if (!!NETWORK[networkGateway]) {
- addresses = allAddresses
+ if (!!NETWORK[ network ]) {
+ addresses = appService.fetchAddresses({
+ network,
+ networkType
+ });
}
+ this.addresses = addresses
+
// this.AddressManagerAddress = nw[networkGateway].addressManager
// console.log("AddressManager address:",this.AddressManagerAddress)
@@ -557,170 +472,83 @@ class NetworkService {
// )
// //console.log("AddressManager Contract:",this.AddressManager)
+ if (network === NETWORK.ETHEREUM) {
+ // check only if selected network is ETHEREUM
+ if (!(await this.getAddressCached(addresses, 'BobaMonsters', 'BobaMonsters'))) return
+ if (!(await this.getAddressCached(addresses, 'Proxy__L1LiquidityPool', 'L1LPAddress'))) return
+ if (!(await this.getAddressCached(addresses, 'Proxy__L2LiquidityPool', 'L2LPAddress'))) return
+ if (!(await this.getAddressCached(addresses, 'Proxy__BobaFixedSavings', 'BobaFixedSavings'))) return
+ }
+
if (!(await this.getAddressCached(addresses, 'Proxy__L1CrossDomainMessenger', 'L1MessengerAddress'))) return
if (!(await this.getAddressCached(addresses, 'Proxy__L1CrossDomainMessengerFast', 'L1FastMessengerAddress'))) return
if (!(await this.getAddressCached(addresses, 'Proxy__L1StandardBridge', 'L1StandardBridgeAddress'))) return
- if (!(await this.getAddressCached(addresses, 'Proxy__BobaFixedSavings', 'BobaFixedSavings'))) return
if (!(await this.getAddressCached(addresses, 'Proxy__Boba_GasPriceOracle', 'Boba_GasPriceOracle'))) return
- //if (!(await this.getAddressCached(addresses, 'DiscretionaryExitFee', 'DiscretionaryExitFee'))) return
// not critical
this.getAddressCached(addresses, 'DiscretionaryExitFee', 'DiscretionaryExitFee')
- console.log("DiscretionaryExitFee:",allAddresses.DiscretionaryExitFee)
-
- //L2CrossDomainMessenger is a predeploy, so add by hand....
- allAddresses = {
- ...allAddresses,
- 'L2MessengerAddress': L2MessengerAddress,
- }
-
- //L2StandardBridgeAddress is a predeploy, so add by hand....
- allAddresses = {
- ...allAddresses,
- 'L2StandardBridgeAddress': L2StandardBridgeAddress,
- }
-
- //L2MessengerAddress is a predeploy, so add by hand....
- allAddresses = {
- ...allAddresses,
- 'L2MessengerAddress': L2MessengerAddress
- }
-
- //L2_ETH_Address is a predeploy, so add by hand....
- allAddresses = {
- ...allAddresses,
- 'L2_ETH_Address': L2_ETH_Address
- }
-
- //L1_ETH_Address is a predeploy, so add by hand....
- allAddresses = {
- ...allAddresses,
- 'L1_ETH_Address': L1_ETH_Address
- }
this.L1StandardBridgeContract = new ethers.Contract(
- allAddresses.L1StandardBridgeAddress,
- L1StandardBridgeJson.abi,
+ this.addresses.L1StandardBridgeAddress,
+ L1StandardBridgeABI,
this.L1Provider
)
- this.supportedTokens = [ 'USDT', 'DAI', 'USDC', 'WBTC',
- 'REP', 'BAT', 'ZRX', 'SUSHI',
- 'LINK', 'UNI', 'BOBA', 'xBOBA',
- 'OMG', 'FRAX', 'FXS', 'DODO',
- 'UST', 'BUSD', 'BNB', 'FTM',
- 'MATIC', 'UMA', 'DOM', 'OLO',
- 'WAGMIv0',
- 'WAGMIv1',
- 'WAGMIv2', 'WAGMIv2-Oolong',
- 'WAGMIv3', 'WAGMIv3-Oolong',
- 'CGT'
- ]
-
- //not all tokens are on Goerli
- if ( networkGateway === 'goerli') {
- this.supportedTokens = [ 'BOBA', 'USDC', 'OMG', 'xBOBA' ]
- }
+ // fech suported assets eg. tokens and address.
+ const tokenAsset = appService.fetchSupportedAssets({
+ network,
+ networkType
+ })
- await Promise.all(this.supportedTokens.map(async (key) => {
+ this.supportedTokens = tokenAsset.tokens;
+ this.supportedTokenAddresses = tokenAsset.tokenAddresses;
+ const tokenList = {}
- const L2a = addresses['TK_L2'+key]
+ this.supportedTokens.forEach((key) => {
+ const L1a = addresses[ 'TK_L1' + key ]
+ const L2a = addresses[ 'TK_L2' + key ]
- if(key === 'xBOBA') {
+ if (key === 'xBOBA') {
if (L2a === ERROR_ADDRESS) {
- console.log(key + ' ERROR: TOKEN NOT IN ADDRESSMANAGER')
return false
} else {
- allTokens[key] = {
+ tokenList[ key ] = {
'L1': 'xBOBA',
'L2': L2a
}
}
}
- else if(key === 'WAGMIv0') {
- allTokens[key] = {
- 'L1': 'WAGMIv0',
- 'L2': '0x8493C4d9Cd1a79be0523791E3331c78Abb3f9672'
- }
- }
- else if(key === 'WAGMIv1') {
- allTokens[key] = {
- 'L1': 'WAGMIv1',
- 'L2': '0xCe055Ea4f29fFB8bf35E852522B96aB67Cbe8197'
- }
- }
- else if(key === 'WAGMIv2') {
- allTokens[key] = {
- 'L1': 'WAGMIv2',
- 'L2': '0x76B5908ecd0ae3DB23011ae96b7C1f803D63136c'
- }
- }
- else if(key === 'WAGMIv2-Oolong') {
- allTokens[key] = {
- 'L1': 'WAGMIv2-Oolong',
- 'L2': '0x49a3e4a1284829160f95eE785a1A5FfE2DD5Eb1D'
- }
- }
- else if(key === 'WAGMIv3') {
- allTokens[key] = {
- 'L1': 'WAGMIv3',
- 'L2': '0xC6158B1989f89977bcc3150fC1F2eB2260F6cabE'
- }
- }
- else if(key === 'WAGMIv3-Oolong') {
- allTokens[key] = {
- 'L1': 'WAGMIv3-Oolong',
- 'L2': '0x70bf3c5B5d80C4Fece8Bde0fCe7ef38B688463d4'
- }
- }
- else if(key === 'OLO') {
- allTokens[key] = {
- 'L1': 'OLO',
- 'L2': '0x5008F837883EA9a07271a1b5eB0658404F5a9610'
- }
- }
- else if(key === 'CGT') {
- allTokens[key] = {
- 'L1': '0xf56b164efd3cfc02ba739b719b6526a6fa1ca32a',
- 'L2': '0xf56b164efd3cfc02ba739b719b6526a6fa1ca32a'
+
+ // NOTE: if not in address manager then refer it from token assets config.
+ if (typeof L1a === 'undefined' || typeof L2a === 'undefined') {
+ if (typeof this.supportedTokenAddresses[key] !== 'undefined') {
+ tokenList[key] = this.supportedTokenAddresses[key]
}
- }
- else {
- const L1a = addresses['TK_L1'+key]
- if (L1a === ERROR_ADDRESS || L2a === ERROR_ADDRESS) {
- console.log(key + ' ERROR: TOKEN NOT IN ADDRESSMANAGER')
- return false
- } else {
- allTokens[key] = {
- 'L1': L1a,
- 'L2': L2a
- }
+ return false
+ } else {
+ tokenList[key] = {
+ 'L1': L1a,
+ 'L2': L2a
}
}
+ })
- }))
-
- this.tokenAddresses = allTokens
-
- if (!(await this.getAddressCached(addresses, 'BobaMonsters', 'BobaMonsters'))) return
-
- if (!(await this.getAddressCached(addresses, 'Proxy__L1LiquidityPool', 'L1LPAddress'))) return
- if (!(await this.getAddressCached(addresses, 'Proxy__L2LiquidityPool', 'L2LPAddress'))) return
+ this.tokenAddresses = tokenList
+ allTokens = tokenList;
- if(allAddresses.L2StandardBridgeAddress !== null) {
+ if(addresses.L2StandardBridgeAddress !== null) {
this.L2StandardBridgeContract = new ethers.Contract(
- allAddresses.L2StandardBridgeAddress,
+ addresses.L2StandardBridgeAddress,
L2StandardBridgeJson.abi,
this.L2Provider
)
}
this.L2_ETH_Contract = new ethers.Contract(
- allAddresses.L2_ETH_Address,
+ addresses.L2_ETH_Address,
L2ERC20Json.abi,
this.L2Provider
)
- //console.log("L2_ETH_Contract:", this.L2_ETH_Contract.address)
/*The test token*/
this.L1_TEST_Contract = new ethers.Contract(
@@ -728,103 +556,82 @@ class NetworkService {
L1ERC20Json.abi,
this.L1Provider
)
- //console.log('L1_TEST_Contract:', this.L1_TEST_Contract)
this.L2_TEST_Contract = new ethers.Contract(
allTokens.BOBA.L2, //this will get changed anyway when the contract is used
L2ERC20Json.abi,
this.L2Provider
)
- //console.log('L2_TEST_Contract:', this.L2_TEST_Contract)
/*The OMG token*/
//We need this seperately because OMG is not ERC20 compliant
- this.L1_OMG_Contract = new ethers.Contract(
+ /* this.L1_OMG_Contract = new ethers.Contract(
allTokens.OMG.L1,
OMGJson,
this.L1Provider
- )
+ ) */
//console.log('L1_OMG_Contract:', this.L1_OMG_Contract)
// Liquidity pools
- console.log('Setting up contract for L1LP at:',allAddresses.L1LPAddress)
+
this.L1LPContract = new ethers.Contract(
- allAddresses.L1LPAddress,
+ addresses.L1LPAddress,
L1LPJson.abi,
this.L1Provider
)
-
- console.log('Setting up contract for L2LP at:',allAddresses.L2LPAddress)
this.L2LPContract = new ethers.Contract(
- allAddresses.L2LPAddress,
+ addresses.L2LPAddress,
L2LPJson.abi,
this.L2Provider
)
- if(networkGateway === 'mainnet') {
- this.watcher = new CrossChainMessenger({
- l1SignerOrProvider: this.L1Provider,
- l2SignerOrProvider: this.L2Provider,
- l1ChainId: 1,
- fastRelayer: false,
- })
- this.fastWatcher = new CrossChainMessenger({
- l1SignerOrProvider: this.L1Provider,
- l2SignerOrProvider: this.L2Provider,
- l1ChainId: 1,
- fastRelayer: true,
- })
- } else if (networkGateway === 'goerli') {
- this.watcher = new CrossChainMessenger({
- l1SignerOrProvider: this.L1Provider,
- l2SignerOrProvider: this.L2Provider,
- l1ChainId: 5,
- fastRelayer: false,
- })
- this.fastWatcher = new CrossChainMessenger({
- l1SignerOrProvider: this.L1Provider,
- l2SignerOrProvider: this.L2Provider,
- l1ChainId: 5,
- fastRelayer: true,
- })
- }
- else {
- this.watcher = null
- this.fastWatcher = null
- }
+ this.watcher = new CrossChainMessenger({
+ l1SignerOrProvider: this.L1Provider,
+ l2SignerOrProvider: this.L2Provider,
+ l1ChainId: chainId,
+ fastRelayer: false,
+ })
+ this.fastWatcher = new CrossChainMessenger({
+ l1SignerOrProvider: this.L1Provider,
+ l2SignerOrProvider: this.L2Provider,
+ l1ChainId: chainId,
+ fastRelayer: true,
+ })
this.BobaContract = new ethers.Contract(
- allTokens.BOBA.L2,
+ L2_SECONDARYFEETOKEN_ADDRESS,
Boba.abi,
this.L2Provider
)
- this.xBobaContract = new ethers.Contract(
- allTokens.xBOBA.L2,
- Boba.abi,
- this.L2Provider
- )
+ if (NETWORK.ETHEREUM === network) {
+ this.xBobaContract = new ethers.Contract(
+ allTokens.xBOBA.L2,
+ Boba.abi,
+ this.L2Provider
+ )
- if (!(await this.getAddressCached(addresses, 'GovernorBravoDelegate', 'GovernorBravoDelegate'))) return
- if (!(await this.getAddressCached(addresses, 'GovernorBravoDelegator', 'GovernorBravoDelegator'))) return
+ if (!(await this.getAddressCached(addresses, 'GovernorBravoDelegate', 'GovernorBravoDelegate'))) return
+ if (!(await this.getAddressCached(addresses, 'GovernorBravoDelegator', 'GovernorBravoDelegator'))) return
- this.delegateContract = new ethers.Contract(
- allAddresses.GovernorBravoDelegate,
- GovernorBravoDelegate.abi,
- this.L2Provider
- )
+ this.delegateContract = new ethers.Contract(
+ this.addresses.GovernorBravoDelegate,
+ GovernorBravoDelegate.abi,
+ this.L2Provider
+ )
- this.delegatorContract = new ethers.Contract(
- allAddresses.GovernorBravoDelegator,
- GovernorBravoDelegator.abi,
- this.L2Provider
- )
+ this.delegatorContract = new ethers.Contract(
+ this.addresses.GovernorBravoDelegator,
+ GovernorBravoDelegator.abi,
+ this.L2Provider
+ )
- this.delegatorContractV2 = new ethers.Contract(
- allAddresses.GovernorBravoDelegatorV2,
- GovernorBravoDelegator.abi,
- this.L2Provider
- )
+ this.delegatorContractV2 = new ethers.Contract(
+ this.addresses.GovernorBravoDelegatorV2,
+ GovernorBravoDelegator.abi,
+ this.L2Provider
+ )
+ }
this.gasOracleContract = new ethers.Contract(
L2GasOracle,
@@ -855,13 +662,6 @@ class NetworkService {
this.networkGateway = networkGateway
this.networkType = networkType
- console.log('NS: networkMM:', networkMM)
- console.log('NS: networkGateway:', networkGateway)
- console.log('NS: networkType:', networkType)
- console.log('NS: this.chainID from MM:', this.chainID)
- console.log('NS: this.networkName from MM:', this.networkName)
- console.log('NS: this.account from MM:', this.account)
-
// defines the set of possible networks along with chainId for L1 and L2
// const nw = getNetwork()
const networkDetail = getNetworkDetail({
@@ -916,6 +716,7 @@ class NetworkService {
// connect to the wallet
this.provider = new ethers.providers.Web3Provider(window.ethereum)
+ console.log([ 'Switch Chain addL2Network', chainParam ]);
let res = await this.provider.send('wallet_addEthereumChain', [chainParam, this.account])
if( res === null ){
@@ -934,24 +735,17 @@ class NetworkService {
networkType: this.networkType
})
- let blockExplorerUrls = null
-
- //local does not have a blockexplorer
- if( this.networkGateway !== 'local') {
- blockExplorerUrls = [networkDetail.L2.blockExplorer.slice(0, -1)]
- }
-
//the chainParams are only needed for the L2s
const chainParam = {
- chainId: '0x' + networkDetail.L2.chainId.toString(16),
- chainName: networkDetail.L2.name,
- rpcUrls: [networkDetail.L2.rpcUrl],
+ chainId: '0x' + networkDetail[targetLayer].chainId.toString(16),
+ chainName: networkDetail[targetLayer].name,
+ rpcUrls: [networkDetail[targetLayer].rpcUrl],
nativeCurrency: {
- name: 'Ethereum',
- symbol: 'ETH',
+ name: 'BOBA TOKEN',
+ symbol: 'BOBA',
decimals: 18,
},
- blockExplorerUrls
+ blockExplorerUrls: [networkDetail[targetLayer].blockExplorer.slice(0, -1)]
}
const targetIDHex = networkDetail[targetLayer].chainIdHex
@@ -959,15 +753,17 @@ class NetworkService {
this.provider = new ethers.providers.Web3Provider(window.ethereum)
try {
- await this.provider.send('wallet_switchEthereumChain', [{ chainId: targetIDHex }])
+ await this.provider.send('wallet_switchEthereumChain', [{ chainId: targetIDHex }])
window.ethereum.on('chainChanged', handleChangeChainOnce)
+
return true
} catch (error) {
// 4902 = the chain has not been added to MetaMask.
// So, lets add it
if (error.code === 4902) {
try {
+ console.log([ 'Switch Chain 123', chainParam, targetIDHex ]);
await this.provider.send('wallet_addEthereumChain', [chainParam, this.account])
window.ethereum.on('chainChanged', handleChangeChainOnce)
return true
@@ -982,110 +778,6 @@ class NetworkService {
}
}
- async getTransactions() {
-
- // NOT SUPPORTED on LOCAL
- if (this.networkGateway === 'local') return
- if (this.account === null) return
-
- let txL1 = []
- let txL1pending = []
- let txL2 = []
- let txL0 = []
-
- const responseL1 = await etherScanInstance(
- this.networkGateway,
- 'L1'
- ).get(`&address=${this.account}`)
-
- if (responseL1.status === 200) {
- const transactionsL1 = await responseL1.data
- if (transactionsL1.status === '1') {
- //thread in ChainID
- txL1 = transactionsL1.result.map(v => ({
- ...v,
- blockNumber: parseInt(v.blockNumber), //fix bug - sometimes this is string, sometimes an integer
- timeStamp: parseInt(v.timeStamp), //fix bug - sometimes this is string, sometimes an integer
- chain: 'L1'
- }))
- }
- }
-
- const responseL2 = await omgxWatcherAxiosInstance(
- this.networkGateway
- ).post('get.l2.transactions', {
- address: this.account,
- fromRange: 0,
- toRange: 1000,
- })
-
- if (responseL2.status === 201) {
- 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,
- toRange: 1000,
- })
-
- if (responseL1pending.status === 201) {
- //add the chain: 'L1pending' field
- txL1pending = responseL1pending.data.map(v => ({ ...v, chain: 'L1pending' }))
- const annotated = [
- ...txL1,
- ...txL2,
- ...txL0,
- ...txL1pending //the new data product
- ]
- return annotated
- }
-
- }
-
- async getExits() {
- // NOT SUPPORTED on LOCAL
- if (this.networkGateway === 'local') return
-
- const response = await omgxWatcherAxiosInstance(
- this.networkGateway
- ).post('get.l2.transactions', {
- address: this.account,
- fromRange: 0,
- toRange: 1000,
- })
-
- if (response.status === 201) {
- const transactions = response.data
- const filteredTransactions = transactions.filter(
- (i) => i.exitL2 && i.crossDomainMessage
- )
- return { exited: filteredTransactions }
- }
-
- }
-
async getSevens() {
console.log("getSevens()")
@@ -1094,7 +786,7 @@ class NetworkService {
if (this.networkGateway === 'local') return
const response = await omgxWatcherAxiosInstance(
- this.networkGateway
+ this.networkConfig
).get('get.l2.pendingexits')
if (response.status === 201) {
@@ -1117,7 +809,7 @@ class NetworkService {
if (this.networkGateway === 'local') return
const response = await omgxWatcherAxiosInstance(
- this.networkGateway
+ this.networkConfig
).get('get.l2.pendingexits')
if (response.status === 201) {
@@ -1137,7 +829,7 @@ class NetworkService {
let monsterList = await GraphQLService.queryMonsterTransfer(this.account)
const contract = new ethers.Contract(
- allAddresses.BobaMonsters,
+ this.addresses.BobaMonsters,
TuringMonsterJson.abi,
this.L2Provider
)
@@ -1150,7 +842,7 @@ class NetworkService {
const owner = await contract.ownerOf(tokenId)
//console.log("owner:", owner)
if (owner.toLowerCase() === this.account.toLowerCase()) {
- await this.addNFT(allAddresses.BobaMonsters, tokenId)
+ await this.addNFT(this.addresses.BobaMonsters, tokenId)
}
}
await this.checkMonster()
@@ -1162,9 +854,9 @@ class NetworkService {
}
async claimAuthenticatedTestnetTokens(tweetId) {
- // Only Goerli
+ // Only Testnet
const contract = new ethers.Contract(
- addresses_Goerli.AuthenticatedFaucet,
+ this.addresses.AuthenticatedFaucet,
AuthenticatedFaucetJson.abi,
this.L2Provider,
).connect()
@@ -1185,7 +877,7 @@ class NetworkService {
try {
const contract = new ethers.Contract(
- allAddresses.BobaMonsters,
+ this.addresses.BobaMonsters,
TuringMonsterJson.abi,
this.L2Provider
)
@@ -1196,12 +888,12 @@ class NetworkService {
let topTop = 0
if(NFTs && Number(monsterBalance) > 0) {
- //console.log("checking monsters")
+
for (const [ , value ] of Object.entries(NFTs)) {
- //console.log(`${key} value: ${value.name}`)
+
if(value.name === 'TuringMonster') {
const owner = await contract.ownerOf(value.tokenID)
- //console.log("owner:", owner)
+
if(owner.toLowerCase() === this.account.toLowerCase()) {
const attributes = {
top: value.meta.attributes[3].value,
@@ -1328,63 +1020,62 @@ class NetworkService {
}
}
- async getGas() {
+
+ async getBalances() {
try {
- const gasPrice2 = await this.L2Provider.getGasPrice()
- //console.log("L2 gas", gasPrice2.toString())
- const block2 = await this.L2Provider.getBlockNumber()
+ let layer1Balances, layer2Balances;
+
+ if (this.network === NETWORK.ETHEREUM) {
+ layer1Balances = [
+ {
+ address: this.addresses.L1_ETH_Address,
+ addressL2: this.addresses.L2_ETH_Address,
+ currency: this.addresses.L1_ETH_Address,
+ symbol: 'ETH',
+ decimals: 18,
+ balance: new BN(0),
+ },
+ ]
- const gasPrice1 = await this.L1Provider.getGasPrice()
- //console.log("L1 gas", gasPrice1.toString())
+ layer2Balances = [
+ {
+ address: this.addresses.L2_ETH_Address,
+ addressL1: this.addresses.L1_ETH_Address,
+ addressL2: this.addresses.L2_ETH_Address,
+ currency: this.addresses.L1_ETH_Address,
+ symbol: 'ETH',
+ decimals: 18,
+ balance: new BN(0),
+ },
+ ]
+ } else {
+ layer1Balances = [
+ {
+ address: this.addresses.L1_ETH_Address,
+ addressL2: this.addresses["TK_L2" + networkService.L1NativeTokenSymbol],
+ currency: this.addresses.L1_ETH_Address,
+ symbol: networkService.L1NativeTokenSymbol,
+ decimals: 18,
+ balance: new BN(0),
+ },
+ ]
- const block1 = await this.L1Provider.getBlockNumber()
+ layer2Balances = [
+ {
+ address: this.addresses.L2_ETH_Address,
+ addressL1: this.addresses.TK_L1BOBA,
+ addressL2: this.addresses.L2_ETH_Address,
+ currency: this.addresses.TK_L1BOBA,
+ symbol: 'BOBA',
+ decimals: 18,
+ balance: new BN(0),
+ },
+ ]
- const gasData = {
- gasL1: Number(logAmount(gasPrice1.toString(),9)).toFixed(0),
- gasL2: Number(logAmount(gasPrice2.toString(),9)).toFixed(0),
- blockL1: Number(block1),
- blockL2: Number(block2),
}
- //console.log(gasData)
-
- return gasData
- } catch (error) {
- console.log("NS: getGas error:",error)
- return error
- }
-
- }
-
- async getBalances() {
-
- const layer1Balances = [
- {
- address: allAddresses.L1_ETH_Address,
- addressL2: allAddresses.L2_ETH_Address,
- currency: allAddresses.L1_ETH_Address,
- symbol: 'ETH',
- decimals: 18,
- balance: new BN(0),
- },
- ]
-
- const layer2Balances = [
- {
- address: allAddresses.L2_ETH_Address,
- addressL1: allAddresses.L1_ETH_Address,
- addressL2: allAddresses.L2_ETH_Address,
- currency: allAddresses.L1_ETH_Address,
- symbol: 'ETH',
- decimals: 18,
- balance: new BN(0),
- },
- ]
-
- try {
-
// Always check ETH
const layer1Balance = await this.L1Provider.getBalance(this.account)
const layer2Balance = await this.L2Provider.getBalance(this.account)
@@ -1393,15 +1084,15 @@ class NetworkService {
layer2Balances[0].balance = new BN(layer2Balance.toString())
const state = store.getState()
- const tA = Object.values(state.tokenList)
+ const tA = Object.values(state.tokenList);
const tokenC = new ethers.Contract(
- allAddresses.L1_ETH_Address,
+ this.addresses.L1_ETH_Address,
L1ERC20Json.abi,
this.L1Provider
)
- const getERC20Balance = async(token, tokenAddress, layer, provider) => {
+ const getERC20Balance = async (token, tokenAddress, layer, provider) => {
const balance = await tokenC.attach(tokenAddress).connect(provider).balanceOf(this.account)
return {
...token,
@@ -1415,41 +1106,32 @@ class NetworkService {
const getBalancePromise = []
tA.forEach((token) => {
- if (token.addressL1 === allAddresses.L1_ETH_Address) return
- if (token.addressL2 === allAddresses.L2_ETH_Address) return
if (token.addressL1 === null) return
if (token.addressL2 === null) return
+ if (this.network === NETWORK.ETHEREUM) {
+ if(token.addressL1 === this.addresses.L1_ETH_Address) return
+ if(token.addressL2 === this.addresses.L2_ETH_Address) return
+ } else {
+ if (token.addressL1 === this.addresses.L1_ETH_Address) {
+ return getBalancePromise.push(getERC20Balance(token, token.addressL2, "L2", this.L2Provider))
- if (token.symbolL1 === 'xBOBA') {
- //there is no L1 xBOBA
- getBalancePromise.push(getERC20Balance(token, token.addressL2, "L2", this.L2Provider))
- }
- else if (token.symbolL1 === 'WAGMIv0') {
- //there is no L1 WAGMIv0
- getBalancePromise.push(getERC20Balance(token, token.addressL2, "L2", this.L2Provider))
- }
- else if (token.symbolL1 === 'WAGMIv1') {
- //there is no L1 WAGMIv1
- getBalancePromise.push(getERC20Balance(token, token.addressL2, "L2", this.L2Provider))
- }
- else if (token.symbolL1 === 'WAGMIv2') {
- //there is no L2 WAGMIv2
- getBalancePromise.push(getERC20Balance(token, token.addressL2, "L2", this.L2Provider))
- }
- else if (token.symbolL1 === 'WAGMIv2-Oolong') {
- //there is no L2 WAGMIv2OLO
- getBalancePromise.push(getERC20Balance(token, token.addressL2, "L2", this.L2Provider))
- }
- else if (token.symbolL1 === 'WAGMIv3') {
- //there is no L2 WAGMIv3
- getBalancePromise.push(getERC20Balance(token, token.addressL2, "L2", this.L2Provider))
- }
- else if (token.symbolL1 === 'WAGMIv3-Oolong') {
- //there is no L2 WAGMIv3OLO
- getBalancePromise.push(getERC20Balance(token, token.addressL2, "L2", this.L2Provider))
+ }
+ if (token.addressL2 === this.addresses.L2_BOBA_Address) {
+ return getBalancePromise.push(getERC20Balance(token, token.addressL1, "L1", this.L1Provider))
+ }
}
- else if (token.symbolL1 === 'OLO') {
- //there is no L1 OLO
+
+ if ([
+ 'xBOBA',
+ 'WAGMIv0',
+ 'WAGMIv1',
+ 'WAGMIv2',
+ 'WAGMIv2-Oolong',
+ 'WAGMIv3',
+ 'WAGMIv3-Oolong',
+ 'OLO'
+ ].includes(token.symbolL1)) {
+ //there is no L1 xBOBA, WAGMIv0, WAGMIv1, WAGMIv2, WAGMIv2OLO, WAGMIv3, WAGMIv3OLO, OLO
getBalancePromise.push(getERC20Balance(token, token.addressL2, "L2", this.L2Provider))
}
else {
@@ -1518,72 +1200,98 @@ class NetworkService {
try {
const time_start = new Date().getTime()
- console.log("TX start time:", time_start)
+ console.log('Deposit ETH L2 Txs start time:', time_start);
let depositTX;
-
- if (!recipient) {
- depositTX = await this.L1StandardBridgeContract
- .connect(this.provider.getSigner())
- .depositETH(
- this.L2GasLimit,
- utils.formatBytes32String(new Date().getTime().toString()),
- {
- value: value_Wei_String
- }
- )
+ if (this.network === NETWORK.ETHEREUM) {
+ if (!recipient) {
+ depositTX = await this.L1StandardBridgeContract
+ .connect(this.provider.getSigner())
+ .depositETH(
+ this.L2GasLimit,
+ utils.formatBytes32String(new Date().getTime().toString()),
+ {
+ value: value_Wei_String
+ }
+ )
+ } else {
+ depositTX = await this.L1StandardBridgeContract
+ .connect(this.provider.getSigner())
+ .depositETHTo(
+ recipient,
+ this.L2GasLimit,
+ utils.formatBytes32String(new Date().getTime().toString()),
+ {
+ value: value_Wei_String
+ }
+ )
+ }
} else {
- depositTX = await this.L1StandardBridgeContract
- .connect(this.provider.getSigner())
- .depositETHTo(
- recipient,
- this.L2GasLimit,
- utils.formatBytes32String(new Date().getTime().toString()),
- {
- value: value_Wei_String
- }
+ if (!recipient) {
+ depositTX = await this.L1StandardBridgeContract
+ .connect(this.provider.getSigner())
+ .depositNativeToken(
+ this.L2GasLimit,
+ utils.formatBytes32String(new Date().getTime().toString()),
+ {
+ value: value_Wei_String
+ }
+ )
+ } else {
+ depositTX = await this.L1StandardBridgeContract
+ .connect(this.provider.getSigner())
+ .depositNativeTokenTo(
+ recipient,
+ this.L2GasLimit,
+ utils.formatBytes32String(new Date().getTime().toString()),
+ {
+ value: value_Wei_String
+ }
)
+ }
}
-
//at this point the tx has been submitted, and we are waiting...
await depositTX.wait()
- const block = await this.L1Provider.getTransaction(depositTX.hash)
- console.log(' block:', block)
- //closes the Deposit modal
updateSignatureStatus_depositTRAD(true)
const opts = {
fromBlock: -4000
}
+
const receipt = await this.watcher.waitForMessageReceipt(depositTX, opts)
- console.log(' completed Deposit! L2 tx hash:', receipt.transactionHash)
+ const txReceipt = receipt.transactionReceipt;
+ console.log('completed Deposit! L2 tx hash:', receipt.transactionHash)
const time_stop = new Date().getTime()
console.log("TX finish time:", time_stop)
+ /*
+ // TODO: Investigate api-watcher failing with 502
+
+ const block = await this.L1Provider.getTransaction(depositTX.hash)
const data = {
"key": SPEED_CHECK,
"hash": depositTX.hash,
- "l1Tol2": false, //since we are going L2->L1
+ "l1Tol2": true, //since we are going L1->L2
"startTime": time_start,
"endTime": time_stop,
"block": block.blockNumber,
- "cdmHash": receipt.transactionHash,
- "cdmBlock": receipt.blockNumber
+ "cdmHash": txReceipt.transactionHash,
+ "cdmBlock": txReceipt.blockNumber
}
console.log("Speed checker data payload:", data)
const speed = await omgxWatcherAxiosInstance(
- this.networkGateway
+ this.networkConfig
).post('send.crossdomainmessage', data)
- console.log("Speed checker:", speed)
+ console.log("Speed checker:", speed) */
- return receipt
+ return txReceipt
} catch(error) {
console.log("NS: depositETHL2 error:",error)
return error
@@ -1603,7 +1311,7 @@ class NetworkService {
try {
const contract = new ethers.Contract(
- allAddresses.BobaMonsters,
+ this.addresses.BobaMonsters,
TuringMonsterJson.abi,
this.L2Provider
)
@@ -1618,7 +1326,7 @@ class NetworkService {
const rawData = receipt.logs[3].topics[1]
const numberHexString = rawData.slice(-64)
let tokenID = parseInt(numberHexString, 16)
- await this.addNFT( allAddresses.BobaMonsters, tokenID )
+ await this.addNFT( this.addresses.BobaMonsters, tokenID )
return tx
} catch (error) {
@@ -1891,7 +1599,7 @@ class NetworkService {
try {
- if(currency === allAddresses.L2_ETH_Address) {
+ if(currency === this.addresses.L2_ETH_Address) {
//we are sending ETH
let wei = BigNumber.from(value_Wei_String)
@@ -1942,7 +1650,7 @@ class NetworkService {
try {
- if(currency === allAddresses.L2_ETH_Address) {
+ if(currency === this.addresses.L2_ETH_Address) {
gas_BN = await this.provider
.getSigner()
@@ -2072,7 +1780,7 @@ class NetworkService {
let allowance_BN = await L2ERC20Contract.allowance(
this.account,
- allAddresses.L2LPAddress
+ this.addresses.L2LPAddress
)
//let depositAmount_BN = new BN(value_Wei_String)
@@ -2080,7 +1788,7 @@ class NetworkService {
if (depositAmount_BN.gt(allowance_BN)) {
const approveStatus = await L2ERC20Contract.approve(
- allAddresses.L2LPAddress,
+ this.addresses.L2LPAddress,
value_Wei_String
)
await approveStatus.wait()
@@ -2101,7 +1809,7 @@ class NetworkService {
) {
console.log("approveERC20_L1LP")
- const approveContractAddress = allAddresses.L1LPAddress
+ const approveContractAddress = this.addresses.L1LPAddress
let allowance_BN = BigNumber.from("0")
let allowed = false
@@ -2114,7 +1822,7 @@ class NetworkService {
this.provider.getSigner()
)
- if( currency !== allAddresses.L1_ETH_Address ) {
+ if( currency !== this.addresses.L1_ETH_Address ) {
let allowance_BN = await ERC20Contract.allowance(
this.account,
@@ -2177,7 +1885,7 @@ class NetworkService {
async approveERC20(
value_Wei_String,
currency,
- approveContractAddress = allAddresses.L1StandardBridgeAddress,
+ approveContractAddress = this.addresses.L1StandardBridgeAddress,
contractABI = L1ERC20Json.abi
) {
@@ -2275,7 +1983,7 @@ class NetworkService {
let allowance_BN = await L1_TEST_Contract.allowance(
this.account,
- allAddresses.L1StandardBridgeAddress
+ this.addresses.L1StandardBridgeAddress
)
try {
@@ -2291,7 +1999,7 @@ class NetworkService {
console.log("Current OMG Token allowance too small - might need to reset to 0, unless it's already zero")
if (allowance_BN.gt(BigNumber.from("0"))) {
const approveOMG = await L1_TEST_Contract.approve(
- allAddresses.L1StandardBridgeAddress,
+ this.addresses.L1StandardBridgeAddress,
ethers.utils.parseEther("0")
)
await approveOMG.wait()
@@ -2302,7 +2010,7 @@ class NetworkService {
//recheck the allowance
allowance_BN = await L1_TEST_Contract.allowance(
this.account,
- allAddresses.L1StandardBridgeAddress
+ this.addresses.L1StandardBridgeAddress
)
const allowed = allowance_BN.gte(BigNumber.from(value_Wei_String))
@@ -2311,7 +2019,7 @@ class NetworkService {
//and now, the normal allowance transaction
const approveStatus = await L1_TEST_Contract
.connect(this.provider.getSigner()).approve(
- allAddresses.L1StandardBridgeAddress,
+ this.addresses.L1StandardBridgeAddress,
value_Wei_String
)
await approveStatus.wait()
@@ -2362,33 +2070,34 @@ class NetworkService {
fromBlock: -4000
}
const receipt = await this.watcher.waitForMessageReceipt(depositTX, opts)
- console.log(' completed Deposit! L2 tx hash:', receipt.transactionHash)
+ const txReceipt = receipt.transactionReceipt;
+ console.log('completed ERC20 Deposit! L2 tx hash:', txReceipt.transactionHash)
const time_stop = new Date().getTime()
console.log("TX finish time:", time_stop)
- const data = {
- "key": SPEED_CHECK,
- "hash": depositTX.hash,
- "l1Tol2": true,
- "startTime": time_start,
- "endTime": time_stop,
- "block": block.blockNumber,
- "cdmHash": receipt.transactionHash,
- "cdmBlock": receipt.blockNumber
- }
+ // const data = {
+ // "key": SPEED_CHECK,
+ // "hash": depositTX.hash,
+ // "l1Tol2": true,
+ // "startTime": time_start,
+ // "endTime": time_stop,
+ // "block": block.blockNumber,
+ // "cdmHash": txReceipt.transactionHash,
+ // "cdmBlock": txReceipt.blockNumber
+ // }
- console.log("Speed checker data payload:", data)
+ // console.log("Speed checker data payload:", data)
- const speed = await omgxWatcherAxiosInstance(
- this.networkGateway
- ).post('send.crossdomainmessage', data)
+ // const speed = await omgxWatcherAxiosInstance(
+ // this.networkConfig
+ // ).post('send.crossdomainmessage', data)
- console.log("Speed checker:", speed)
+ // console.log("Speed checker:", speed)
this.getBalances()
- return receipt
+ return txReceipt
} catch (error) {
console.log("NS: depositErc20 error:", error)
return error
@@ -2403,7 +2112,7 @@ class NetworkService {
try {
const L2BillingContract = new ethers.Contract(
- allAddresses.Proxy__BobaBillingContract,
+ this.addresses.Proxy__BobaBillingContract,
L2BillingContractJson.abi,
this.L2Provider,
)
@@ -2414,43 +2123,39 @@ class NetworkService {
const allowance = await this.checkAllowance(
currencyAddress,
- allAddresses.DiscretionaryExitFee
+ this.addresses.DiscretionaryExitFee
)
const BobaAllowance = await this.checkAllowance(
- allAddresses.TK_L2BOBA,
- allAddresses.DiscretionaryExitFee
+ this.addresses.TK_L2BOBA,
+ this.addresses.DiscretionaryExitFee
)
- if (utils.getAddress(currencyAddress) === utils.getAddress(allAddresses.TK_L2BOBA)) {
- BobaApprovalAmount = BobaApprovalAmount.add(value)
- }
-
// Should approve BOBA
if ( BobaAllowance.lt(BobaApprovalAmount) ) {
const res = await this.approveERC20(
BobaApprovalAmount,
- allAddresses.TK_L2BOBA,
- allAddresses.DiscretionaryExitFee
+ this.addresses.TK_L2BOBA,
+ this.addresses.DiscretionaryExitFee
)
if (!res) return false
}
// Should approve other tokens
- if( currencyAddress !== allAddresses.L2_ETH_Address &&
- utils.getAddress(currencyAddress) !== utils.getAddress(allAddresses.TK_L2BOBA) &&
+ if( currencyAddress !== this.addresses.L2_ETH_Address &&
+ utils.getAddress(currencyAddress) !== utils.getAddress(this.addresses.TK_L2BOBA) &&
allowance.lt(value)
) {
const res = await this.approveERC20(
value,
currencyAddress,
- allAddresses.DiscretionaryExitFee
+ this.addresses.DiscretionaryExitFee
)
if (!res) return false
}
const DiscretionaryExitFeeContract = new ethers.Contract(
- allAddresses.DiscretionaryExitFee,
+ this.addresses.DiscretionaryExitFee,
DiscretionaryExitFeeJson.abi,
this.provider.getSigner()
)
@@ -2461,8 +2166,8 @@ class NetworkService {
value_Wei_String,
this.L1GasLimit,
utils.formatBytes32String(new Date().getTime().toString()),
- currencyAddress === allAddresses.L2_ETH_Address ?
- { value: value_Wei_String } : {}
+ currencyAddress === this.addresses.L2_ETH_Address ?
+ { value: value.add(BobaApprovalAmount) } : { value: BobaApprovalAmount }
)
//everything submitted... waiting
@@ -2493,7 +2198,7 @@ class NetworkService {
const gasPrice = await this.L2Provider.getGasPrice()
console.log("Classical exit gas price", gasPrice.toString())
- if( currencyAddress !== allAddresses.L2_ETH_Address ) {
+ if( currencyAddress !== this.addresses.L2_ETH_Address ) {
const ERC20Contract = new ethers.Contract(
currencyAddress,
@@ -2502,7 +2207,7 @@ class NetworkService {
)
const tx = await ERC20Contract.populateTransaction.approve(
- allAddresses.DiscretionaryExitFee,
+ this.addresses.DiscretionaryExitFee,
utils.parseEther('1.0')
)
@@ -2512,13 +2217,13 @@ class NetworkService {
}
const DiscretionaryExitFeeContract = new ethers.Contract(
- allAddresses.DiscretionaryExitFee,
+ this.addresses.DiscretionaryExitFee,
DiscretionaryExitFeeJson.abi,
this.provider.getSigner()
)
const tx2 = await DiscretionaryExitFeeContract.populateTransaction.payAndWithdraw(
- allAddresses.L2_ETH_Address,
+ this.addresses.L2_ETH_Address,
utils.parseEther('0.00001'),
this.L1GasLimit,
ethers.utils.formatBytes32String(new Date().getTime().toString()),
@@ -2548,7 +2253,7 @@ class NetworkService {
try{
const L1LPContract = new ethers.Contract(
- allAddresses.L1LPAddress,
+ this.addresses.L1LPAddress,
L1LPJson.abi,
this.L1Provider
)
@@ -2577,7 +2282,7 @@ class NetworkService {
try{
const L2LPContract = new ethers.Contract(
- allAddresses.L2LPAddress,
+ this.addresses.L2LPAddress,
L2LPJson.abi,
this.L2Provider
)
@@ -2603,7 +2308,7 @@ class NetworkService {
async getL1UserRewardFeeRate(tokenAddress) {
try{
const L1LPContract = new ethers.Contract(
- allAddresses.L1LPAddress,
+ this.addresses.L1LPAddress,
L1LPJson.abi,
this.L1Provider
)
@@ -2619,7 +2324,7 @@ class NetworkService {
async getL2UserRewardFeeRate(tokenAddress) {
try {
const L2LPContract = new ethers.Contract(
- allAddresses.L2LPAddress,
+ this.addresses.L2LPAddress,
L2LPJson.abi,
this.L2Provider
)
@@ -2640,7 +2345,7 @@ class NetworkService {
const poolInfo = {}
const userInfo = {}
- let tokenAddressList = Object.keys(allTokens).reduce((acc, cur) => {
+ let tokenAddressList = Object.keys(this.tokenAddresses).reduce((acc, cur) => {
if(cur !== 'xBOBA' &&
cur !== 'OLO' &&
cur !== 'WAGMIv0' &&
@@ -2649,13 +2354,13 @@ class NetworkService {
cur !== 'WAGMIv2-Oolong' &&
cur !== 'WAGMIv3' &&
cur !== 'WAGMIv3-Oolong') {
- acc.push(allTokens[cur].L1.toLowerCase())
+ acc.push(this.tokenAddresses[cur].L1.toLowerCase())
}
return acc
- }, [allAddresses.L1_ETH_Address])
+ }, [this.addresses.L1_ETH_Address])
const L1LPContract = new ethers.Contract(
- allAddresses.L1LPAddress,
+ this.addresses.L1LPAddress,
L1LPJson.abi,
this.L1Provider
)
@@ -2669,17 +2374,15 @@ class NetworkService {
let tokenName
let decimals
- if (tokenAddress === allAddresses.L1_ETH_Address) {
- //console.log("Getting eth balance:", tokenAddress)
+ if (tokenAddress === this.addresses.L1_ETH_Address) {
//getting eth balance
- tokenBalance = await this.L1Provider.getBalance(allAddresses.L1LPAddress)
- tokenSymbol = 'ETH'
- tokenName = 'Ethereum'
+ tokenBalance = await this.L1Provider.getBalance(this.addresses.L1LPAddress)
+ tokenSymbol = this.L1NativeTokenSymbol
+ tokenName = this.L1NativeTokenName
decimals = 18
} else {
//getting eth balance
- //console.log("Getting balance for:", tokenAddress)
- tokenBalance = await this.L1_TEST_Contract.attach(tokenAddress).connect(this.L1Provider).balanceOf(allAddresses.L1LPAddress)
+ tokenBalance = await this.L1_TEST_Contract.attach(tokenAddress).connect(this.L1Provider).balanceOf(this.addresses.L1LPAddress)
const tokenInfoFiltered = this.tokenInfo.L1[utils.getAddress(tokenAddress)]
if (tokenInfo) {
tokenSymbol = tokenInfoFiltered.symbol
@@ -2731,12 +2434,13 @@ class NetworkService {
rewardDebt: Object.keys(token.userTokenInfo).length? token.userTokenInfo.rewardDebt.toString(): 0
}
})
+
return { poolInfo, userInfo }
}
async getL2LPInfo() {
- const tokenAddressList = Object.keys(allTokens).reduce((acc, cur) => {
+ const tokenAddressList = Object.keys(this.tokenAddresses).reduce((acc, cur) => {
if(cur !== 'xBOBA' &&
cur !== 'OLO' &&
cur !== 'WAGMIv0' &&
@@ -2747,18 +2451,18 @@ class NetworkService {
cur !== 'WAGMIv3-Oolong'
) {
acc.push({
- L1: allTokens[cur].L1.toLowerCase(),
- L2: allTokens[cur].L2.toLowerCase()
+ L1: this.tokenAddresses[cur].L1.toLowerCase(),
+ L2: this.tokenAddresses[cur].L2.toLowerCase()
})
}
return acc
}, [{
- L1: allAddresses.L1_ETH_Address,
- L2: allAddresses.L2_ETH_Address
+ L1: this.addresses.L1_ETH_Address,
+ L2: this.addresses.L2_ETH_Address
}])
const L2LPContract = new ethers.Contract(
- allAddresses.L2LPAddress,
+ this.addresses.L2LPAddress,
L2LPJson.abi,
this.L2Provider
)
@@ -2775,13 +2479,13 @@ class NetworkService {
let tokenName
let decimals
- if (tokenAddress === allAddresses.L2_ETH_Address) {
- tokenBalance = await this.L2Provider.getBalance(allAddresses.L2LPAddress)
- tokenSymbol = 'ETH'
- tokenName = 'Ethereum'
+ if (tokenAddress === this.addresses.L2_ETH_Address) {
+ tokenBalance = await this.L2Provider.getBalance(this.addresses.L2LPAddress)
+ tokenSymbol = this.network === NETWORK.ETHEREUM ? 'ETH' : 'BOBA'
+ tokenName = this.network === NETWORK.ETHEREUM ? 'Ethereum' : 'BOBA Token'
decimals = 18
} else {
- tokenBalance = await this.L2_TEST_Contract.attach(tokenAddress).connect(this.L2Provider).balanceOf(allAddresses.L2LPAddress)
+ tokenBalance = await this.L2_TEST_Contract.attach(tokenAddress).connect(this.L2Provider).balanceOf(this.addresses.L2LPAddress)
const tokenInfoFiltered = this.tokenInfo.L2[utils.getAddress(tokenAddress)]
if (tokenInfo) {
tokenSymbol = tokenInfoFiltered.symbol
@@ -2844,7 +2548,7 @@ class NetworkService {
let otherField = {}
- if( currency === allAddresses.L1_ETH_Address || currency === allAddresses.L2_ETH_Address ) {
+ if( currency === this.addresses.L1_ETH_Address || currency === this.addresses.L2_ETH_Address ) {
// add value field for ETH
otherField['value'] = value_Wei_String
}
@@ -2882,12 +2586,12 @@ class NetworkService {
// First, we need the approval cost
// not relevant to ETH
- if( currency !== allAddresses.L2_ETH_Address ) {
+ if( currency !== this.addresses.L2_ETH_Address ) {
const tx1 = await this.BobaContract
.populateTransaction
.approve(
- allAddresses.L2LPAddress,
+ this.addresses.L2LPAddress,
utils.parseEther('1.0'),
otherField
)
@@ -2992,7 +2696,7 @@ class NetworkService {
.clientDepositL1(
value_Wei_String,
currency,
- currency === allAddresses.L1_ETH_Address ? { value: value_Wei_String } : {}
+ currency === this.addresses.L1_ETH_Address ? { value: value_Wei_String } : {}
)
console.log("depositTX",depositTX)
@@ -3005,6 +2709,8 @@ class NetworkService {
updateSignatureStatus_depositLP(true)
+ // TODO: Below part is disabled
+
const opts = {
fromBlock: -4000
}
@@ -3028,7 +2734,7 @@ class NetworkService {
console.log("Speed checker data payload:", data)
const speed = await omgxWatcherAxiosInstance(
- this.networkGateway
+ this.networkConfig
).post('send.crossdomainmessage', data)
console.log("Speed checker:", speed)
@@ -3105,7 +2811,7 @@ class NetworkService {
console.log("Speed checker data payload:", data)
const speed = await omgxWatcherAxiosInstance(
- this.networkGateway
+ this.networkConfig
).post('send.crossdomainmessage', data)
console.log("Speed checker:", speed)
@@ -3124,7 +2830,7 @@ class NetworkService {
async L1LPPending(tokenAddress) {
const L1pending = await omgxWatcherAxiosInstance(
- this.networkGateway
+ this.networkConfig
).get('get.l2.pendingexits', {})
const pendingFast = L1pending.data.filter(i => {
@@ -3161,15 +2867,15 @@ class NetworkService {
let tokenAddressLC = tokenAddress.toLowerCase()
if (
- tokenAddressLC === allAddresses.L2_ETH_Address ||
- tokenAddressLC === allAddresses.L1_ETH_Address
+ tokenAddressLC === this.addresses.L2_ETH_Address ||
+ tokenAddressLC === this.addresses.L1_ETH_Address
) {
- balance = await this.L1Provider.getBalance(allAddresses.L1LPAddress)
+ balance = await this.L1Provider.getBalance(this.addresses.L1LPAddress)
} else {
balance = await this.L1_TEST_Contract
.attach(tokenAddress)
.connect(this.L1Provider)
- .balanceOf(allAddresses.L1LPAddress)
+ .balanceOf(this.addresses.L1LPAddress)
}
return balance.toString()
@@ -3185,16 +2891,16 @@ class NetworkService {
let tokenAddressLC = tokenAddress.toLowerCase()
if (
- tokenAddressLC === allAddresses.L2_ETH_Address ||
- tokenAddressLC === allAddresses.L1_ETH_Address
+ tokenAddressLC === this.addresses.L2_BOBA_Address ||
+ tokenAddressLC === this.addresses.L1_ETH_Address
) {
//We are dealing with ETH
balance = await this.L2_ETH_Contract.connect(this.L2Provider).balanceOf(
- allAddresses.L2LPAddress
+ this.addresses.L2LPAddress
)
} else {
balance = await this.L2_TEST_Contract.attach(tokenAddress).connect(this.L2Provider).balanceOf(
- allAddresses.L2LPAddress
+ this.addresses.L2LPAddress
)
}
@@ -3207,7 +2913,7 @@ class NetworkService {
async L1LPLiquidity(tokenAddress) {
const L1LPContractNS = new ethers.Contract(
- allAddresses.L1LPAddress,
+ this.addresses.L1LPAddress,
L1LPJson.abi,
this.L1Provider
)
@@ -3228,7 +2934,7 @@ class NetworkService {
async L2LPLiquidity(tokenAddress) {
const L2LPContractNS = new ethers.Contract(
- allAddresses.L2LPAddress,
+ this.addresses.L2LPAddress,
L2LPJson.abi,
this.L2Provider
)
@@ -3251,7 +2957,7 @@ class NetworkService {
const gasPrice = await this.L2Provider.getGasPrice()
console.log("Fast exit gas price", gasPrice.toString())
- if( currencyAddress !== allAddresses.L2_ETH_Address ) {
+ if( currencyAddress !== this.addresses.L2_ETH_Address ) {
const ERC20Contract = new ethers.Contract(
currencyAddress,
@@ -3262,7 +2968,7 @@ class NetworkService {
const tx = await ERC20Contract
.populateTransaction
.approve(
- allAddresses.L2LPAddress,
+ this.addresses.L2LPAddress,
utils.parseEther('1.0')
)
@@ -3276,9 +2982,9 @@ class NetworkService {
.connect(this.provider.getSigner())
.populateTransaction
.clientDepositL2(
- currencyAddress === allAddresses.L2_ETH_Address ? '1' : '0', //ETH does not allow zero
+ currencyAddress === this.addresses.L2_ETH_Address ? '1' : '0', //ETH does not allow zero
currencyAddress,
- currencyAddress === allAddresses.L2_ETH_Address ? { value : '1'} : {}
+ currencyAddress === this.addresses.L2_ETH_Address ? { value : '1'} : {}
)
const depositGas_BN = await this.L2Provider.estimateGas({...tx2, from: this.gasEstimateAccount})
@@ -3311,7 +3017,7 @@ class NetworkService {
const gasPrice = await this.L1Provider.getGasPrice()
console.log("Fast deposit gas price", gasPrice.toString())
- if( currencyAddress !== allAddresses.L1_ETH_Address ) {
+ if( currencyAddress !== this.addresses.L1_ETH_Address ) {
const ERC20Contract = new ethers.Contract(
currencyAddress,
@@ -3320,7 +3026,7 @@ class NetworkService {
)
const tx = await ERC20Contract.populateTransaction.approve(
- allAddresses.L1LPAddress,
+ this.addresses.L1LPAddress,
utils.parseEther('1.0')
)
@@ -3332,9 +3038,9 @@ class NetworkService {
//in some cases zero not allowed
const tx2 = await this.L1LPContract
.connect(this.provider.getSigner()).populateTransaction.clientDepositL1(
- currencyAddress === allAddresses.L1_ETH_Address ? '1' : '0', //ETH does not allow zero
+ currencyAddress === this.addresses.L1_ETH_Address ? '1' : '0', //ETH does not allow zero
currencyAddress,
- currencyAddress === allAddresses.L1_ETH_Address ? { value : '1'} : {}
+ currencyAddress === this.addresses.L1_ETH_Address ? { value : '1'} : {}
)
const depositGas_BN = await this.L1Provider.estimateGas(tx2)
@@ -3366,7 +3072,7 @@ class NetworkService {
)
const tx = await ERC20Contract.populateTransaction.approve(
- allAddresses.L1LPAddress,
+ this.addresses.L1LPAddress,
utils.parseEther('0')
)
@@ -3411,20 +3117,20 @@ class NetworkService {
let gasPrice = await this.L2Provider.getGasPrice()
console.log("Fast exit gas price", gasPrice.toString())
- if( currencyAddress === allAddresses.L2_ETH_Address ) {
+ if( currencyAddress === this.addresses.L2_ETH_Address ) {
balance_BN = await this.L2Provider.getBalance(this.account)
}
const L2BillingContract = new ethers.Contract(
- allAddresses.Proxy__BobaBillingContract,
+ this.addresses.Proxy__BobaBillingContract,
L2BillingContractJson.abi,
this.L2Provider,
)
let BobaApprovalAmount = await L2BillingContract.exitFee()
const BobaAllowance = await this.checkAllowance(
- allAddresses.TK_L2BOBA,
- allAddresses.L2LPAddress,
+ this.addresses.TK_L2BOBA,
+ this.addresses.L2LPAddress,
)
try {
@@ -3432,15 +3138,15 @@ class NetworkService {
if (BobaAllowance.lt(BobaApprovalAmount)) {
const approveStatus = await this.approveERC20(
BobaApprovalAmount,
- allAddresses.TK_L2BOBA,
- allAddresses.L2LPAddress
+ this.addresses.TK_L2BOBA,
+ this.addresses.L2LPAddress
)
if (!approveStatus) return false
}
// Approve other tokens
- if( currencyAddress !== allAddresses.L2_ETH_Address &&
- utils.getAddress(currencyAddress) !== utils.getAddress(allAddresses.TK_L2BOBA)
+ if( currencyAddress !== this.addresses.L2_ETH_Address &&
+ utils.getAddress(currencyAddress) !== utils.getAddress(this.addresses.TK_L2BOBA)
) {
const L2ERC20Contract = new ethers.Contract(
currencyAddress,
@@ -3455,7 +3161,7 @@ class NetworkService {
let allowance_BN = await L2ERC20Contract.allowance(
this.account,
- allAddresses.L2LPAddress
+ this.addresses.L2LPAddress
)
console.log("Allowance:",utils.formatEther(allowance_BN))
@@ -3463,7 +3169,7 @@ class NetworkService {
//Estimate gas
const tx = await L2ERC20Contract.populateTransaction.approve(
- allAddresses.L2LPAddress,
+ this.addresses.L2LPAddress,
balance_BN
)
@@ -3472,7 +3178,7 @@ class NetworkService {
console.log("Cost to Approve (ETH):", utils.formatEther(approvalCost_BN))
const approveStatus = await L2ERC20Contract.approve(
- allAddresses.L2LPAddress,
+ this.addresses.L2LPAddress,
balance_BN
)
await approveStatus.wait()
@@ -3490,7 +3196,7 @@ class NetworkService {
.connect(this.provider.getSigner()).populateTransaction.clientDepositL2(
balance_BN,
currencyAddress,
- currencyAddress === allAddresses.L2_ETH_Address ? { value : '1' } : {}
+ currencyAddress === this.addresses.L2_ETH_Address ? { value : '1' } : {}
)
let depositGas_BN = await this.L2Provider.estimateGas(tx2)
@@ -3512,7 +3218,7 @@ class NetworkService {
let depositCost_BN = depositGas_BN.mul(gasPrice).add(l1SecurityFee)
console.log("Deposit gas cost (ETH)", utils.formatEther(depositCost_BN))
- if(currencyAddress === allAddresses.L2_ETH_Address) {
+ if(currencyAddress === this.addresses.L2_ETH_Address) {
//if fee token, need to consider cost to exit
balance_BN = balance_BN.sub(depositCost_BN)
}
@@ -3531,7 +3237,7 @@ class NetworkService {
.connect(this.provider.getSigner()).clientDepositL2(
balance_BN,
currencyAddress,
- currencyAddress === allAddresses.L2_ETH_Address ? { value : balance_BN.sub(depositCost_BN) } : {}
+ currencyAddress === this.addresses.L2_ETH_Address ? { value : balance_BN.sub(depositCost_BN) } : {}
)
//at this point the tx has been submitted, and we are waiting...
@@ -3547,7 +3253,9 @@ class NetworkService {
fromBlock: -4000
}
const receipt = await this.fastWatcher.waitForMessageReceipt(depositTX, opts)
- console.log(' completed Deposit! L1 tx hash:', receipt.transactionHash)
+ const txReceipt = receipt.transactionReceipt;
+
+ console.log(' completed Deposit! L1 tx hash:', txReceipt.transactionHash)
const time_stop = new Date().getTime()
console.log("TX finish time:", time_stop)
@@ -3559,14 +3267,14 @@ class NetworkService {
"startTime": time_start,
"endTime": time_stop,
"block": block.blockNumber,
- "cdmHash": receipt.transactionHash,
- "cdmBlock": receipt.blockNumber
+ "cdmHash": txReceipt.transactionHash,
+ "cdmBlock": txReceipt.blockNumber
}
console.log("Speed checker data payload:", data)
const speed = await omgxWatcherAxiosInstance(
- this.networkGateway
+ this.networkConfig
).post('send.crossdomainmessage', data)
console.log("Speed checker:", speed)
@@ -3588,34 +3296,34 @@ class NetworkService {
console.log("depositL2LP currencyAddress",currencyAddress)
const L2BillingContract = new ethers.Contract(
- allAddresses.Proxy__BobaBillingContract,
+ this.addresses.Proxy__BobaBillingContract,
L2BillingContractJson.abi,
this.L2Provider,
)
let BobaApprovalAmount = await L2BillingContract.exitFee()
const BobaAllowance = await this.checkAllowance(
- allAddresses.TK_L2BOBA,
- allAddresses.L2LPAddress,
+ this.addresses.TK_L2BOBA,
+ this.addresses.L2LPAddress,
)
try {
// Approve BOBA first
- if (utils.getAddress(currencyAddress) === utils.getAddress(allAddresses.TK_L2BOBA)) {
+ if (utils.getAddress(currencyAddress) === utils.getAddress(this.addresses.TK_L2BOBA)) {
BobaApprovalAmount = BobaApprovalAmount.add(BigNumber.from(value_Wei_String))
}
if (BobaAllowance.lt(BobaApprovalAmount)) {
const approveStatus = await this.approveERC20(
BobaApprovalAmount,
- allAddresses.TK_L2BOBA,
- allAddresses.L2LPAddress
+ this.addresses.TK_L2BOBA,
+ this.addresses.L2LPAddress
)
if (!approveStatus) return false
}
// Approve other tokens
- if( currencyAddress !== allAddresses.L2_ETH_Address &&
- utils.getAddress(currencyAddress) !== utils.getAddress(allAddresses.TK_L2BOBA)
+ if( currencyAddress !== this.addresses.L2_ETH_Address &&
+ utils.getAddress(currencyAddress) !== utils.getAddress(this.addresses.TK_L2BOBA)
) {
const L2ERC20Contract = new ethers.Contract(
@@ -3626,14 +3334,14 @@ class NetworkService {
let allowance_BN = await L2ERC20Contract.allowance(
this.account,
- allAddresses.L2LPAddress
+ this.addresses.L2LPAddress
)
let depositAmount_BN = BigNumber.from(value_Wei_String)
if (depositAmount_BN.gt(allowance_BN)) {
const approveStatus = await L2ERC20Contract.approve(
- allAddresses.L2LPAddress,
+ this.addresses.L2LPAddress,
value_Wei_String
)
await approveStatus.wait()
@@ -3648,7 +3356,7 @@ class NetworkService {
.connect(this.provider.getSigner()).clientDepositL2(
value_Wei_String,
currencyAddress,
- currencyAddress === allAddresses.L2_ETH_Address ? { value: value_Wei_String } : {}
+ currencyAddress === this.addresses.L2_ETH_Address ? { value: value_Wei_String } : {}
)
//at this point the tx has been submitted, and we are waiting...
@@ -3664,7 +3372,8 @@ class NetworkService {
fromBlock: -4000
}
const receipt = await this.fastWatcher.waitForMessageReceipt(depositTX, opts)
- console.log(' completed Deposit! L1 tx hash:', receipt.transactionHash)
+ const txReceipt = receipt.transactionReceipt;
+ console.log(' completed Deposit! L1 tx hash:', txReceipt.transactionHash)
const time_stop = new Date().getTime()
console.log("TX finish time:", time_stop)
@@ -3676,19 +3385,19 @@ class NetworkService {
"startTime": time_start,
"endTime": time_stop,
"block": block.blockNumber,
- "cdmHash": receipt.transactionHash,
- "cdmBlock": receipt.blockNumber
+ "cdmHash": txReceipt.transactionHash,
+ "cdmBlock": txReceipt.blockNumber
}
console.log("Speed checker data payload:", data)
const speed = await omgxWatcherAxiosInstance(
- this.networkGateway
+ this.networkConfig
).post('send.crossdomainmessage', data)
console.log("Speed checker:", speed)
- return receipt
+ return txReceipt
} catch (error) {
console.log("NS: depositL2LP error:", error)
return error
@@ -3861,7 +3570,7 @@ class NetworkService {
if( !this.delegateContract ) return
try {
- const delegateCheck = await this.delegateContract.attach(allAddresses.GovernorBravoDelegator)
+ const delegateCheck = await this.delegateContract.attach(this.addresses.GovernorBravoDelegator)
const rawThreshold = await delegateCheck.proposalThreshold()
return { proposalThreshold: formatEther(rawThreshold) }
} catch (error) {
@@ -3896,12 +3605,12 @@ class NetworkService {
/*
let tokenIds = payload.tokenIds
// create proposal only on latest contracts.
- const delegateCheck = await this.delegateContract.attach(allAddresses.GovernorBravoDelegatorV2)
+ const delegateCheck = await this.delegateContract.attach(this.addresses.GovernorBravoDelegatorV2)
*/
// FIXME: Ve DAO Till here
- const delegateCheck = await this.delegateContract.attach(allAddresses.GovernorBravoDelegator)
+ const delegateCheck = await this.delegateContract.attach(this.addresses.GovernorBravoDelegator)
if( payload.action === 'text-proposal' ) {
address = ['0x000000000000000000000000000000000000dEaD']
@@ -3915,7 +3624,7 @@ class NetworkService {
value2 = Number(payload.value[1])
value3 = Number(payload.value[2])
description = `Change L1 LP Bridge fee to ${value1}, ${value2}, and ${value3} integer percent`
- address = [allAddresses.L2LPAddress]
+ address = [this.addresses.L2LPAddress]
callData = [ethers.utils.defaultAbiCoder.encode(
['uint256','uint256','uint256'],
[value1, value2, value3]
@@ -3927,7 +3636,7 @@ class NetworkService {
value2 = Number(payload.value[1])
value3 = Number(payload.value[2])
description = `Change L2 LP Bridge fee to ${value1}, ${value2}, and ${value3} integer percent`
- address = [allAddresses.L2LPAddress]
+ address = [this.addresses.L2LPAddress]
callData = [ethers.utils.defaultAbiCoder.encode(
['uint256','uint256','uint256'],
[value1, value2, value3]
@@ -3976,8 +3685,8 @@ class NetworkService {
if (!this.delegateContract || this.networkGateway === 'goerli') return
- const delegateCheckV1 = await this.delegateContract.attach(allAddresses.GovernorBravoDelegator)
- const delegateCheckV2 = await this.delegateContract.attach(allAddresses.GovernorBravoDelegatorV2)
+ const delegateCheckV1 = await this.delegateContract.attach(this.addresses.GovernorBravoDelegator)
+ const delegateCheckV2 = await this.delegateContract.attach(this.addresses.GovernorBravoDelegatorV2)
try {
@@ -3987,13 +3696,13 @@ class NetworkService {
const descriptionList = await GraphQLService.queryBridgeProposalCreated()
const proposalGroup = groupBy(descriptionList.data.governorProposalCreateds, 'to');
- const delegatorList = [ allAddresses.GovernorBravoDelegator, allAddresses.GovernorBravoDelegatorV2 ];
+ const delegatorList = [ this.addresses.GovernorBravoDelegator, this.addresses.GovernorBravoDelegatorV2 ];
for (let delegator of delegatorList) {
let delegateCheck;
- if (delegator === allAddresses.GovernorBravoDelegator) {
+ if (delegator === this.addresses.GovernorBravoDelegator) {
delegateCheck = delegateCheckV1;
- } else if(delegator === allAddresses.GovernorBravoDelegatorV2) {
+ } else if(delegator === this.addresses.GovernorBravoDelegatorV2) {
delegateCheck = delegateCheckV2;
}
const proposals = proposalGroup[ delegator.toLowerCase() ]
@@ -4062,7 +3771,7 @@ class NetworkService {
hasLiveProposal
}
} catch (error) {
- console.log("NS: fetchProposals error:",error)
+ console.log("NS: fetchProposalsVeDao error:",error)
return error
}
}
@@ -4072,7 +3781,7 @@ class NetworkService {
if (!this.delegateContract) return
try {
- const delegateCheck = await this.delegateContract.attach(allAddresses.GovernorBravoDelegatorV2)
+ const delegateCheck = await this.delegateContract.attach(this.addresses.GovernorBravoDelegatorV2)
if (this.account) {
const receipt = await delegateCheck.getReceipt(Number(proposalId), tokenId);
@@ -4101,7 +3810,7 @@ class NetworkService {
try {
const delegateCheck = await this.delegateContract
.connect(this.provider.getSigner())
- .attach(allAddresses.GovernorBravoDelegatorV2)
+ .attach(this.addresses.GovernorBravoDelegatorV2)
const res = await delegateCheck.castVote(id, userVote, tokenIds)
@@ -4125,7 +3834,7 @@ class NetworkService {
try {
const delegateCheck = await this.delegateContract
.connect(this.provider.getSigner())
- .attach(allAddresses.GovernorBravoDelegator)
+ .attach(this.addresses.GovernorBravoDelegator)
let res = delegateCheck.queue(Number(proposalID))
return res
} catch(error) {
@@ -4147,7 +3856,7 @@ class NetworkService {
try {
const delegateCheck = await this.delegateContract
.connect(this.provider.getSigner())
- .attach(allAddresses.GovernorBravoDelegator)
+ .attach(this.addresses.GovernorBravoDelegator)
let res = delegateCheck.execute(Number(proposalID))
return res
} catch(error) {
@@ -4170,23 +3879,19 @@ class NetworkService {
try {
const FixedSavings = new ethers.Contract(
- allAddresses.BobaFixedSavings,
+ this.addresses.BobaFixedSavings,
L2SaveJson.abi,
this.provider.getSigner()
)
- console.log("FixedSavings.address:",FixedSavings.address)
-
let allowance_BN = await this.BobaContract
.connect(this.provider.getSigner())
.allowance(
this.account,
- allAddresses.BobaFixedSavings
+ this.addresses.BobaFixedSavings
)
- console.log("Allowance:", allowance_BN.toString())
let depositAmount_BN = BigNumber.from(value_Wei_String)
- console.log("Deposit:", depositAmount_BN)
let approveAmount_BN = depositAmount_BN.add(BigNumber.from('1000000000000'))
@@ -4196,11 +3901,10 @@ class NetworkService {
const approveStatus = await this.BobaContract
.connect(this.provider.getSigner())
.approve(
- allAddresses.BobaFixedSavings,
+ this.addresses.BobaFixedSavings,
approveAmount_BN
)
const TX = await approveStatus.wait()
- console.log("approveStatus:", TX)
}
else {
console.log("Allowance is sufficient:", allowance_BN.toString(), depositAmount_BN.toString())
@@ -4241,7 +3945,7 @@ class NetworkService {
.connect(this.provider)
.allowance(
this.gasEstimateAccount,
- allAddresses.BobaFixedSavings
+ this.addresses.BobaFixedSavings
)
console.log("benchmarkAllowance_BN",allowance_BN.toString())
@@ -4250,7 +3954,7 @@ class NetworkService {
.connect(this.provider.getSigner())
.populateTransaction
.approve(
- allAddresses.BobaFixedSavings,
+ this.addresses.BobaFixedSavings,
allowance_BN.toString(),
)
@@ -4260,7 +3964,7 @@ class NetworkService {
// third, we need the stake cost
const FixedSavings = new ethers.Contract(
- allAddresses.BobaFixedSavings,
+ this.addresses.BobaFixedSavings,
L2SaveJson.abi,
this.provider
)
@@ -4295,7 +3999,7 @@ class NetworkService {
try {
const FixedSavings = new ethers.Contract(
- allAddresses.BobaFixedSavings,
+ this.addresses.BobaFixedSavings,
L2SaveJson.abi,
this.provider.getSigner()
)
@@ -4317,7 +4021,7 @@ class NetworkService {
try {
const FixedSavings = new ethers.Contract(
- allAddresses.BobaFixedSavings,
+ this.addresses.BobaFixedSavings,
L2SaveJson.abi,
this.L2Provider
)
@@ -4336,57 +4040,57 @@ class NetworkService {
let allowance_BN = null
let approveStatus = null
- if(allAddresses.hasOwnProperty('BobaFixedSavings')) {
+ if(this.addresses.hasOwnProperty('BobaFixedSavings')) {
allowance_BN = await this.BobaContract
.connect(this.provider.getSigner())
.allowance(
this.account,
- allAddresses.BobaFixedSavings
+ this.addresses.BobaFixedSavings
)
console.log("Fixed Savings Allowance", allowance_BN.toString())
approveStatus = await this.BobaContract
.connect(this.provider.getSigner())
.approve(
- allAddresses.BobaFixedSavings,
+ this.addresses.BobaFixedSavings,
approvalAmount
)
await approveStatus.wait()
console.log("Fixed Savings Approval", approveStatus)
}
- if(allAddresses.hasOwnProperty('DiscretionaryExitFee')) {
+ if(this.addresses.hasOwnProperty('DiscretionaryExitFee')) {
allowance_BN = await this.BobaContract
.connect(this.provider.getSigner())
.allowance(
this.account,
- allAddresses.DiscretionaryExitFee
+ this.addresses.DiscretionaryExitFee
)
console.log("DiscretionaryExitFee Allowance", allowance_BN.toString())
approveStatus = await this.BobaContract
.connect(this.provider.getSigner())
.approve(
- allAddresses.DiscretionaryExitFee,
+ this.addresses.DiscretionaryExitFee,
approvalAmount
)
await approveStatus.wait()
console.log("DiscretionaryExitFee Approval", approveStatus)
}
- if(allAddresses.hasOwnProperty('L2LPAddress')) {
+ if(this.addresses.hasOwnProperty('L2LPAddress')) {
allowance_BN = await this.BobaContract
.connect(this.provider.getSigner())
.allowance(
this.account,
- allAddresses.L2LPAddress
+ this.addresses.L2LPAddress
)
console.log("L2LP", allowance_BN.toString())
approveStatus = await this.BobaContract
.connect(this.provider.getSigner())
.approve(
- allAddresses.L2LPAddress,
+ this.addresses.L2LPAddress,
approvalAmount
)
await approveStatus.wait()
@@ -4405,7 +4109,7 @@ class NetworkService {
try {
const FixedSavings = new ethers.Contract(
- allAddresses.BobaFixedSavings,
+ this.addresses.BobaFixedSavings,
L2SaveJson.abi,
this.L2Provider
)
@@ -4518,7 +4222,7 @@ class NetworkService {
/***********************************************/
async getExitFeeFromBillingContract() {
const L2BillingContract = new ethers.Contract(
- allAddresses.Proxy__BobaBillingContract,
+ this.addresses.Proxy__BobaBillingContract,
L2BillingContractJson.abi,
this.L2Provider,
)
@@ -4554,7 +4258,7 @@ class NetworkService {
try {
const ve = new ethers.Contract(
- allAddresses.Ve_BOBA,
+ this.addresses.Ve_BOBA,
veJson.abi,
this.provider.getSigner()
)
@@ -4563,7 +4267,7 @@ class NetworkService {
.connect(this.provider.getSigner())
.allowance(
this.account,
- allAddresses.Ve_BOBA
+ this.addresses.Ve_BOBA
)
let depositAmount_BN = BigNumber.from(value_Wei_String)
@@ -4575,7 +4279,7 @@ class NetworkService {
const approveStatus = await this.BobaContract
.connect(this.provider.getSigner())
.approve(
- allAddresses.Ve_BOBA,
+ this.addresses.Ve_BOBA,
approveAmount_BN
)
const TX = await approveStatus.wait()
@@ -4611,7 +4315,7 @@ class NetworkService {
try {
const ve = new ethers.Contract(
- allAddresses.Ve_BOBA, //check ve address is present
+ this.addresses.Ve_BOBA, //check ve address is present
veJson.abi,
this.provider.getSigner()
)
@@ -4638,7 +4342,7 @@ class NetworkService {
}
try {
const ve = new ethers.Contract(
- allAddresses.Ve_BOBA, //check ve address is present
+ this.addresses.Ve_BOBA, //check ve address is present
veJson.abi,
this.provider.getSigner()
)
@@ -4647,7 +4351,7 @@ class NetworkService {
.connect(this.provider.getSigner())
.allowance(
this.account,
- allAddresses.Ve_BOBA
+ this.addresses.Ve_BOBA
)
let depositAmount_BN = BigNumber.from(value_Wei_String)
@@ -4659,7 +4363,7 @@ class NetworkService {
const approveStatus = await this.BobaContract
.connect(this.provider.getSigner())
.approve(
- allAddresses.Ve_BOBA,
+ this.addresses.Ve_BOBA,
approveAmount_BN
)
await approveStatus.wait()
@@ -4696,7 +4400,7 @@ class NetworkService {
try {
const ve = new ethers.Contract(
- allAddresses.Ve_BOBA, //check ve address is present
+ this.addresses.Ve_BOBA, //check ve address is present
veJson.abi,
this.provider.getSigner()
)
@@ -4724,13 +4428,13 @@ class NetworkService {
try {
const ve = new ethers.Contract(
- allAddresses.Ve_BOBA, //check ve address is present
+ this.addresses.Ve_BOBA, //check ve address is present
veJson.abi,
this.provider
)
const baseVoter = new ethers.Contract(
- allAddresses.BASE_V1_VOTER,
+ this.addresses.BASE_V1_VOTER,
voterJson.abi,
this.provider
)
@@ -4783,16 +4487,16 @@ class NetworkService {
async getAltL1DepositFee() {
if (this.account === null) {
- console.log('NS: depositErc20ToL1() error - called but account === null')
+ console.log('NS: getAltL1DepositFee() 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_TARGET_CHAIN_ID = l0AllProtocols[type].Layer_Zero_ChainId;
- let ALT_L1_BOBA_ADDRESS = allAddresses[`Proxy__EthBridgeTo${type}`];
- let PROXY_ETH_L1_BRIDGE_ADDRESS_TO = allAddresses[`${type}_TK_BOBA`];
+ let L0_ETH_ENDPOINT = this.addresses.Layer_Zero_Endpoint;
+ let ETH_L1_BOBA_ADDRESS = this.addresses.TK_L1BOBA;
+ let L0_TARGET_CHAIN_ID = this.addresses.layerZeroTargetChainID;
+ let ALT_L1_BOBA_ADDRESS = this.addresses[`Proxy__EthBridgeTo${type}`];
+ let PROXY_ETH_L1_BRIDGE_ADDRESS_TO = this.addresses[`${type}_TK_BOBA`];
// Layer zero doesn't support moonbase
// return 0 for those bridges that haven't been implemented yet
@@ -4862,11 +4566,11 @@ class NetworkService {
return
}
try {
- let L0_ETH_ENDPOINT = allAddresses.Layer_Zero_Endpoint;
- let L0_TARGET_CHAIN_ID = l0AllProtocols[type].Layer_Zero_ChainId;
- 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`];
+ let L0_ETH_ENDPOINT = this.addresses.Layer_Zero_Endpoint;
+ let L0_TARGET_CHAIN_ID = this.addresses.layerZeroTargetChainID;
+ let ETH_L1_BOBA_ADDRESS = this.addresses.TK_L1BOBA;
+ let PROXY_ETH_L1_BRIDGE_ADDRESS_TO = this.addresses[`Proxy__EthBridgeTo${type}`];
+ let ALT_L1_BOBA_ADDRESS = this.addresses[`${type}_TK_BOBA`];
/* proxy eth bridge contract */
const Proxy__EthBridge = new ethers.Contract(
PROXY_ETH_L1_BRIDGE_ADDRESS_TO,
@@ -4923,6 +4627,8 @@ class NetworkService {
console.log(`🆙 Depositing ${value} 👉 ${type} l1 with 💵 FEE ${ethers.utils.formatEther(estimatedFee._nativeFee)}`);
+ // TODO: FIXME: Update this function to `withdraw` in case of other deployment than ETHERUEM.
+ // INPUT STEP MULTICHAIN
await Proxy__EthBridge.depositERC20(
ETH_L1_BOBA_ADDRESS,
ALT_L1_BOBA_ADDRESS,
@@ -4957,7 +4663,7 @@ class NetworkService {
try {
const baseVoter = new ethers.Contract(
- allAddresses.BASE_V1_VOTER,
+ this.addresses.BASE_V1_VOTER,
voterJson.abi,
this.provider
)
@@ -4985,7 +4691,7 @@ class NetworkService {
try {
const baseVoter = new ethers.Contract(
- allAddresses.BASE_V1_VOTER,
+ this.addresses.BASE_V1_VOTER,
voterJson.abi,
this.provider.getSigner()
)
@@ -5009,7 +4715,7 @@ class NetworkService {
const pools = []
const baseVoter = new ethers.Contract(
- allAddresses.BASE_V1_VOTER,
+ this.addresses.BASE_V1_VOTER,
voterJson.abi,
this.provider
)
@@ -5079,7 +4785,7 @@ class NetworkService {
if (!this.delegateContract) return
- const delegateCheck = await this.delegateContract.attach(allAddresses.GovernorBravoDelegator)
+ const delegateCheck = await this.delegateContract.attach(this.addresses.GovernorBravoDelegator)
try {
@@ -5163,7 +4869,7 @@ class NetworkService {
try {
const delegateCheck = await this.delegateContract
.connect(this.provider.getSigner())
- .attach(allAddresses.GovernorBravoDelegator)
+ .attach(this.addresses.GovernorBravoDelegator)
return delegateCheck.castVote(id, userVote)
} catch(error) {
console.log("NS: castProposalVote error:",error)
diff --git a/packages/boba/gateway/src/services/transaction.service.js b/packages/boba/gateway/src/services/transaction.service.js
new file mode 100644
index 0000000000..486d31019b
--- /dev/null
+++ b/packages/boba/gateway/src/services/transaction.service.js
@@ -0,0 +1,124 @@
+import etherScanInstance from "api/etherScanAxios";
+import omgxWatcherAxiosInstance from "api/omgxWatcherAxios";
+import networkService from "./networkService";
+
+
+class TransactionService {
+
+
+ // fetch L1 transactions from EtherScan
+ async fetchEtherscanTx() {
+ let L1Txs = [];
+ try {
+ const BEUrl = networkService.networkConfig[ networkService.L1orL2 ].blockExplorer;
+ const responseL1 = await etherScanInstance(BEUrl).get(`&address=${networkService.account}`)
+ if (responseL1.status === 200) {
+ const transactionsL1 = await responseL1.data
+ console.log(['transactionsL1.result',transactionsL1.result])
+ if (transactionsL1.status === '1') {
+ //thread in ChainID
+ L1Txs = transactionsL1.result.map(v => ({
+ ...v,
+ blockNumber: parseInt(v.blockNumber), //fix bug - sometimes this is string, sometimes an integer
+ timeStamp: parseInt(v.timeStamp), //fix bug - sometimes this is string, sometimes an integer
+ chain: 'L1'
+ }))
+ }
+ }
+ return L1Txs
+ } catch (error) {
+ console.log('TS: Error while fetching txs')
+ return L1Txs
+ }
+ }
+ // fetch L2 transactions from omgxWatcherAxiosInstance
+ async fetchL2Tx() {
+ let L2Txs = [];
+ try {
+ const responseL2 = await omgxWatcherAxiosInstance(networkService.networkConfig)
+ .post('get.l2.transactions', {
+ address: networkService.account,
+ fromRange: 0,
+ toRange: 1000,
+ }).catch((error) => { console.log('get l2 tx', error) })
+
+ if (responseL2.status === 201) {
+ L2Txs = responseL2.data.map(v => ({ ...v, chain: 'L2' }))
+ }
+ return L2Txs
+ } catch (error) {
+ console.log('TS: fetchL2Tx',error)
+ return L2Txs
+ }
+ }
+
+ // fetch L0 transactions from omgxWatcherAxiosInstance
+ async fetchL0Tx() {
+ let L0Txs = [];
+ try {
+ const responseL0 = await omgxWatcherAxiosInstance(networkService.networkConfig)
+ .post('get.layerzero.transactions', {
+ address: networkService.account,
+ fromRange: 0,
+ toRange: 1000,
+ })
+
+ if (responseL0.status === 201) {
+ L0Txs = 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,
+ }))
+ }
+ return L0Txs
+ } catch (error) {
+ console.log('TS: fetchL0Tx',error)
+ return L0Txs
+ }
+ }
+
+ // fetch L1 pending transactions from omgxWatcherAxiosInstance
+ async fetchL1PendingTx() {
+ let txL1pending = [];
+ try {
+ const responseL1pending = await omgxWatcherAxiosInstance(networkService.networkConfig)
+ .post('get.l1.transactions', {
+ address: networkService.account,
+ fromRange: 0,
+ toRange: 1000,
+ })
+
+ if (responseL1pending.status === 201) {
+ //add the chain: 'L1pending' field
+ txL1pending = responseL1pending.data.map(v => ({ ...v, chain: 'L1pending' }))
+ };
+ return txL1pending
+ } catch (error) {
+ console.log('TS: fetchL1PendingTx',error)
+ return txL1pending
+ }
+ }
+
+ /**
+ * @getTransactions
+ * - loads L1Txs, l2Txs, l0Txs, L1PendingTxs
+ *
+ */
+ async getTransactions() {
+ const result = await Promise.all([
+ this.fetchL2Tx(),
+ this.fetchL0Tx(),
+ this.fetchL1PendingTx()
+ ])
+ return result.reduce((acc, res) => [ ...acc, ...res ], [])
+ }
+
+};
+
+
+const transctionService = new TransactionService();
+
+export default transctionService;
diff --git a/packages/boba/gateway/src/services/verifier.service.js b/packages/boba/gateway/src/services/verifier.service.js
new file mode 100644
index 0000000000..fc9d2e7499
--- /dev/null
+++ b/packages/boba/gateway/src/services/verifier.service.js
@@ -0,0 +1,31 @@
+
+
+import verifierWatcherAxiosInstance from "api/verifierWatcherAxios";
+import networkService from "./networkService";
+
+
+class VerifierService {
+
+ /**
+ * @getVerifierStatus
+ */
+
+ async getVerifierStatus() {
+ const response = await verifierWatcherAxiosInstance(
+ networkService.networkConfig
+ ).post('/', { jsonrpc: "2.0", method: "status", id: 1 })
+
+ if (response.status === 200) {
+ const status = response.data.result
+ return status
+ } else {
+ console.log("VS: Bad verifier response")
+ return false
+ }
+ }
+
+}
+
+const verifierService = new VerifierService();
+
+export default verifierService;
diff --git a/packages/boba/gateway/src/util/amountConvert.js b/packages/boba/gateway/src/util/amountConvert.js
index 25687fe705..a0498290a0 100644
--- a/packages/boba/gateway/src/util/amountConvert.js
+++ b/packages/boba/gateway/src/util/amountConvert.js
@@ -16,17 +16,17 @@ limitations under the License. */
// we use BigNumber here for decimal support
import BigNumber from 'bignumber.js';
-export function logAmount (amount, power, truncate = 0) {
+export function logAmount(amount, power, truncate = 0) {
const x = new BigNumber(amount);
const exp = new BigNumber(10).pow(power);
const calculated = x.div(exp);
- if(truncate > 0)
- return calculated.toFixed(truncate);
+ if (truncate > 0)
+ return calculated.toFixed(truncate);
else
- return calculated.toFixed();
+ return calculated.toFixed();
}
/*Takes a value such as 3.92 and converts it into
@@ -37,7 +37,7 @@ Duplicates
ethers.utils.parseUnits( valueString , decimalsOrUnitName ) => BigNumber
*/
-export function powAmount (amount, decimals) {
+export function powAmount(amount, decimals) {
const x = new BigNumber(amount)
const exp = new BigNumber(10).pow(decimals)
@@ -57,18 +57,26 @@ export function toWei_String(amount, decimals) {
}
export function amountToUsd(amount, lookupPrice, token) {
- if (token.symbol === 'ETH' && !!lookupPrice['ethereum']) {
- return amount * lookupPrice['ethereum'].usd
+ if (token.symbol === 'ETH' && !!lookupPrice[ 'ethereum' ]) {
+ return amount * lookupPrice[ 'ethereum' ].usd
} else if (token.symbol === 'BOBA' && !!lookupPrice[ 'boba-network' ]) {
- return amount * lookupPrice['boba-network'].usd
+ return amount * lookupPrice[ 'boba-network' ].usd
} else if (token.symbol === 'OLO' && !!lookupPrice[ 'oolongswap' ]) {
- return amount * lookupPrice['oolongswap'].usd
+ return amount * lookupPrice[ 'oolongswap' ].usd
} else if (token.symbol === 'OMG' && !!lookupPrice[ 'omisego' ]) {
- return amount * lookupPrice['omisego'].usd
+ return amount * lookupPrice[ 'omisego' ].usd
} else if (token.symbol === 'USDC' && !!lookupPrice[ 'usd-coin' ]) {
- return amount * lookupPrice['usd-coin'].usd
+ return amount * lookupPrice[ 'usd-coin' ].usd
+ } else if (token.symbol === 'AVAX' && !!lookupPrice[ 'avalanche-2' ]) {
+ return amount * lookupPrice[ 'avalanche-2' ].usd
+ } else if (token.symbol === 'FTM' && !!lookupPrice[ 'fantom' ]) {
+ return amount * lookupPrice[ 'fantom' ].usd
+ } else if ([ 'BNB', 'tBNB' ].includes(token.symbol) && !!lookupPrice[ 'binancecoin' ]) {
+ return amount * lookupPrice[ 'binancecoin' ].usd
+ } else if ([ 'DEV', 'GLMR' ].includes(token.symbol) && !!lookupPrice[ 'moonbeam' ]) {
+ return amount * lookupPrice[ 'moonbeam' ].usd
} else if (!!lookupPrice[ token.symbol.toLowerCase() ]) {
- return amount * lookupPrice[token.symbol.toLowerCase()].usd
+ return amount * lookupPrice[ token.symbol.toLowerCase() ].usd
} else {
return 0
}
diff --git a/packages/boba/gateway/src/util/coinImage.js b/packages/boba/gateway/src/util/coinImage.js
index 6de701919c..c4697e7bcf 100644
--- a/packages/boba/gateway/src/util/coinImage.js
+++ b/packages/boba/gateway/src/util/coinImage.js
@@ -31,6 +31,7 @@ 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 moonbase from 'images/moonbase.png'
import glmrLog from 'images/glmr.svg'
export const getCoinImage = (symbol) => {
@@ -104,6 +105,9 @@ export const getCoinImage = (symbol) => {
case "BNB":
logo = bnbLogo;
break;
+ case "tBNB":
+ logo = bnbLogo;
+ break;
case "FTM":
logo = ftmLogo;
break;
@@ -146,6 +150,9 @@ export const getCoinImage = (symbol) => {
case "GLMR":
logo = glmrLog;
break;
+ case "DEV":
+ logo = moonbase;
+ break;
default:
logo = ethLogo;
break;
diff --git a/packages/boba/gateway/src/util/network/config/avax.js b/packages/boba/gateway/src/util/network/config/avax.js
index c9fab83342..b2ead066b3 100644
--- a/packages/boba/gateway/src/util/network/config/avax.js
+++ b/packages/boba/gateway/src/util/network/config/avax.js
@@ -3,6 +3,7 @@ import { ETHERSCAN_API_KEY } from "util/constant";
export const avaxConfig = {
Testnet: {
OMGX_WATCHER_URL: `https://api-watcher.testnet.avax.boba.network/`,
+ META_TRANSACTION: `https://api-meta-transaction.testnet.avax.boba.network/`,
MM_Label: `Boba Avalanche Testnet`,
addressManager: `0xcE78de95b85212BC348452e91e0e74c17cf37c79`,
L1: {
@@ -30,6 +31,7 @@ export const avaxConfig = {
},
Mainnet: {
OMGX_WATCHER_URL: `https://api-watcher.avax.boba.network/`,
+ META_TRANSACTION: `https://api-meta-transaction.avax.boba.network/`,
MM_Label: `Boba Avalanche Mainnet`,
addressManager: `0x00220f8ce1c4be8436574e575fE38558d85e2E6b`,
L1: {
diff --git a/packages/boba/gateway/src/util/network/config/bnb.js b/packages/boba/gateway/src/util/network/config/bnb.js
index 3c267937ca..fa76263131 100644
--- a/packages/boba/gateway/src/util/network/config/bnb.js
+++ b/packages/boba/gateway/src/util/network/config/bnb.js
@@ -3,6 +3,7 @@ import { ETHERSCAN_API_KEY } from "util/constant";
export const bnbConfig = {
Testnet: {
OMGX_WATCHER_URL: `https://api-watcher.testnet.bnb.boba.network/`,
+ META_TRANSACTION: `https://api-meta-transaction.testnet.bnb.boba.network/`,
MM_Label: `bobaBnbTestnet`,
addressManager: `0xAee1fb3f4353a9060aEC3943fE932b6Efe35CdAa`,
L1: {
@@ -13,8 +14,8 @@ export const bnbConfig = {
blockExplorer: `https://api-testnet.bscscan.com/api?module=account&action=txlist&startblock=0&endblock=99999999&sort=asc&apikey=${ETHERSCAN_API_KEY}`,
transaction: `https://testnet.bscscan.com/tx/`,
blockExplorerUrl: `https://testnet.bscscan.com/`,
- symbol: "BNB",
- tokenName: "BNB",
+ symbol: "tBNB",
+ tokenName: "tBNB",
},
L2: {
name: "Boba BNB Testnet",
@@ -30,6 +31,7 @@ export const bnbConfig = {
},
Mainnet: {
OMGX_WATCHER_URL: `https://api-watcher.bnb.boba.network/`,
+ META_TRANSACTION: `https://api-meta-transaction.bnb.boba.network/`,
MM_Label: `bobaBnb`,
addressManager: `0xeb989B25597259cfa51Bd396cE1d4B085EC4c753`,
L1: {
diff --git a/packages/boba/gateway/src/util/network/config/ethereum.js b/packages/boba/gateway/src/util/network/config/ethereum.js
index b27efc761d..4a1de7a49a 100644
--- a/packages/boba/gateway/src/util/network/config/ethereum.js
+++ b/packages/boba/gateway/src/util/network/config/ethereum.js
@@ -4,6 +4,7 @@ export const ethereumConfig = {
Testnet: {
OMGX_WATCHER_URL: `https://api-watcher.goerli.boba.network/`,
VERIFIER_WATCHER_URL: `https://api-verifier.goerli.boba.network/`,
+ META_TRANSACTION: `https://api-meta-transaction.goerli.boba.network/`,
MM_Label: `Goerli`,
addressManager: `0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148`,
L1: {
@@ -48,11 +49,13 @@ export const ethereumConfig = {
data:
'0xa44c80e3000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000006a6676813d3d4317442cf84667425c13553f4a760000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038d7ea4c68000'
},
- gasEstimateAccount: `0xdb5a187FED81c735ddB1F6E47F28f2A5F74639b2`
+ gasEstimateAccount: `0xdb5a187FED81c735ddB1F6E47F28f2A5F74639b2`,
+ twitterFaucetPromotionText: "https://twitter.com/intent/tweet?text=I%27m%20developing%20on%20Boba%20Network%20"
},
Mainnet: {
OMGX_WATCHER_URL: `https://api-watcher.mainnet.boba.network/`,
VERIFIER_WATCHER_URL: `https://api-verifier.mainnet.boba.network/`,
+ META_TRANSACTION: `https://api-meta-transaction.mainnet.boba.network/`,
MM_Label: `Mainnet`,
addressManager: `0x8376ac6C3f73a25Dd994E0b0669ca7ee0C02F089`,
L1: {
@@ -89,6 +92,7 @@ export const ethereumConfig = {
data:
'0xa44c80e30000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000042bbfa2e77757c645eeaad1655e0911a7553efbc0000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038d7ea4c68000'
},
- gasEstimateAccount: `0xdb5a187FED81c735ddB1F6E47F28f2A5F74639b2`
+ gasEstimateAccount: `0xdb5a187FED81c735ddB1F6E47F28f2A5F74639b2`,
+ twitterFaucetPromotionText: "https://twitter.com/intent/tweet?text=I%27m%20developing%20on%20Boba%20Network%20"
}
}
diff --git a/packages/boba/gateway/src/util/network/config/fantom.js b/packages/boba/gateway/src/util/network/config/fantom.js
index 4cd6cab295..9aeb044d8b 100644
--- a/packages/boba/gateway/src/util/network/config/fantom.js
+++ b/packages/boba/gateway/src/util/network/config/fantom.js
@@ -3,6 +3,7 @@ import { ETHERSCAN_API_KEY } from "util/constant";
export const fantomConfig = {
Testnet: {
OMGX_WATCHER_URL: `https://api-watcher.testnet.bobaopera.boba.network/`,
+ META_TRANSACTION: `https://api-meta-transaction.testnet.bobaopera.boba.network/`,
MM_Label: `bobaOperaTestnet`,
addressManager: `0x12ad9f501149D3FDd703cC10c567F416B7F0af8b`,
L1: {
@@ -30,6 +31,7 @@ export const fantomConfig = {
},
Mainnet: {
OMGX_WATCHER_URL: `https://api-watcher.bobaopera.boba.network/`,
+ META_TRANSACTION: `https://api-meta-transaction.bobaopera.boba.network/`,
MM_Label: `Bobaopera`,
addressManager: `0x4e7325bcf09e091Bb8119258B885D4ef687B7386`,
L1: {
diff --git a/packages/boba/gateway/src/util/network/config/moonbeam.js b/packages/boba/gateway/src/util/network/config/moonbeam.js
index 90fe0a8689..3dde6295d2 100644
--- a/packages/boba/gateway/src/util/network/config/moonbeam.js
+++ b/packages/boba/gateway/src/util/network/config/moonbeam.js
@@ -3,6 +3,7 @@ import { ETHERSCAN_API_KEY } from "util/constant";
export const moonbeamConfig = {
Testnet: {
OMGX_WATCHER_URL: `https://api-watcher.bobabase.boba.network/`,
+ META_TRANSACTION: `https://api-meta-transaction.bobabase.boba.network/`,
MM_Label: `BobaBase`,
addressManager: `0xF8d0bF3a1411AC973A606f90B2d1ee0840e5979B`,
L1: {
@@ -13,8 +14,8 @@ export const moonbeamConfig = {
blockExplorer: `https://api-moonbase.moonscan.io/api?module=account&action=txlist&startblock=0&endblock=99999999&sort=asc&apikey=${ETHERSCAN_API_KEY}`,
transaction: `https://moonbase.moonscan.io/tx/`,
blockExplorerUrl: `https://moonbase.moonscan.io`,
- symbol: 'GLMR',
- tokenName: 'GLMR',
+ symbol: 'DEV',
+ tokenName: 'DEV',
},
L2: {
name: "BobaBase",
@@ -30,6 +31,7 @@ export const moonbeamConfig = {
},
Mainnet: {
OMGX_WATCHER_URL: `https://api-watcher.bobabeam.boba.network/`,
+ META_TRANSACTION: `https://api-meta-transaction.bobabeam.boba.network/`,
MM_Label: `bobaBeam`,
addressManager: `0x564c10A60af35a07f0EA8Be3106a4D81014b21a0`,
L1: {
diff --git a/packages/boba/gateway/src/util/network/network.util.js b/packages/boba/gateway/src/util/network/network.util.js
index 0264b82360..dbf9f7366c 100644
--- a/packages/boba/gateway/src/util/network/network.util.js
+++ b/packages/boba/gateway/src/util/network/network.util.js
@@ -173,8 +173,8 @@ export const NetworkList = {
label: 'BNB <> Boba',
key: 'bnb',
name: {
- l1: 'BNB',
- l2: 'Boba'
+ l1: 'Binance Smart Chain Mainnet',
+ l2: 'Boba BNB Mainnet'
}
},
{
@@ -183,8 +183,8 @@ export const NetworkList = {
label: 'Avalanche <> Boba',
key: 'avax',
name: {
- l1: 'Avalanche',
- l2: 'Boba'
+ l1: 'Avalanche Mainnet C-Chain',
+ l2: 'Boba Avalance Mainnet'
}
},
{
@@ -193,8 +193,8 @@ export const NetworkList = {
label: 'Fantom <> Boba',
key: 'fantom',
name: {
- l1: 'Fantom',
- l2: 'Boba'
+ l1: 'Fantom Mainnet',
+ l2: 'Bobaopera Mainnet'
}
},
{
@@ -204,7 +204,7 @@ export const NetworkList = {
key: 'moonbeam',
name: {
l1: 'Moonbeam',
- l2: 'Boba'
+ l2: 'Bobabeam'
}
}
],
@@ -225,8 +225,8 @@ export const NetworkList = {
label: 'BNB (Testnet) <> Boba',
key: 'bnb',
name: {
- l1: 'BNB (Testnet)',
- l2: 'Boba',
+ l1: 'BNB Testnet',
+ l2: 'Boba BNB Testnet',
}
},
{
@@ -235,8 +235,8 @@ export const NetworkList = {
label: 'Fuji (Testnet) <> Boba',
key: 'avax',
name: {
- l1: 'Fuji (Testnet)',
- l2: 'Boba',
+ l1: 'Fuji Testnet',
+ l2: 'Boba Fuji Testnet',
}
},
{
@@ -245,8 +245,8 @@ export const NetworkList = {
label: 'Opera (Testnet) <> Boba',
key: 'fantom',
name: {
- l1: 'Opera (Testnet)',
- l2: 'Boba',
+ l1: 'Fantom Testnet',
+ l2: 'Bobaopera Testnet',
}
},
{
@@ -256,7 +256,7 @@ export const NetworkList = {
key: 'moonbeam',
name: {
l1: 'Moonbase',
- l2: 'Boba',
+ l2: 'Bobabase',
}
},
]
@@ -277,7 +277,6 @@ export const getNetworkDetail = ({
return networkConfig[network][networkType]
}
-
export const getBlockExplorerUrl = ({
network,
networkType,
diff --git a/packages/boba/register/addresses/addressBobaAvax_0x00220f8ce1c4be8436574e575fE38558d85e2E6b.json b/packages/boba/register/addresses/addressBobaAvax_0x00220f8ce1c4be8436574e575fE38558d85e2E6b.json
new file mode 100644
index 0000000000..fb95653746
--- /dev/null
+++ b/packages/boba/register/addresses/addressBobaAvax_0x00220f8ce1c4be8436574e575fE38558d85e2E6b.json
@@ -0,0 +1,59 @@
+{
+ "BondManager": "0x26c319B7B2cF823365414d082698C8ac90cbBA63",
+ "CanonicalTransactionChain": "0x1A19A4ce2b3B0A974Df717b6F88c881a69F315e3",
+ "ChainStorageContainer-CTC-batches": "0x82e4fCEBa2d0ce0B3f394b6Ab13e4b1B2D485b89",
+ "ChainStorageContainer-CTC-queue": "0x32fa4eC0aeadf5DEC8461b3834e5572Ad782f075",
+ "ChainStorageContainer-SCC-batches": "0xc4243ecE585B843c7cf92E65617A4211FA580dDb",
+ "L1MultiMessageRelayer": "0x87e062dE99Ed71aF9b22dDA63e1b6D43333798f8",
+ "AddressManager": "0x00220f8ce1c4be8436574e575fE38558d85e2E6b",
+ "OVM_L1CrossDomainMessenger": "0x19FF7f546b66f69e859E07B61444c3d3EF35ABC5",
+ "Proxy__L1CrossDomainMessenger": "0x0fc742332ae6D447d6619D93985Aa288B81CBb0C",
+ "Proxy__L1StandardBridge": "0xf188F1e92B2c78956D2859b84684BFD17103e22c",
+ "StateCommitmentChain": "0x1ef85D873Cf451C8B9a45DbE40b478E991F51210",
+ "TK_L1BOBA": "0x3cD790449CF7D187a143d4Bd7F4654d4f2403e02",
+ "TK_L2BOBA": "0x4200000000000000000000000000000000000006",
+ "TK_L2WBOBA9": "0x26c319B7B2cF823365414d082698C8ac90cbBA63",
+ "TK_L1AVAX": "0x0000000000000000000000000000000000000000",
+ "TK_L2AVAX": "0x4200000000000000000000000000000000000023",
+ "TK_L1USDT.e": "0xc7198437980c041c805A1EDcbA50c1Ce5db95118",
+ "TK_L2USDT.e": "0x4ED96c1dc969d7E2310D9582A68c39556C005912",
+ "TK_L1USDt": "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7",
+ "TK_L2USDt": "0xfaA13D82756f1e0e4dec9416b83121db3Fc35199",
+ "TK_L1USDC": "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E",
+ "TK_L2USDC": "0x12bb1A120dcF8Cb7152eDAC9f04d176DD7f41F7e",
+ "TK_L1USDC.e": "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664",
+ "TK_L2USDC.e": "0x126969743a6d300bab08F303f104f0f7DBAfbe20",
+ "TK_L1BUSD.e": "0x19860CCB0A68fd4213aB9D8266F7bBf05A8dDe98",
+ "TK_L2BUSD.e": "0xb8B0034CFD89925944C07Ac6CcB2834d1774cfb6",
+ "TK_L1BUSD": "0x9C9e5fD8bbc25984B178FdCE6117Defa39d2db39",
+ "TK_L2BUSD": "0x87e062dE99Ed71aF9b22dDA63e1b6D43333798f8",
+ "TK_L1DAI.e": "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70",
+ "TK_L2DAI.e": "0x69B7d24f0E03Ff21949081C95dA7288fEa5C844D",
+ "L1CrossDomainMessengerFast": "0x8A3c2536FDae22D168e3ddaE55BF152660D98026",
+ "Proxy__L1CrossDomainMessengerFast": "0x5b6714b7926e6D7e34154C9AC945B489978fA7E7",
+ "L2LiquidityPool": "0x40425E72034eCC797cE77628672c5a7081B54470",
+ "L1LiquidityPool": "0xCa542506782592028796c456380a58E3D5589422",
+ "Proxy__L1LiquidityPool": "0x1E6D9F4dDD7C52EF8964e81E5a9a137Ee2489b21",
+ "Proxy__L2LiquidityPool": "0x0B1b1ce732564974233159213D3931C5400D4B3E",
+ "L2TokenPool": "0xbFC421c109c4A9851bCE258Ae57D2056c2E7F757",
+ "L1Message": "0xC12AF64d6Ffe4EB5e3421C91A569E6DA5Ee38f8e",
+ "L2Message": "0x3B57D8d49e73DA0D589f639A2334C1464C75ed8F",
+ "AtomicSwap": "0xe6663Fa30eaF07f38C60f33C917E70225ee0b846",
+ "L2ERC721": "0x00220f8ce1c4be8436574e575fE38558d85e2E6b",
+ "L2ERC721Reg": "0x938dd85B9c695D9a3A147F65f8991fcf5019BA75",
+ "L1NFTBridge": "0x9898E7b905dD66422cef07504D8CfFd77c453c48",
+ "L2NFTBridge": "0x70380b943e5f1fBe5dC8C2Ca3EB9E955B3580938",
+ "Proxy__L1NFTBridge": "0x328eb74673Eaa1D2d90A48E8137b015F1B6Ed35d",
+ "Proxy__L2NFTBridge": "0x1A0245f23056132fEcC7098bB011C5C303aE0625",
+ "L1MultiMessageRelayerFast": "0xf9821061774b9693359F582b007A5F1C39d75Ae3",
+ "DiscretionaryExitFee": "0x4ef8b611e05121d511d930Bf7EBaeE37f87bfC03",
+ "FeedRegistry": "0xd5984bD8568447e44d922793E3f210f8F960F065",
+ "BOBAUSD_Aggregator": "0x82e4fCEBa2d0ce0B3f394b6Ab13e4b1B2D485b89",
+ "BobaBillingContract": "0x8A4cf5504405A96be09c4fAc2F5f96c6BAe6951c",
+ "Proxy__BobaBillingContract": "0xc4243ecE585B843c7cf92E65617A4211FA580dDb",
+ "Boba_GasPriceOracle":"0x4200000000000000000000000000000000000025",
+ "Proxy__Boba_GasPriceOracle":"0x4200000000000000000000000000000000000024",
+ "BobaTuringCredit": "0x4200000000000000000000000000000000000021",
+ "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020",
+ "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826"
+}
diff --git a/packages/boba/register/addresses/addressBobaBeam_0x564c10A60af35a07f0EA8Be3106a4D81014b21a0.json b/packages/boba/register/addresses/addressBobaBeam_0x564c10A60af35a07f0EA8Be3106a4D81014b21a0.json
new file mode 100644
index 0000000000..dc7cf88f92
--- /dev/null
+++ b/packages/boba/register/addresses/addressBobaBeam_0x564c10A60af35a07f0EA8Be3106a4D81014b21a0.json
@@ -0,0 +1,47 @@
+{
+ "BondManager": "0xcfe333e0e48EC71f1399a76001cf39E0c6A51dA5",
+ "CanonicalTransactionChain": "0x99C970105cf6EE2e22b563CB86bCA42D05ac7A95",
+ "ChainStorageContainer-CTC-batches": "0x808fD25dd00D5F8915Ad69326bFD75A6E014f9b3",
+ "ChainStorageContainer-CTC-queue": "0x1D023D0B9E8aa136241eB8e8827876f51ef49851",
+ "ChainStorageContainer-SCC-batches": "0x5Ee60822c68CF0966D8Dc53255627216b4ADC30f",
+ "L1MultiMessageRelayer": "0x3664bC9BA25D0d3911c39d8ae1734b0B5A3495C1",
+ "AddressManager": "0x564c10A60af35a07f0EA8Be3106a4D81014b21a0",
+ "OVM_L1CrossDomainMessenger": "0x9182A0AA011f97633d44383F446A5951bDD3f5bf",
+ "Proxy__L1CrossDomainMessenger": "0x4765f8b50Bbe049045bBA1270dc7A8CDF17165cF",
+ "Proxy__L1StandardBridge": "0xAf5297f68D48cd2DE37Ee5cbaC0647fbA4132985",
+ "StateCommitmentChain": "0xAD379B1518f50Fc737536D2Ec2c13E4640e228A8",
+ "OVM_Sequencer": "0x9a57cd0a2241f3e5074bec89a86db59098d73e6e",
+ "Deployer": "0xC31ca2482c936d92dd465391B45940e802A86eDc",
+ "TK_L1BOBA": "0x18D17A9fD652D7d6a59903E23792ab97F832Ed6C",
+ "TK_L2BOBA": "0x4200000000000000000000000000000000000006",
+ "TK_L2WBOBA9": "0x74686A29ac7C5703bDC4f9C2DA176DcE55d4DbAC",
+ "TK_L1GLMR": "0x0000000000000000000000000000000000000000",
+ "TK_L2GLMR": "0x4200000000000000000000000000000000000023",
+ "L1CrossDomainMessengerFast": "0xFd4892a500303f5Bfe7C78D49a6aB3dddfCccb92",
+ "Proxy__L1CrossDomainMessengerFast": "0x17d02C3e6cB69225d83d0bADEb0fC09aE735CA3b",
+ "L2LiquidityPool": "0x079D6565eEE0129fAe337B52C217951f70c58CFa",
+ "L1LiquidityPool": "0x1c98d96cfcDc4599D5FbB61Aa30301d94fcA8002",
+ "Proxy__L1LiquidityPool": "0x3fBc139f80a474c9B19A734e9ABb285b6550dF58",
+ "Proxy__L2LiquidityPool": "0xD7d057F1b1caBB637BFc81F9bf1Fb74f54941E65",
+ "L2TokenPool": "0x5Ee60822c68CF0966D8Dc53255627216b4ADC30f",
+ "L1Message": "0x3bdF3E4543eac155dF6d7F0e5cf55a90E468a33b",
+ "L2Message": "0x99C970105cf6EE2e22b563CB86bCA42D05ac7A95",
+ "AtomicSwap": "0xAD379B1518f50Fc737536D2Ec2c13E4640e228A8",
+ "L2ERC721": "0xD5Ad3B843c4dE06762972a6c1d15BD0Ac96E0231",
+ "L2ERC721Reg": "0xcfe333e0e48EC71f1399a76001cf39E0c6A51dA5",
+ "L1NFTBridge": "0x65802425d28168e8148B5D13c35e7490Ac52524e",
+ "L2NFTBridge": "0xFbcc3F48a6Ca8D169f318360E5d9fe00e553F543",
+ "Proxy__L1NFTBridge": "0x7f61EB6FFe966E8c14AFb8754Bf0825eb6f54bd7",
+ "Proxy__L2NFTBridge": "0x9182A0AA011f97633d44383F446A5951bDD3f5bf",
+ "L1MultiMessageRelayerFast": "0xE2EE964E39720f78Cd75BC146Ed078D301981759",
+ "DiscretionaryExitFee": "0xC828226424E9D9686bddC0fBA91c4e234b3e6F55",
+ "FeedRegistry": "0xF60bc956315f4E1EA63B925bA4d857CDd95f3532",
+ "BOBAUSD_Aggregator": "0xAf5297f68D48cd2DE37Ee5cbaC0647fbA4132985",
+ "BobaBillingContract": "0xf237D39597B41c9E426e1F23a6aC148DC2a9176e",
+ "Proxy__BobaBillingContract": "0xb210a4BB024196dC8c5f6f407220cA83e65e45FE",
+ "Boba_GasPriceOracle":"0x4200000000000000000000000000000000000025",
+ "Proxy__Boba_GasPriceOracle":"0x4200000000000000000000000000000000000024",
+ "BobaTuringCredit": "0x4200000000000000000000000000000000000021",
+ "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020",
+ "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826"
+}
diff --git a/packages/boba/register/addresses/addressBobaBnbTestnet_0xAee1fb3f4353a9060aEC3943fE932b6Efe35CdAa.json b/packages/boba/register/addresses/addressBobaBnbTestnet_0xAee1fb3f4353a9060aEC3943fE932b6Efe35CdAa.json
new file mode 100644
index 0000000000..e8f4cdc384
--- /dev/null
+++ b/packages/boba/register/addresses/addressBobaBnbTestnet_0xAee1fb3f4353a9060aEC3943fE932b6Efe35CdAa.json
@@ -0,0 +1,39 @@
+{
+ "AddressManager": "0xAee1fb3f4353a9060aEC3943fE932b6Efe35CdAa",
+ "OVM_L1CrossDomainMessenger": "0x6fA80303E479Ea2d705F4f241Ef162aA2F793e71",
+ "Proxy__L1CrossDomainMessenger": "0x53aD38aE4a63Fe33a86E011F7AF4d3fDe3daD145",
+ "Proxy__L1StandardBridge": "0xBf0939120b4F5E3196b9E12cAC291e03dD058e9a",
+ "TK_L1BOBA": "0x875cD11fDf085e0E11B0EE6b814b6d0b38fA554C",
+ "TK_L2BOBA": "0x4200000000000000000000000000000000000006",
+ "TK_L1tBNB": "0x0000000000000000000000000000000000000000",
+ "TK_L2tBNB": "0x4200000000000000000000000000000000000023",
+ "L1CrossDomainMessengerFast": "0xf5a68fC4734a657652717aCC024fAb390274C0E6",
+ "Proxy__L1CrossDomainMessengerFast": "0xbbD6a271abcC44f6dE284E6051Da76b4fB57458C",
+ "L2LiquidityPool": "0x8e449c8267cbe89e0615F6ea8FBf885B5755F90D",
+ "L1LiquidityPool": "0x026fCac45B06395f626c5e6698444B0B51bC7B43",
+ "Proxy__L1LiquidityPool": "0xed142c7BdA2A3d5b08Eae78C96b37FFe60Fecf80",
+ "Proxy__L2LiquidityPool": "0xa1786aDDe89d62014CC50bE01d53c16C7A80D460",
+ "L2TokenPool": "0x14718bB320d6FC2681EF86864732211a9A0928dD",
+ "L1Message": "0xb743f3A682C846ccC4584bd8bCb434320a769216",
+ "L2Message": "0x65f291CDfB05bd1D639DF6268F98594fdacDeCa6",
+ "AtomicSwap": "0x37FB8bB9EA100CA9a0DE822c9923643ef48Cb8EE",
+ "L2ERC721": "0x81cF4cBEDF5602401178862f0225b93D2deB2E28",
+ "L2ERC721Reg": "0x6737867ddd04272a79E7207a008f213e336b00e1",
+ "L1NFTBridge": "0x347cCB98f420E0E7fbeEd4808732b21C1C86db59",
+ "L2NFTBridge": "0x3de30b620bA8A44423F70c42f9ed973541d11B12",
+ "Proxy__L1NFTBridge": "0x4c3f621d01c22658F711c70a12662ECDfCA5916A",
+ "Proxy__L2NFTBridge": "0x6fA80303E479Ea2d705F4f241Ef162aA2F793e71",
+ "L1MultiMessageRelayerFast": "0x0F01394F5fc19bA1B9F669bA79b76c9EaAe37987",
+ "DiscretionaryExitFee": "0x587fA2e1d797Ff79Bf86a24E156A559b6551b2B3",
+ "FeedRegistry": "0xBf0939120b4F5E3196b9E12cAC291e03dD058e9a",
+ "BOBAUSD_Aggregator": "0xeb92a5d7d92F5Af18DAdf6c6D7f02be55F3ff355",
+ "BobaBillingContract": "0x72a3d638C4d022abED8A941aE856da28dB2faB7f",
+ "Proxy__BobaBillingContract": "0xe43Ff19D561EA6DB84Dd2Ec3754027fAFDa79499",
+ "Boba_GasPriceOracle":"0x4200000000000000000000000000000000000025",
+ "Proxy__Boba_GasPriceOracle":"0x4200000000000000000000000000000000000024",
+ "BobaTuringCredit": "0x4200000000000000000000000000000000000021",
+ "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020",
+ "AuthenticatedFaucet": "0x4Bee9fE15Ff3645A85792607ce4Eee14ab9E9E02",
+ "WBOBA9": "0xb743f3A682C846ccC4584bd8bCb434320a769216",
+ "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826"
+}
diff --git a/packages/boba/register/addresses/addressBobaBnb_0xeb989B25597259cfa51Bd396cE1d4B085EC4c753.json b/packages/boba/register/addresses/addressBobaBnb_0xeb989B25597259cfa51Bd396cE1d4B085EC4c753.json
new file mode 100644
index 0000000000..146d6ef306
--- /dev/null
+++ b/packages/boba/register/addresses/addressBobaBnb_0xeb989B25597259cfa51Bd396cE1d4B085EC4c753.json
@@ -0,0 +1,53 @@
+{
+ "BondManager": "0xEB6652A4eb6e0d003Fbb3DD76Ae72694175191cd",
+ "CanonicalTransactionChain": "0xA0E38a8FE293E9e95c6A4a882F396F1c80e9e2e4",
+ "ChainStorageContainer-CTC-batches": "0xA774C3f4572C5BA93F75D802ea7Dc6F93228e5cc",
+ "ChainStorageContainer-CTC-queue": "0xA3f58cF4D4843F600A7e95CE1B23322C6A1A9695",
+ "ChainStorageContainer-SCC-batches": "0x181D33986CFb5229e42ac3b3a09cad39F1011D17",
+ "L1MultiMessageRelayer": "0x1E633Dcd0d3D349126983D58988051F7c62c543D",
+ "AddressManager": "0xeb989B25597259cfa51Bd396cE1d4B085EC4c753",
+ "OVM_L1CrossDomainMessenger": "0x4085c76ca31c8445A57ABc41393d7D57176A505b",
+ "Proxy__L1CrossDomainMessenger": "0x31338a7D5d123E18a9a71447136B54B6D28241ae",
+ "Proxy__L1StandardBridge": "0x1E0f7f4b2656b14C161f1caDF3076C02908F9ACC",
+ "StateCommitmentChain": "0xeF85fA550e6EC5486121313C895EDe1005e2397f",
+ "TK_L1BOBA": "0xE0DB679377A0F5Ae2BaE485DE475c9e1d8A4607D",
+ "TK_L2BOBA": "0x4200000000000000000000000000000000000006",
+ "TK_L2WBOBA9": "0xC58aaD327D6D58D979882601ba8DDa0685B505eA",
+ "TK_L1BNB": "0x0000000000000000000000000000000000000000",
+ "TK_L2BNB": "0x4200000000000000000000000000000000000023",
+ "TK_L1USDC": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d",
+ "TK_L2USDC": "0x9F98f9F312D23d078061962837042b8918e6aff2",
+ "TK_L1BUSD": "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56",
+ "TK_L2BUSD": "0x4a2c2838c3907D024916c3f4Fe07832745Ae4bec",
+ "TK_L1USDT": "0x55d398326f99059fF775485246999027B3197955",
+ "TK_L2USDT": "0x1E633Dcd0d3D349126983D58988051F7c62c543D",
+ "TK_L1SUSHI": "0x986cdF0fd180b40c4D6aEAA01Ab740B996D8b782",
+ "TK_L2SUSHI": "0xa84D7c48602C898EC84C4cCA78651107B3625943",
+ "L1CrossDomainMessengerFast": "0x0163D3C18781521cf8e72790d15CCF118A540e24",
+ "Proxy__L1CrossDomainMessengerFast": "0xBe349cABeA97bB933f8C2594634Deb858167f83c",
+ "L2LiquidityPool": "0xE0DB679377A0F5Ae2BaE485DE475c9e1d8A4607D",
+ "L1LiquidityPool": "0x43A24672fd6616DA4AA935A17B5aF282375d0F55",
+ "Proxy__L1LiquidityPool": "0x88b5d70be4fc644c55b164AD09A3DFD44E31eC59",
+ "Proxy__L2LiquidityPool": "0x5E36d0ADBDEa248c207312d493a08a6d182D0805",
+ "L2TokenPool": "0xC1778d29c09f220e4fC6d6e8cEDF040e35b09a88",
+ "L1Message": "0x58EF355c3A6B5036bF6336b5a5afD5B56d48B9e4",
+ "L2Message": "0xe8D5B98f999e55635f99310E9eBF3Bc0DBb07194",
+ "AtomicSwap": "0x1148585B2F2a2A3Ce554Dd9a9a25a5D4b5dFB108",
+ "L2ERC721": "0xA9B4d027CC4985AE76AB09c3de9BCD9Ec529d3cA",
+ "L2ERC721Reg": "0x05feB25a1aD2bA11949A0788B56c0eD9fFc09944",
+ "L1NFTBridge": "0xdf10be20f5a457Ad8eAa0c38E3006F275dFC5cE4",
+ "L2NFTBridge": "0x17bc3bA65463CAf7578df747E2610e90fe9BCe3C",
+ "Proxy__L1NFTBridge": "0x76bD545C03391d4e6E3d5cC2B5617c94C6038c86",
+ "Proxy__L2NFTBridge": "0xA774C3f4572C5BA93F75D802ea7Dc6F93228e5cc",
+ "L1MultiMessageRelayerFast": "0x2dB5717B37Af9A1D9a28829Ea977B4aE4aEE2AED",
+ "DiscretionaryExitFee": "0xEB6652A4eb6e0d003Fbb3DD76Ae72694175191cd",
+ "FeedRegistry": "0xC21e15185659D2fB166562bf57f241d50259AB24",
+ "BOBAUSD_Aggregator": "0x7D5A06bF6b7c793352A380720620d03813680ec1",
+ "BobaBillingContract": "0x4085c76ca31c8445A57ABc41393d7D57176A505b",
+ "Proxy__BobaBillingContract": "0xf626b0d7C028E6b89c15ca417f21080E376de65b",
+ "Boba_GasPriceOracle":"0x4200000000000000000000000000000000000025",
+ "Proxy__Boba_GasPriceOracle":"0x4200000000000000000000000000000000000024",
+ "BobaTuringCredit": "0x4200000000000000000000000000000000000021",
+ "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020",
+ "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826"
+}
diff --git a/packages/boba/register/addresses/addressBobaFuji_0xcE78de95b85212BC348452e91e0e74c17cf37c79.json b/packages/boba/register/addresses/addressBobaFuji_0xcE78de95b85212BC348452e91e0e74c17cf37c79.json
new file mode 100644
index 0000000000..a43403c637
--- /dev/null
+++ b/packages/boba/register/addresses/addressBobaFuji_0xcE78de95b85212BC348452e91e0e74c17cf37c79.json
@@ -0,0 +1,38 @@
+{
+ "AddressManager": "0xcE78de95b85212BC348452e91e0e74c17cf37c79",
+ "Proxy__L1CrossDomainMessenger": "0x68c19B7FbAe4F8034cf6316b2045ba6aB6978F6b",
+ "Proxy__L1StandardBridge": "0x07B606934b5B5D6A9E1f8b78A0B26215FF58Ad56",
+ "TK_L1BOBA": "0xEaE78E78cC22690719361F65a50734A15aaE698C",
+ "TK_L2BOBA": "0x4200000000000000000000000000000000000006",
+ "TK_L1AVAX": "0x0000000000000000000000000000000000000000",
+ "TK_L2AVAX": "0x4200000000000000000000000000000000000023",
+ "L1CrossDomainMessengerFast": "0x3C6B8493047b44754EF57129d43d151040871bb7",
+ "Proxy__L1CrossDomainMessengerFast": "0xBc5249095c890F58C0b75795bd21667eFd123F5F",
+ "L2LiquidityPool": "0xC5a27088fF840Abc3057C0B5f8B98511033c4867",
+ "L1LiquidityPool": "0x7BD3DC4aB8087840aB702eb6689d57a60e2143e4",
+ "Proxy__L1LiquidityPool": "0x30caB2fCA6260FB91B172D4AFB215514069868ea",
+ "Proxy__L2LiquidityPool": "0x9198b3f5C6acCf05dF8847766A68d992355c18c4",
+ "L2TokenPool": "0x5edFE3970732EA7878b6e17c1b7Cf27EcF108bC4",
+ "L1Message": "0x99411339aB22441D6D5f49Ae63deE8c47db85D49",
+ "L2Message": "0x089489B38e15B21A786791D4409f6E9e2afd7851",
+ "AtomicSwap": "0x5565f730cab69977E89F21de35f355F2F9fEB1C5",
+ "L2ERC721": "0xBdBF3b9803DDc910a77bF4852a283Edc055457e5",
+ "L2ERC721Reg": "0xb1f74c5A3c0cE11d1EB20c03393cc0234254C315",
+ "L1NFTBridge": "0x8C3E97fdF162615e9e928b4a69b0CB8A738A1910",
+ "L2NFTBridge": "0xAe34F89F7549903EF99A1cAc77649EA310cC5AAA",
+ "Proxy__L1NFTBridge": "0xA7A1415eC63Bf410b27AcDAF42fC3c63756E2bFc",
+ "Proxy__L2NFTBridge": "0x2e59D69cA439b3ab0c1AD8b2762377Afb5C71C7B",
+ "L1MultiMessageRelayerFast": "0x5e6B412b4fA8373a17aD85B269fA5c354ea57e63",
+ "DiscretionaryExitFee": "0xED6760E89fB35731ae82d7D149d8c94fdDb376fE",
+ "FeedRegistry": "0x54CB1E4C1d5F545Ebe9C281927Ee4c0B514b9C33",
+ "BOBAUSD_Aggregator": "0xF4f9B28F450F3Ecc516D4c91CCFAe52C72c17D33",
+ "BobaBillingContract": "0xCD50AE5e592ea38bA036aE2a2D6A58f8CAd050BB",
+ "Proxy__BobaBillingContract": "0xB7E29AB7FB9b6406BAb33Cf6f868fE25B9Ad0160",
+ "Boba_GasPriceOracle":"0x4200000000000000000000000000000000000025",
+ "Proxy__Boba_GasPriceOracle":"0x4200000000000000000000000000000000000024",
+ "BobaTuringCredit": "0x4200000000000000000000000000000000000021",
+ "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020",
+ "AuthenticatedFaucet": "0x5f6D019832FA4522DB7b94A4fe0DDBb73212FAcE",
+ "WBOBA9": "0xA7cad1B188Ac7E4d05644D1cf1cBcEB4aD372a9D",
+ "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826"
+}
diff --git a/packages/boba/register/addresses/addressBobaOpera_0x4e7325bcf09e091Bb8119258B885D4ef687B7386.json b/packages/boba/register/addresses/addressBobaOpera_0x4e7325bcf09e091Bb8119258B885D4ef687B7386.json
new file mode 100644
index 0000000000..c560b45fd3
--- /dev/null
+++ b/packages/boba/register/addresses/addressBobaOpera_0x4e7325bcf09e091Bb8119258B885D4ef687B7386.json
@@ -0,0 +1,49 @@
+{
+ "BondManager": "0xCcA5a1CB9fAD5F2A5b88D95440dA7c83EC031Cb1",
+ "CanonicalTransactionChain": "0x6001C473E020D3562Ea436B61aE4d2e91e7078cE",
+ "ChainStorageContainer-CTC-batches": "0x282267F1CD5562F91036a1f9FA52961A48385139",
+ "ChainStorageContainer-CTC-queue": "0x36666Bc3d9FE6fDCfC5Aa1f6e907f36EbF8a8176",
+ "ChainStorageContainer-SCC-batches": "0x2E3375B06811B3Baed04CC86C691B918155fE176",
+ "L1MultiMessageRelayer": "0xD8DcA5fC53a83Cf06ec744a7226C23951a353A0f",
+ "AddressManager": "0x4e7325bcf09e091Bb8119258B885D4ef687B7386",
+ "OVM_L1CrossDomainMessenger": "0xDEE010E1EedBE26C8AB3AEC8a16Cb974B31068FF",
+ "Proxy__L1CrossDomainMessenger": "0x64Fca36c52628e40de8684C4C3B5EdB22Fd2eFd9",
+ "Proxy__L1StandardBridge": "0xb7629EF94B991865940E8A840Aa7d68fa88c3Fe8",
+ "StateCommitmentChain": "0xF764C4f8D2982432239A110Cf6B08e95631cE564",
+ "TK_L1BOBA": "0x4389b230D15119c347B9E8BEA6d930A21aaDF6BA",
+ "TK_L2BOBA": "0x4200000000000000000000000000000000000006",
+ "TK_L2WBOBA": "0x5ad2635e9aBce5F95AdcF164Ac81bcAeBdC8E345",
+ "TK_L1FTM": "0x0000000000000000000000000000000000000000",
+ "TK_L2FTM": "0x4200000000000000000000000000000000000023",
+ "TK_L1USDC": "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75",
+ "TK_L2USDC": "0xb7629EF94B991865940E8A840Aa7d68fa88c3Fe8",
+ "TK_L1DAI": "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E",
+ "TK_L2DAI": "0x31223A147fF76C3fC43d67F8BC36F11E034c484e",
+ "L1CrossDomainMessengerFast": "0xf74C652a160BA2B2e82D8702A743c8Db83F8DA7d",
+ "Proxy__L1CrossDomainMessengerFast": "0xC0597ED18446254E4dd0CA5D80eb07D3f2E462cF",
+ "L2LiquidityPool": "0x4389b230D15119c347B9E8BEA6d930A21aaDF6BA",
+ "L1LiquidityPool": "0x6eA17632630e43dAF94AA776Eba606Ec5d61Ab6A",
+ "Proxy__L1LiquidityPool": "0x0bF5402a57970C7BD9883248534B644Ab545e6d4",
+ "Proxy__L2LiquidityPool": "0xD502Ca71dE5e072918884f638408291c066EF1F6",
+ "L2TokenPool": "0xEb26f95D155f133Ca3B1fc36C7cFcE7C5239e139",
+ "L1Message": "0xFa965d70BFF2BCb4B76Ac3A485a28C0D5a06fA9e",
+ "L2Message": "0xa8082C1D4e8615A962494A7Dd8ffe7be089458eE",
+ "AtomicSwap": "0xA8b85842b7556F556c0Cf0Af71b9241EA8baDc6F",
+ "L2ERC721": "0xa2444dC15D92D4cf8B51DAB300C1b8534602Db29",
+ "L2ERC721Reg": "0x18028b28EE7A8000dCB9e55c6bfaEBC5837AdB79",
+ "L1NFTBridge": "0x9BE15EC6BF78536a970F444A41361367B5de1098",
+ "L2NFTBridge": "0x282267F1CD5562F91036a1f9FA52961A48385139",
+ "Proxy__L1NFTBridge": "0x58bfe4D8108f0657585c9e4C106B3FB8b469eeB9",
+ "Proxy__L2NFTBridge": "0xd0223931513E72C4cbBE97662C07825C7E71DD9C",
+ "L1MultiMessageRelayerFast": "0xE7beDcedF3E3054aF891DddeF61775A23a16CB90",
+ "DiscretionaryExitFee": "0xBD4e12b0634b154932D75503E2Ff404953CbD1Bf",
+ "FeedRegistry": "0x6001C473E020D3562Ea436B61aE4d2e91e7078cE",
+ "BOBAUSD_Aggregator": "0x677360aba457B747056f3E00095644D9ADB5753D",
+ "BobaBillingContract": "0xCcA5a1CB9fAD5F2A5b88D95440dA7c83EC031Cb1",
+ "Proxy__BobaBillingContract": "0xD5b0E66566FEe76d6c550e7190385703Bcf11354",
+ "Boba_GasPriceOracle":"0x4200000000000000000000000000000000000025",
+ "Proxy__Boba_GasPriceOracle":"0x4200000000000000000000000000000000000024",
+ "BobaTuringCredit": "0x4200000000000000000000000000000000000021",
+ "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020",
+ "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826"
+}
diff --git a/packages/boba/register/addresses/addressesBobaBase_0xF8d0bF3a1411AC973A606f90B2d1ee0840e5979B.json b/packages/boba/register/addresses/addressesBobaBase_0xF8d0bF3a1411AC973A606f90B2d1ee0840e5979B.json
new file mode 100644
index 0000000000..196d97db68
--- /dev/null
+++ b/packages/boba/register/addresses/addressesBobaBase_0xF8d0bF3a1411AC973A606f90B2d1ee0840e5979B.json
@@ -0,0 +1,40 @@
+{
+ "AddressManager": "0xF8d0bF3a1411AC973A606f90B2d1ee0840e5979B",
+ "Proxy__L1StandardBridge": "0xEcca5FEd8154420403549f5d8F123fcE69fae806",
+ "Proxy__L1CrossDomainMessenger": "0x76DB375075F1d5Dcd1D70Fc07F69a5c7b40ab877",
+ "TK_L1BOBA": "0x1365fd7BcEE84686DBCA71e1571C0d9ad9E64945",
+ "TK_L2BOBA": "0x4200000000000000000000000000000000000006",
+ "TK_L1DEV": "0x0000000000000000000000000000000000000000",
+ "TK_L2DEV": "0x4200000000000000000000000000000000000023",
+ "TK_L1GLMR": "0x0000000000000000000000000000000000000000",
+ "TK_L2GLMR": "0x4200000000000000000000000000000000000023",
+ "L1CrossDomainMessengerFast": "0x7bE12FCB0Fc0979f4DD1A9A1CCec9d0036E634A1",
+ "Proxy__L1CrossDomainMessengerFast": "0xAE8885D3b7937af9480cd7301925a88Dfb0cE9f6",
+ "L2LiquidityPool": "0xEb0d3b107528FE17b9F55360D03351fe3D0ACaB2",
+ "L1LiquidityPool": "0xd779D5e0aDA790f382Cd80d0a90De533b8262b9f",
+ "Proxy__L1LiquidityPool": "0x569a3e1A4A50D0F53BDF05d50D5FeAB3f716f5A1",
+ "Proxy__L2LiquidityPool": "0xb227a9FebBa59B8Fe5dF7Ad81afac6E7CdE5a4A5",
+ "L2TokenPool": "0x152eE45C2eF3E6B303d0603C82b785255D386Fd0",
+ "L1Message": "0x3C285ACC9CAD39c94CF7E46850bd9098b6f858F5",
+ "L2Message": "0xECF2d55E35E14eC146f17a17B1D2e082bAA12B40",
+ "AtomicSwap": "0x2e965d49E69dA6182bdc331b740384CF8745A690",
+ "L2ERC721": "0x3a93df8eba34AFa4Fb74a09D7cb9BB6E528d2E0C",
+ "L2ERC721Reg": "0xb73Bc7AbED40236ca53b2225e3FA497c04A0F718",
+ "L1NFTBridge": "0xf5aCb091936715eCAC49d5759b4801703a175387",
+ "L2NFTBridge": "0x64371C6b9acFDBC14A98CD794a531Ff737Ef0F98",
+ "Proxy__L1NFTBridge": "0x1E12Ba552Ac35351563091737910d9E5d1DaD17a",
+ "Proxy__L2NFTBridge": "0x8E65834B52c3aCc79206a0F09c4b627BC588f09e",
+ "L1MultiMessageRelayerFast": "0x874a7Ea9722b96924e186f0263866FA90a7C777b",
+ "DiscretionaryExitFee": "0x01ce26900fC11aBc2AcF53154772bb251c8aA005",
+ "FeedRegistry": "0x0d2E819A8E0FC9377d3D488A9480D6C00ADE986F",
+ "BOBAUSD_Aggregator": "0x66335BA50c757a5b1Ee6FB3c3ed703e4a26ea526",
+ "BobaBillingContract": "0x17CC69Adc242f9C50132503A2e5d5d9cD4889786",
+ "Proxy__BobaBillingContract": "0x05C9f36D901594D220311B211fA26DbD58B87717",
+ "Boba_GasPriceOracle":"0x4200000000000000000000000000000000000025",
+ "Proxy__Boba_GasPriceOracle":"0x4200000000000000000000000000000000000024",
+ "BobaTuringCredit": "0x4200000000000000000000000000000000000021",
+ "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020",
+ "AuthenticatedFaucet": "0x8b6A1c0590Ab8A9CED9ADa87Df485eCdd97886E2",
+ "WBOBA9": "0xc03cc0d0995e7b677348e396F5F1D70Fe8667fCe",
+ "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826"
+}
diff --git a/packages/boba/register/addresses/addressesBobaOperaTestnet_0x12ad9f501149D3FDd703cC10c567F416B7F0af8b.json b/packages/boba/register/addresses/addressesBobaOperaTestnet_0x12ad9f501149D3FDd703cC10c567F416B7F0af8b.json
new file mode 100644
index 0000000000..1db2669f4a
--- /dev/null
+++ b/packages/boba/register/addresses/addressesBobaOperaTestnet_0x12ad9f501149D3FDd703cC10c567F416B7F0af8b.json
@@ -0,0 +1,38 @@
+{
+ "AddressManager": "0x12ad9f501149D3FDd703cC10c567F416B7F0af8b",
+ "Proxy__L1CrossDomainMessenger": "0xEecAD665ca933eeA4a9a2db600E538c1391930d1",
+ "Proxy__L1StandardBridge": "0x86FC7AeFcd69983A8d82eAB1E0EaFD38bB42fd3f",
+ "TK_L1BOBA": "0x5E747DfA79b8f9e46BE0CC67e378b7600350B2eF",
+ "TK_L2BOBA": "0x4200000000000000000000000000000000000006",
+ "TK_L1FTM": "0x0000000000000000000000000000000000000000",
+ "TK_L2FTM": "0x4200000000000000000000000000000000000023",
+ "L1CrossDomainMessengerFast": "0x7bE12FCB0Fc0979f4DD1A9A1CCec9d0036E634A1",
+ "Proxy__L1CrossDomainMessengerFast": "0xE5781E5E9CbC67E91DF93eD01E922De30125e491",
+ "L2LiquidityPool": "0x00Fda9B3952f80c4238C371064FA6667b6146468",
+ "L1LiquidityPool": "0x6A27b80a11156A7aA88CF34EC73F130df4f28bED",
+ "Proxy__L1LiquidityPool": "0x34024168ba3cfa608005b5E9f13389bb2532422A",
+ "Proxy__L2LiquidityPool": "0xE7Da2a8EBcbBa0Dc6082B8D0faBAcA0176920760",
+ "L2TokenPool": "0x352d964E9aD016f122dc78Afa5164417907E0FaF",
+ "L1Message": "0x154128647Ff7fc41DdaD3d09f7c83340140539C5",
+ "L2Message": "0xa97a909D967B150E27AB58ca6d0cb40B39200Be1",
+ "AtomicSwap": "0x1bc8Bd8FCAd96ee663b6325F71F818Cce678083D",
+ "L2ERC721": "0x727207c505c1D95Ef7Ed93f74443D72C155064E7",
+ "L2ERC721Reg": "0xb5F92c9d10539137C9602A626d7F98823e58f3aA",
+ "L1NFTBridge": "0xA3f17f06F7F02156692D795a1782105dA530631c",
+ "L2NFTBridge": "0xEecAD665ca933eeA4a9a2db600E538c1391930d1",
+ "Proxy__L1NFTBridge": "0x5E52f340D43Ee819dd8a38D55Cc27293603Ac5fb",
+ "Proxy__L2NFTBridge": "0x310FA48450dF21fBC99b937a7AafBc3B7Af6f6D1",
+ "L1MultiMessageRelayerFast": "0x9Af237336C29dCbA346764af8e8E1F0ba83D1eE5",
+ "DiscretionaryExitFee": "0x6E7033f647f932D23de37BD3b25b8F56DeAD4034",
+ "FeedRegistry": "0x48dfB307f6fFbDB9229E63beA2C127e7500DC5Ae",
+ "BOBAUSD_Aggregator": "0xA145e444abAd1Cb233A37cED870c59FD97e774bf",
+ "BobaBillingContract": "0x5E747DfA79b8f9e46BE0CC67e378b7600350B2eF",
+ "Proxy__BobaBillingContract": "0x675Ea342D2a85D7db0Cc79AE64196ad628Ce8187",
+ "Boba_GasPriceOracle":"0x4200000000000000000000000000000000000025",
+ "Proxy__Boba_GasPriceOracle":"0x4200000000000000000000000000000000000024",
+ "BobaTuringCredit": "0x4200000000000000000000000000000000000021",
+ "Proxy__BobaTuringCredit": "0x4200000000000000000000000000000000000020",
+ "AuthenticatedFaucet": "0xCED1459C6B56a85363426a502a24De99fBbF5a83",
+ "WBOBA9": "0xfd7f8a9F2D11B30a3571395Be9601720B6a32995",
+ "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826"
+}
diff --git a/packages/boba/register/addresses/layerZeroTestnet.json b/packages/boba/register/addresses/layerZeroTestnet.json
index 3b8b6a370e..9c67409ded 100644
--- a/packages/boba/register/addresses/layerZeroTestnet.json
+++ b/packages/boba/register/addresses/layerZeroTestnet.json
@@ -1,60 +1,76 @@
{
"Layer_Zero_Protocol": {
"Testnet":{
- "Layer_Zero_Endpoint": "0x79a63d6d8BBD5c6dfc774dA79bCcD948EAcb53FA",
- "Layer_Zero_ChainId": "10001"
+ "Layer_Zero_Endpoint": "0xbfD2135BFfbb0B5378b56643c2Df8a87552Bfa23",
+ "Layer_Zero_ChainId": "10121"
},
"BNB": {
"Layer_Zero_Endpoint": "0x6Fcb97553D41516Cb228ac03FdC8B9a0a9df04A1",
- "Layer_Zero_ChainId": "10002"
+ "Layer_Zero_ChainId": "10102"
},
"Fantom": {
"Layer_Zero_Endpoint": "0x7dcAD72640F835B0FA36EFD3D6d3ec902C7E5acf",
- "Layer_Zero_ChainId": "10012"
+ "Layer_Zero_ChainId": "10112"
},
"Avalanche": {
"Layer_Zero_Endpoint": "0x93f54D755A063cE7bB9e6Ac47Eccc8e33411d706",
"Layer_Zero_ChainId": "10006"
+ },
+ "Moonbase": {
+ "Layer_Zero_Endpoint": "0xb23b28012ee92E8dE39DEb57Af31722223034747",
+ "Layer_Zero_ChainId": "10126"
}
},
"BOBA_Bridges": {
"Testnet":{
- "Proxy__EthBridgeToBNB": "0xe15DccaB449aC06eE8eC068a75BA61968ba8BFBC",
- "Proxy__EthBridgeToFantom": "0xE3D9a12677dE08D250c20BFe22009d5e34EB4ba5",
- "Proxy__EthBridgeToAvalanche": "0x78Af7bF02fEBa4D979Ea2dBc5388cDC768E7b34E",
- "EthBridgeToBNB": "0x1Df8afB0ddA430f5A31F731B0C9A673357E4F053",
- "EthBridgeToFantom": "0x860E4E12d5b6d979D028cA1A55738722Db68138E",
- "EthBridgeToAvalanche": "0x83E8310D78a0a49576C4Bd7609CD77182f31Ba88",
- "Proxy__BNBBridgeToEth": "0x5eeA4C745c8099C8A226004493B7ac565D7489C7",
- "Proxy__FantomBridgeToEth": "0x2d9322086Ea40Ffd7085e854120F1Bd2670469fD",
- "Proxy__AvalancheBridgeToEth": "0x72B9875fF366f12B7fCCa379E762AaCD4CD457Cb",
- "BNBBridgeToEth": "0x0168Bfe341d8c30faA7E0b6900104ceafd1E6B16",
- "FantomBridgeToEth": "0xB5E0AdBb4cE258472eFe869B24Cb8452281A80a0",
- "AvalancheBridgeToEth": "0x482bdcA71c6AB6751Be74e256E9A144e48E0Ba6f",
- "BNB_TK_BOBA": "0x5895678be5bbb312B66a36f58D366325DdC35965",
- "Avalanche_TK_BOBA": "0xE1BE8c3D60F8046F118F1301B412A908815C8886",
- "Fantom_TK_BOBA": "0xD12701Ef5Bc5497a2122E0Cb630D44Cd88AfA770"
+ "Proxy__EthBridgeToBNB": "0x88F8cD148A4B68d250B62EeB75D9Cccd99624E2C",
+ "Proxy__EthBridgeToFantom": "0x46Df4761959BC78867e1Af47cA8bC7B40B3Cb1A6",
+ "Proxy__EthBridgeToAvalanche": "0x1b588Adb7Ec795f45D9c8BDdc2eA49efAE37AB6a",
+ "Proxy__EthBridgeToMoonbase": "0x3BB2954d2c2AaeE4832e4a89974DC4E5a5a53C0a",
+ "EthBridgeToBNB": "0xCb91c5157024618FC90017c28fa83F36f266Eb4e",
+ "EthBridgeToFantom": "0xa0fDeB9c88178E35D336042A076CeC12b55054a2",
+ "EthBridgeToAvalanche": "0x2C4Ec0725D9b795A90de46326C7dDb57C1437019",
+ "EthBridgeToMoonbase": "0x66c8283aECcAbB15f3359961a91783ff8553ee1B",
+ "Proxy__BNBBridgeToEth": "0x37152D3D998ED163f4253FDaBDD9E545F0Ec7c07",
+ "Proxy__FantomBridgeToEth": "0x01F93E4EFa199d4D42A248Db90716214f7283DCb",
+ "Proxy__AvalancheBridgeToEth": "0xec4DE3D3bCbCe89875C1C5d2d7FAd8B2AF5080a7",
+ "Proxy__MoonbaseBridgeToEth": "0xc60e797bf8166EEF92681fc47cDdd7517293F025",
+ "BNBBridgeToEth": "0xc614A66f82e71758Fa7735C91dAD1088c8362f15",
+ "FantomBridgeToEth": "0x7B23c975195503C9Eb1972e900ac4799B5A504Cb",
+ "AvalancheBridgeToEth": "0x7eD586Db48CB0b60b821462Be6e925CA1b5D271D",
+ "MoonbaseBridgeToEth": "0xBe9813929AD03bE8955fab157D64f5f784ADfc30",
+ "BNB_TK_BOBA": "0x89d7128C93933012F0d36D9A5bCae82414318A0D",
+ "Avalanche_TK_BOBA": "0xDA72d93c5645E70437D733d55DdE9CCb5403E4b1",
+ "Fantom_TK_BOBA": "0x44DcA16c6940D74d12ABFa586E0b6caAC0ceDeF8",
+ "Moonbase_TK_BOBA": "0x0F59e146b557c2168025E576C2A52f782e88cC6D"
},
"BNB": {
- "Proxy__EthBridgeToBNB": "0xe15DccaB449aC06eE8eC068a75BA61968ba8BFBC",
- "EthBridgeToBNB": "0x1Df8afB0ddA430f5A31F731B0C9A673357E4F053",
- "Proxy__BNBBridgeToEth": "0x5eeA4C745c8099C8A226004493B7ac565D7489C7",
- "BNBBridgeToEth": "0x0168Bfe341d8c30faA7E0b6900104ceafd1E6B16",
- "BNB_TK_BOBA": "0x5895678be5bbb312B66a36f58D366325DdC35965"
+ "Proxy__EthBridgeToBNB": "0x88F8cD148A4B68d250B62EeB75D9Cccd99624E2C",
+ "EthBridgeToBNB": "0xCb91c5157024618FC90017c28fa83F36f266Eb4e",
+ "Proxy__BNBBridgeToEth": "0x37152D3D998ED163f4253FDaBDD9E545F0Ec7c07",
+ "BNBBridgeToEth": "0xc614A66f82e71758Fa7735C91dAD1088c8362f15",
+ "BNB_TK_BOBA": "0x89d7128C93933012F0d36D9A5bCae82414318A0D"
},
"Fantom": {
- "Proxy__EthBridgeToFantom": "0xE3D9a12677dE08D250c20BFe22009d5e34EB4ba5",
- "EthBridgeToFantom": "0x860E4E12d5b6d979D028cA1A55738722Db68138E",
- "Proxy__FantomBridgeToEth": "0x2d9322086Ea40Ffd7085e854120F1Bd2670469fD",
- "FantomBridgeToEth": "0xB5E0AdBb4cE258472eFe869B24Cb8452281A80a0",
- "Fantom_TK_BOBA": "0xD12701Ef5Bc5497a2122E0Cb630D44Cd88AfA770"
+ "Proxy__EthBridgeToFantom": "0x46Df4761959BC78867e1Af47cA8bC7B40B3Cb1A6",
+ "EthBridgeToFantom": "0xa0fDeB9c88178E35D336042A076CeC12b55054a2",
+ "Proxy__FantomBridgeToEth": "0x01F93E4EFa199d4D42A248Db90716214f7283DCb",
+ "FantomBridgeToEth": "0x7B23c975195503C9Eb1972e900ac4799B5A504Cb",
+ "Fantom_TK_BOBA": "0x44DcA16c6940D74d12ABFa586E0b6caAC0ceDeF8"
},
"Avalanche": {
- "Proxy__EthBridgeToAvalanche": "0x78Af7bF02fEBa4D979Ea2dBc5388cDC768E7b34E",
- "EthBridgeToAvalanche": "0x83E8310D78a0a49576C4Bd7609CD77182f31Ba88",
- "Proxy__AvalancheBridgeToEth": "0x72B9875fF366f12B7fCCa379E762AaCD4CD457Cb",
- "AvalancheBridgeToEth": "0x482bdcA71c6AB6751Be74e256E9A144e48E0Ba6f",
- "Avalanche_TK_BOBA": "0xE1BE8c3D60F8046F118F1301B412A908815C8886"
+ "Proxy__EthBridgeToAvalanche": "0x1b588Adb7Ec795f45D9c8BDdc2eA49efAE37AB6a",
+ "EthBridgeToAvalanche": "0x2C4Ec0725D9b795A90de46326C7dDb57C1437019",
+ "Proxy__AvalancheBridgeToEth": "0xec4DE3D3bCbCe89875C1C5d2d7FAd8B2AF5080a7",
+ "AvalancheBridgeToEth": "0x7eD586Db48CB0b60b821462Be6e925CA1b5D271D",
+ "Avalanche_TK_BOBA": "0xDA72d93c5645E70437D733d55DdE9CCb5403E4b1"
+ },
+ "Moonbase": {
+ "Proxy__EthBridgeToMoonbase": "0x3BB2954d2c2AaeE4832e4a89974DC4E5a5a53C0a",
+ "EthBridgeToMoonbase": "0x66c8283aECcAbB15f3359961a91783ff8553ee1B",
+ "Proxy__MoonbaseBridgeToEth": "0xc60e797bf8166EEF92681fc47cDdd7517293F025",
+ "MoonbaseBridgeToEth": "0xBe9813929AD03bE8955fab157D64f5f784ADfc30",
+ "Moonbase_TK_BOBA": "0x0F59e146b557c2168025E576C2A52f782e88cC6D"
}
}
}
diff --git a/packages/boba/register/addresses/tokenInfo.json b/packages/boba/register/addresses/tokenInfo.json
index 5689658e0f..227ca5fb15 100644
--- a/packages/boba/register/addresses/tokenInfo.json
+++ b/packages/boba/register/addresses/tokenInfo.json
@@ -526,5 +526,313 @@
"decimals": 18
}
}
+ },
+ "43114": {
+ "L1": {
+ "0x3cD790449CF7D187a143d4Bd7F4654d4f2403e02": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ },
+ "0x42006Ab57701251B580bDFc24778C43c9ff589A1": {
+ "name": "EVO",
+ "symbol": "EVO",
+ "decimals": 18
+ },
+ "0xc7198437980c041c805A1EDcbA50c1Ce5db95118": {
+ "name": "Tether USD",
+ "symbol": "USDT.e",
+ "decimals": 6
+ },
+ "0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7": {
+ "name": "TetherToken",
+ "symbol": "USDt",
+ "decimals": 6
+ },
+ "0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E": {
+ "name": "USD Coin",
+ "symbol": "USDC",
+ "decimals": 6
+ },
+ "0xA7D7079b0FEaD91F3e65f86E8915Cb59c1a4C664": {
+ "name": "USD Coin",
+ "symbol": "USDC.e",
+ "decimals": 6
+ },
+ "0x19860CCB0A68fd4213aB9D8266F7bBf05A8dDe98": {
+ "name": "Binance USD",
+ "symbol": "BUSD.e",
+ "decimals": 18
+ },
+ "0x9C9e5fD8bbc25984B178FdCE6117Defa39d2db39": {
+ "name": "BUSD Token",
+ "symbol": "BUSD",
+ "decimals": 18
+ },
+ "0xd586E7F844cEa2F87f50152665BCbc2C279D8d70": {
+ "name": "Dai Stablecoin",
+ "symbol": "DAI.e",
+ "decimals": 18
+ }
+ },
+ "L2": {
+ "0x4200000000000000000000000000000000000006": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ },
+ "0xc8849f32138de93F6097199C5721a9EfD91ceE01": {
+ "name": "EVO",
+ "symbol": "EVO",
+ "decimals": 18
+ },
+ "0x4ED96c1dc969d7E2310D9582A68c39556C005912": {
+ "name": "Tether USD",
+ "symbol": "USDT.e",
+ "decimals": 6
+ },
+ "0xfaA13D82756f1e0e4dec9416b83121db3Fc35199": {
+ "name": "TetherToken",
+ "symbol": "USDt",
+ "decimals": 6
+ },
+ "0x12bb1A120dcF8Cb7152eDAC9f04d176DD7f41F7e": {
+ "name": "USD Coin",
+ "symbol": "USDC",
+ "decimals": 6
+ },
+ "0x126969743a6d300bab08F303f104f0f7DBAfbe20": {
+ "name": "USD Coin",
+ "symbol": "USDC.e",
+ "decimals": 6
+ },
+ "0xb8B0034CFD89925944C07Ac6CcB2834d1774cfb6": {
+ "name": "Binance USD",
+ "symbol": "BUSD.e",
+ "decimals": 18
+ },
+ "0x87e062dE99Ed71aF9b22dDA63e1b6D43333798f8": {
+ "name": "BUSD Token",
+ "symbol": "BUSD",
+ "decimals": 18
+ },
+ "0x69B7d24f0E03Ff21949081C95dA7288fEa5C844D": {
+ "name": "Dai Stablecoin",
+ "symbol": "DAI.e",
+ "decimals": 18
+ },
+ "0x4200000000000000000000000000000000000023": {
+ "name": "Avalanche",
+ "symbol": "AVAX",
+ "decimals": 18
+ }
+ }
+ },
+ "43113": {
+ "L1": {
+ "0xEaE78E78cC22690719361F65a50734A15aaE698C": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ }
+ },
+ "L2": {
+ "0x4200000000000000000000000000000000000006": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ },
+ "0x4200000000000000000000000000000000000023": {
+ "name": "Avalanche",
+ "symbol": "AVAX",
+ "decimals": 18
+ }
+ }
+ },
+ "56": {
+ "L1": {
+ "0xE0DB679377A0F5Ae2BaE485DE475c9e1d8A4607D": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ },
+ "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d": {
+ "name": "USD Coin",
+ "symbol": "USDC",
+ "decimals": 18
+ },
+ "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56": {
+ "name": "BUSD Token",
+ "symbol": "BUSD",
+ "decimals": 18
+ },
+ "0x55d398326f99059fF775485246999027B3197955": {
+ "name": "Tether USD",
+ "symbol": "USDT",
+ "decimals": 18
+ },
+ "0x986cdF0fd180b40c4D6aEAA01Ab740B996D8b782": {
+ "name": "SushiToken",
+ "symbol": "SUSHI",
+ "decimals": 18
+ }
+ },
+ "L2": {
+ "0x4200000000000000000000000000000000000006": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ },
+ "0x9F98f9F312D23d078061962837042b8918e6aff2": {
+ "name": "USD Coin",
+ "symbol": "USDC",
+ "decimals": 18
+ },
+ "0x4a2c2838c3907D024916c3f4Fe07832745Ae4bec": {
+ "name": "BUSD Token",
+ "symbol": "BUSD",
+ "decimals": 18
+ },
+ "0x1E633Dcd0d3D349126983D58988051F7c62c543D": {
+ "name": "Tether USD",
+ "symbol": "USDT",
+ "decimals": 18
+ },
+ "0x4200000000000000000000000000000000000023": {
+ "name": "BNB",
+ "symbol": "BNB",
+ "decimals": 18
+ },
+ "0xa84D7c48602C898EC84C4cCA78651107B3625943": {
+ "name": "SushiToken",
+ "symbol": "SUSHI",
+ "decimals": 18
+ }
+ }
+ },
+ "97": {
+ "L1": {
+ "0x875cD11fDf085e0E11B0EE6b814b6d0b38fA554C": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ }
+ },
+ "L2": {
+ "0x4200000000000000000000000000000000000006": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ },
+ "0x4200000000000000000000000000000000000023": {
+ "name": "tBNB",
+ "symbol": "tBNB",
+ "decimals": 18
+ }
+ }
+ },
+ "1284": {
+ "L1": {
+ "0x18D17A9fD652D7d6a59903E23792ab97F832Ed6C": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ }
+ },
+ "L2": {
+ "0x4200000000000000000000000000000000000006": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ },
+ "0x4200000000000000000000000000000000000023": {
+ "name": "GLMR",
+ "symbol": "GLMR",
+ "decimals": 18
+ }
+ }
+ },
+ "1287": {
+ "L1": {
+ "0x1365fd7BcEE84686DBCA71e1571C0d9ad9E64945": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ }
+ },
+ "L2": {
+ "0x4200000000000000000000000000000000000006": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ },
+ "0x4200000000000000000000000000000000000023": {
+ "name": "DEV",
+ "symbol": "DEV",
+ "decimals": 18
+ }
+ }
+ },
+ "250": {
+ "L1": {
+ "0x4389b230D15119c347B9E8BEA6d930A21aaDF6BA": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ },
+ "0x04068DA6C83AFCFA0e13ba15A6696662335D5B75": {
+ "name": "USD Coin",
+ "symbol": "USDC",
+ "decimals": 6
+ },
+ "0x8D11eC38a3EB5E956B052f67Da8Bdc9bef8Abf3E": {
+ "name": "Dai Stablecoin",
+ "symbol": "DAI",
+ "decimals": 18
+ }
+ },
+ "L2": {
+ "0x4200000000000000000000000000000000000006": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ },
+ "0x4200000000000000000000000000000000000023": {
+ "name": "FTM",
+ "symbol": "FTM",
+ "decimals": 18
+ },
+ "0xb7629EF94B991865940E8A840Aa7d68fa88c3Fe8": {
+ "name": "USD Coin",
+ "symbol": "USDC",
+ "decimals": 6
+ },
+ "0x31223A147fF76C3fC43d67F8BC36F11E034c484e": {
+ "name": "Dai Stablecoin",
+ "symbol": "DAI",
+ "decimals": 18
+ }
+ }
+ },
+ "4002": {
+ "L1": {
+ "0x5E747DfA79b8f9e46BE0CC67e378b7600350B2eF": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ }
+ },
+ "L2": {
+ "0x4200000000000000000000000000000000000006": {
+ "name": "BOBA Token",
+ "symbol": "BOBA",
+ "decimals": 18
+ },
+ "0x4200000000000000000000000000000000000023": {
+ "name": "FTM",
+ "symbol": "FTM",
+ "decimals": 18
+ }
+ }
}
}
diff --git a/packages/sdk/src/utils/contracts.ts b/packages/sdk/src/utils/contracts.ts
index b38387ecf2..6e047ad929 100644
--- a/packages/sdk/src/utils/contracts.ts
+++ b/packages/sdk/src/utils/contracts.ts
@@ -128,6 +128,186 @@ export const CONTRACT_ADDRESSES: {
},
l2: DEFAULT_L2_CONTRACT_ADDRESSES,
},
+ // Moonbeam local
+ 1281: {
+ l1: {
+ AddressManager: '0xc01Ee7f10EA4aF4673cFff62710E1D7792aBa8f3',
+ L1CrossDomainMessenger: '0xab7785d56697E65c2683c8121Aac93D3A028Ba95',
+ L1CrossDomainMessengerFast: '0xB942FA2273C7Bce69833e891BDdFd7212d2dA415',
+ L1StandardBridge: '0x78D714e1b47Bb86FE15788B917C9CC7B77975529',
+ StateCommitmentChain: '0x294c664f6D63bd1521231a2EeFC26d805ce00a08',
+ CanonicalTransactionChain: '0x598efcBD0B5b4Fd0142bEAae1a38f6Bd4d8a218d',
+ BondManager: '0xEC69d4f48f4f1740976968FAb9828d645Ad1d77f',
+ L1MultiMessageRelayer: '0xad856F238CBeafd064b80D12EadAea3981fB21B5',
+ L1MultiMessageRelayerFast: '0xAdD0E4aD78B01048027154c7a432a1cB6711178f',
+ },
+ l2: DEFAULT_L2_CONTRACT_ADDRESSES,
+ },
+ // MoonBase
+ 1287: {
+ l1: {
+ AddressManager: '0xF8d0bF3a1411AC973A606f90B2d1ee0840e5979B',
+ L1CrossDomainMessenger: '0x76DB375075F1d5Dcd1D70Fc07F69a5c7b40ab877',
+ L1CrossDomainMessengerFast: '0xAE8885D3b7937af9480cd7301925a88Dfb0cE9f6',
+ L1StandardBridge: '0xEcca5FEd8154420403549f5d8F123fcE69fae806',
+ StateCommitmentChain: '0x5E41Eaac5319CDf336c51969E2F164A686138B28',
+ CanonicalTransactionChain: '0xa8bD51a7F46321587921A33fa3c752b426c74754',
+ BondManager: '0x6c55306656E8b74F93653A753DE539c2F6ca18Db',
+ L1MultiMessageRelayer: '0x4c1bcfe4F0b1a57d3c578a8ED3dBEBCa29339c85',
+ L1MultiMessageRelayerFast: '0x874a7Ea9722b96924e186f0263866FA90a7C777b',
+ },
+ l2: DEFAULT_L2_CONTRACT_ADDRESSES,
+ },
+ // Moonbeam
+ 1284: {
+ l1: {
+ AddressManager: '0x564c10A60af35a07f0EA8Be3106a4D81014b21a0',
+ L1CrossDomainMessenger: '0x4765f8b50Bbe049045bBA1270dc7A8CDF17165cF',
+ L1CrossDomainMessengerFast: '0x17d02C3e6cB69225d83d0bADEb0fC09aE735CA3b',
+ L1StandardBridge: '0xAf5297f68D48cd2DE37Ee5cbaC0647fbA4132985',
+ StateCommitmentChain: '0xAD379B1518f50Fc737536D2Ec2c13E4640e228A8',
+ CanonicalTransactionChain: '0x99C970105cf6EE2e22b563CB86bCA42D05ac7A95',
+ BondManager: '0xcfe333e0e48EC71f1399a76001cf39E0c6A51dA5',
+ L1MultiMessageRelayer: '0x3664bC9BA25D0d3911c39d8ae1734b0B5A3495C1',
+ L1MultiMessageRelayerFast: '0xE2EE964E39720f78Cd75BC146Ed078D301981759',
+ },
+ l2: DEFAULT_L2_CONTRACT_ADDRESSES,
+ },
+ // Fantom local
+ 4003: {
+ l1: {
+ AddressManager: '0xf536cAF1a894E09945E649FCE3032E8E03ECb9A0',
+ L1CrossDomainMessenger: '0x03466593AE8Bc085F384bC4EB91d5035F5a7936C',
+ L1CrossDomainMessengerFast: '0xC93DD6833E6A29004FcC84C757cCf0d5551aBFe1',
+ L1StandardBridge: '0xAEa06C2B29edfac53a0538A9843D018348845Ebf',
+ StateCommitmentChain: '0xC98Dd1b152d9e4cf2A6384a78d4FFE8D50E86C6c',
+ CanonicalTransactionChain: '0xFfB9dF984DC95ab53c561d818b708135612b087f',
+ BondManager: '0xE9BC1f638d05edF64Bf3e23A08ff3e2B0fb8b7F7',
+ L1MultiMessageRelayer: '0x9257aE2144eF338Da70D6884c98BD8CB90Da639E',
+ L1MultiMessageRelayerFast: '0xB6D431Bb85298030eA27a0E3769bEa5ed1F9fF53',
+ },
+ l2: DEFAULT_L2_CONTRACT_ADDRESSES,
+ },
+ // Fantom testnet
+ 4002: {
+ l1: {
+ AddressManager: '0x12ad9f501149D3FDd703cC10c567F416B7F0af8b',
+ L1CrossDomainMessenger: '0xEecAD665ca933eeA4a9a2db600E538c1391930d1',
+ L1CrossDomainMessengerFast: '0xE5781E5E9CbC67E91DF93eD01E922De30125e491',
+ L1StandardBridge: '0x86FC7AeFcd69983A8d82eAB1E0EaFD38bB42fd3f',
+ StateCommitmentChain: '0x352d964E9aD016f122dc78Afa5164417907E0FaF',
+ CanonicalTransactionChain: '0xE66Bd40BBeC97397758E22858331752f0ecBE02e',
+ BondManager: '0xa97a909D967B150E27AB58ca6d0cb40B39200Be1',
+ L1MultiMessageRelayer: '0xD7Cbc979C909d864c38670AcccD57209F7B556e3',
+ L1MultiMessageRelayerFast: '0x9Af237336C29dCbA346764af8e8E1F0ba83D1eE5',
+ },
+ l2: DEFAULT_L2_CONTRACT_ADDRESSES,
+ },
+ // Fantom mainnet
+ 250: {
+ l1: {
+ AddressManager: '0x4e7325bcf09e091Bb8119258B885D4ef687B7386',
+ L1CrossDomainMessenger: '0x64Fca36c52628e40de8684C4C3B5EdB22Fd2eFd9',
+ L1CrossDomainMessengerFast: '0xC0597ED18446254E4dd0CA5D80eb07D3f2E462cF',
+ L1StandardBridge: '0xb7629EF94B991865940E8A840Aa7d68fa88c3Fe8',
+ StateCommitmentChain: '0xF764C4f8D2982432239A110Cf6B08e95631cE564',
+ CanonicalTransactionChain: '0x6001C473E020D3562Ea436B61aE4d2e91e7078cE',
+ BondManager: '0xCcA5a1CB9fAD5F2A5b88D95440dA7c83EC031Cb1',
+ L1MultiMessageRelayer: '0xD8DcA5fC53a83Cf06ec744a7226C23951a353A0f',
+ L1MultiMessageRelayerFast: '0xE7beDcedF3E3054aF891DddeF61775A23a16CB90',
+ },
+ l2: DEFAULT_L2_CONTRACT_ADDRESSES,
+ },
+ // Avalanche local
+ 43112: {
+ l1: {
+ AddressManager: '0x52C84043CD9c865236f11d9Fc9F56aa003c1f922',
+ L1CrossDomainMessenger: '0xDFBb4b49DfAe39720f68f8297ADb2368FeffaDdb',
+ L1CrossDomainMessengerFast: '0xD054149e4345Cc00cc2f2465C02a864f60d6bd46',
+ L1StandardBridge: '0x4475A8FBeF5Cf4a92a484B6f5602A91F3abC72D8',
+ StateCommitmentChain: '0xF5f1f185cF359dC48469e410Aeb6983cD4DC5812',
+ CanonicalTransactionChain: '0xa1E47689f396fED7d18D797d9D31D727d2c0d483',
+ BondManager: '0x97C0FE6aB595cbFD50ad3860DA5B2017d8B35c2E',
+ L1MultiMessageRelayer: '0xEC1bf080BDFBbBa102603Cc1C55aFd215C694a2b',
+ L1MultiMessageRelayerFast: '0x1AA001Cd20F35F3F4EF1A945053CeE4Acc24aDb4',
+ },
+ l2: DEFAULT_L2_CONTRACT_ADDRESSES,
+ },
+ // Avalanche testnet
+ 43113: {
+ l1: {
+ AddressManager: '0xcE78de95b85212BC348452e91e0e74c17cf37c79',
+ L1CrossDomainMessenger: '0x68c19B7FbAe4F8034cf6316b2045ba6aB6978F6b',
+ L1CrossDomainMessengerFast: '0xBc5249095c890F58C0b75795bd21667eFd123F5F',
+ L1StandardBridge: '0x07B606934b5B5D6A9E1f8b78A0B26215FF58Ad56',
+ StateCommitmentChain: '0x57B9C47F2Ae857005238096486C5B107447dE221',
+ CanonicalTransactionChain: '0xA36D21C0125b5Dc52d95ED8FF1eF7188d4666EAE',
+ BondManager: '0x067cD503bd734a779830dafF0Db582B6a347c3df',
+ L1MultiMessageRelayer: '0x74546A4c6D5543Be7e8447159c47BAe7f5431C49',
+ L1MultiMessageRelayerFast: '0x5e6B412b4fA8373a17aD85B269fA5c354ea57e63',
+ },
+ l2: DEFAULT_L2_CONTRACT_ADDRESSES,
+ },
+ // Avalanche Mainnet
+ 43114: {
+ l1: {
+ AddressManager: '0x00220f8ce1c4be8436574e575fE38558d85e2E6b',
+ L1CrossDomainMessenger: '0x0fc742332ae6D447d6619D93985Aa288B81CBb0C',
+ L1CrossDomainMessengerFast: '0x5b6714b7926e6D7e34154C9AC945B489978fA7E7',
+ L1StandardBridge: '0xf188F1e92B2c78956D2859b84684BFD17103e22c',
+ StateCommitmentChain: '0x1ef85D873Cf451C8B9a45DbE40b478E991F51210',
+ CanonicalTransactionChain: '0x1A19A4ce2b3B0A974Df717b6F88c881a69F315e3',
+ BondManager: '0x26c319B7B2cF823365414d082698C8ac90cbBA63',
+ L1MultiMessageRelayer: '0x87e062dE99Ed71aF9b22dDA63e1b6D43333798f8',
+ L1MultiMessageRelayerFast: '0xf9821061774b9693359F582b007A5F1C39d75Ae3',
+ },
+ l2: DEFAULT_L2_CONTRACT_ADDRESSES,
+ },
+ // BNB local
+ 99: {
+ l1: {
+ AddressManager: '0xC194E4CFa59D2DfC520217dA22E23DF8D4658a37',
+ L1CrossDomainMessenger: '0x8b8656D5d37C3DC620B80817972E0d9a5267761b',
+ L1CrossDomainMessengerFast: '0x07B43F437c3A13eeb17EF2beBea046e61502151f',
+ L1StandardBridge: '0x285766B642eAA86b8052817c827E4472cDb3dd18',
+ StateCommitmentChain: '0x57a243B34F9232515Fa9FD8D4c2daFd611cF1BCA',
+ CanonicalTransactionChain: '0x3717E342Bc746c01244fb40e47521945091238ce',
+ BondManager: '0xcF8dDe2accE564024B4b92ef7db81B0e6698F07f',
+ L1MultiMessageRelayer: '0x90f502229E1fAa70cCf900B2D14595a5C55B3bE8',
+ L1MultiMessageRelayerFast: '0x64160054BdD6e53915C221cBBfAAbaf1f80c7f20',
+ },
+ l2: DEFAULT_L2_CONTRACT_ADDRESSES,
+ },
+ // BNB testnet
+ 97: {
+ l1: {
+ AddressManager: '0xAee1fb3f4353a9060aEC3943fE932b6Efe35CdAa',
+ L1CrossDomainMessenger: '0x53aD38aE4a63Fe33a86E011F7AF4d3fDe3daD145',
+ L1CrossDomainMessengerFast: '0xbbD6a271abcC44f6dE284E6051Da76b4fB57458C',
+ L1StandardBridge: '0xBf0939120b4F5E3196b9E12cAC291e03dD058e9a',
+ StateCommitmentChain: '0x37FB8bB9EA100CA9a0DE822c9923643ef48Cb8EE',
+ CanonicalTransactionChain: '0x65f291CDfB05bd1D639DF6268F98594fdacDeCa6',
+ BondManager: '0x6737867ddd04272a79E7207a008f213e336b00e1',
+ L1MultiMessageRelayer: '0x5e593AeB2Dbd855D79167831f091B4d959FbB2D1',
+ L1MultiMessageRelayerFast: '0x0F01394F5fc19bA1B9F669bA79b76c9EaAe37987',
+ },
+ l2: DEFAULT_L2_CONTRACT_ADDRESSES,
+ },
+ // BNB mainnet
+ 56: {
+ l1: {
+ AddressManager: '0xeb989B25597259cfa51Bd396cE1d4B085EC4c753',
+ L1CrossDomainMessenger: '0x31338a7D5d123E18a9a71447136B54B6D28241ae',
+ L1CrossDomainMessengerFast: '0xBe349cABeA97bB933f8C2594634Deb858167f83c',
+ L1StandardBridge: '0x1E0f7f4b2656b14C161f1caDF3076C02908F9ACC',
+ StateCommitmentChain: '0xeF85fA550e6EC5486121313C895EDe1005e2397f',
+ CanonicalTransactionChain: '0xA0E38a8FE293E9e95c6A4a882F396F1c80e9e2e4',
+ BondManager: '0xEB6652A4eb6e0d003Fbb3DD76Ae72694175191cd',
+ L1MultiMessageRelayer: '0x1E633Dcd0d3D349126983D58988051F7c62c543D',
+ L1MultiMessageRelayerFast: '0x2dB5717B37Af9A1D9a28829Ea977B4aE4aEE2AED',
+ },
+ l2: DEFAULT_L2_CONTRACT_ADDRESSES,
+ },
}
/**
diff --git a/yarn.lock b/yarn.lock
index ab0c3d4050..47f5d2e9c7 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5049,14 +5049,15 @@
"@noble/hashes" "~1.1.1"
"@scure/base" "~1.1.0"
-"@sentry/browser@7.24.1":
- version "7.24.1"
- resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.24.1.tgz#01c1ce61ba3cfbdec07bcf1413dc958087e26c32"
- integrity sha512-Tr7p1Bg8a+ycdUmZuega0TTOl6xNZUj17PBFZnCjpZtxUMxlwR6aBlM0TxF6/bV6fUJchmoLCAjL3kLIHSSo6Q==
- dependencies:
- "@sentry/core" "7.24.1"
- "@sentry/types" "7.24.1"
- "@sentry/utils" "7.24.1"
+"@sentry/browser@7.34.0":
+ version "7.34.0"
+ resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-7.34.0.tgz#6a521c5d95d535e6e89cf4eae85153f90c37d17a"
+ integrity sha512-5Jmjj0DLxx+31o12T+VH4U+gO7wz3L+ftjuTxcQaC8GeFVe5qCyXZoDmWKNV9NEyREiZ3azV62bJc5wojZrIIg==
+ dependencies:
+ "@sentry/core" "7.34.0"
+ "@sentry/replay" "7.34.0"
+ "@sentry/types" "7.34.0"
+ "@sentry/utils" "7.34.0"
tslib "^1.9.3"
"@sentry/core@5.30.0":
@@ -5081,13 +5082,13 @@
"@sentry/utils" "6.19.7"
tslib "^1.9.3"
-"@sentry/core@7.24.1":
- version "7.24.1"
- resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.24.1.tgz#815480791e4230fd2e8718a4caa1b8253ca42c23"
- integrity sha512-x/kBpBVFCZn4ijVVAPAw0cmHy0PfXgBpYGQ1X3+EEzI3pkvlygvnF2pLR/4LrsC23zGfIRlbDj4DwK5hxoFF4g==
+"@sentry/core@7.34.0":
+ version "7.34.0"
+ resolved "https://registry.yarnpkg.com/@sentry/core/-/core-7.34.0.tgz#bfda8d386cf7343200aa9fb7a7a26e99b839fc0c"
+ integrity sha512-J1oxsYZX1N0tkEcaHt/uuDqk6zOnaivyampp+EvBsUMCdemjg7rwKvawlRB0ZtBEQu3HAhi8zecm03mlpWfCDw==
dependencies:
- "@sentry/types" "7.24.1"
- "@sentry/utils" "7.24.1"
+ "@sentry/types" "7.34.0"
+ "@sentry/utils" "7.34.0"
tslib "^1.9.3"
"@sentry/hub@5.30.0":
@@ -5155,17 +5156,26 @@
lru_map "^0.3.3"
tslib "^1.9.3"
-"@sentry/react@^7.24.1":
- version "7.24.1"
- resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.24.1.tgz#56c3d0df8424421c5f1081fdcb09bb76ef569d24"
- integrity sha512-AxpEFML0nXOq7c1p34JYI2UjxWE+nqIaIXuX/sRTpyOtW+Wq/JLp2qTjimgb3bwY2JmefweRSvzf8J/cuXDG4A==
+"@sentry/react@^7.34.0":
+ version "7.34.0"
+ resolved "https://registry.yarnpkg.com/@sentry/react/-/react-7.34.0.tgz#8d69d3957736fe2692cd5547ad2d2f6f307e5590"
+ integrity sha512-vdonnZK9R8xyEBDaXNofHyoqy9biNRvlKrQXZp4x8WlYcBCwbU46qxZlSVsxa89pm7yUYS+KHq8cYL801+weqg==
dependencies:
- "@sentry/browser" "7.24.1"
- "@sentry/types" "7.24.1"
- "@sentry/utils" "7.24.1"
+ "@sentry/browser" "7.34.0"
+ "@sentry/types" "7.34.0"
+ "@sentry/utils" "7.34.0"
hoist-non-react-statics "^3.3.2"
tslib "^1.9.3"
+"@sentry/replay@7.34.0":
+ version "7.34.0"
+ resolved "https://registry.yarnpkg.com/@sentry/replay/-/replay-7.34.0.tgz#66d63b1e04d7e8068cac0c623a607f470d000751"
+ integrity sha512-4L4YZfWt8mcVNcI99RxHORPb308URI1R9xsFj97fagk0ATjexLKr5QCA2ApnKaSn8Q0q1Zdzd4XmFtW9anU45Q==
+ dependencies:
+ "@sentry/core" "7.34.0"
+ "@sentry/types" "7.34.0"
+ "@sentry/utils" "7.34.0"
+
"@sentry/tracing@5.30.0":
version "5.30.0"
resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f"
@@ -5188,14 +5198,14 @@
"@sentry/utils" "6.19.7"
tslib "^1.9.3"
-"@sentry/tracing@^7.24.1":
- version "7.24.1"
- resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.24.1.tgz#8f947b01a6b836334f20fcb36441d69cede474c9"
- integrity sha512-Vp03aH7wMxLszFMZqVWPlDlqCP5mwAqqsh9nHWUJhyarGJjeacrMj+B+5qKKM4W/JNnbrHRTRLw2lL/szxj1KA==
+"@sentry/tracing@^7.34.0":
+ version "7.34.0"
+ resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-7.34.0.tgz#bc084389cad4f1e8520311ac195b070eced72b40"
+ integrity sha512-JtfSWBfcWslfIujcpGEPF5oOiAOCd5shMoWYrdTvCfruHhYjp4w5kv/ndkvq2EpFkcQYhdmtQEytXEO8IJIqRw==
dependencies:
- "@sentry/core" "7.24.1"
- "@sentry/types" "7.24.1"
- "@sentry/utils" "7.24.1"
+ "@sentry/core" "7.34.0"
+ "@sentry/types" "7.34.0"
+ "@sentry/utils" "7.34.0"
tslib "^1.9.3"
"@sentry/types@5.30.0":
@@ -5208,10 +5218,10 @@
resolved "https://registry.yarnpkg.com/@sentry/types/-/types-6.19.7.tgz#c6b337912e588083fc2896eb012526cf7cfec7c7"
integrity sha512-jH84pDYE+hHIbVnab3Hr+ZXr1v8QABfhx39KknxqKWr2l0oEItzepV0URvbEhB446lk/S/59230dlUUIBGsXbg==
-"@sentry/types@7.24.1":
- version "7.24.1"
- resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.24.1.tgz#ff2e39752ff1d46b54807275e9262209f95ec429"
- integrity sha512-77E1cgw31YmEeqTi5RNMfIgwDB164UdtAGKtTtCehbF9HffO3Lp4f3G8TumqNKOik1RDNHrn+ZWqbj2c97UZZA==
+"@sentry/types@7.34.0":
+ version "7.34.0"
+ resolved "https://registry.yarnpkg.com/@sentry/types/-/types-7.34.0.tgz#e0dc6a927dd13e4cacbca7bfee67a088885e8309"
+ integrity sha512-K+OeHIrl35PSYn6Zwqe4b8WWyAJQoI5NeWxHVkM7oQTGJ1YLG4BvLsR+UiUXnKdR5krE4EDtEA5jLsDlBEyPvw==
"@sentry/utils@5.30.0":
version "5.30.0"
@@ -5229,12 +5239,12 @@
"@sentry/types" "6.19.7"
tslib "^1.9.3"
-"@sentry/utils@7.24.1":
- version "7.24.1"
- resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.24.1.tgz#f9760a7cb4b33d2ead01aace7b0fd62c8c2c6be8"
- integrity sha512-wH0+ToU3OpL373Nx0YiuYje82a8lf6fm7q+MqyWyC6sVETe4YiL4+Ge0WLEJ0XEGFjxfL4gSZL3FhoVbJQxUtA==
+"@sentry/utils@7.34.0":
+ version "7.34.0"
+ resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-7.34.0.tgz#32fb6db8b352477d219ddff8200372959c68b445"
+ integrity sha512-VIHHXEBw0htzqxnU8A7WkXKvmsG2pZVqHlAn0H9W/yyFQtXMuP1j1i0NsjADB/3JXUKK83kTNWGzScXvp0o+Jg==
dependencies:
- "@sentry/types" "7.24.1"
+ "@sentry/types" "7.34.0"
tslib "^1.9.3"
"@sindresorhus/is@^0.14.0":