From b12808e59e84eaf59e04a76a8e4e5aeb98c5ea56 Mon Sep 17 00:00:00 2001 From: Ino Murko Date: Fri, 2 Jun 2023 18:16:50 +0200 Subject: [PATCH] Release/v0.7.1 (#876) * [AA] First draft defaults (#837) * first draft defaults * feedback, defaults * bundler fix: number<>string defaults --------- Co-authored-by: Ino Murko (cherry picked from commit 41a6affb3f9defd4d7ac8ff13db57f17831d7f3f) * [AA] optimization: paymasterAndData for aa-sdk (#871) * paymaster api * switch-to-signed * generalized, tests adapted (cherry picked from commit 710270e28c85a3a9fe3fea97ca4e4377659a9130) * fix for crash on wallet page (#873) (cherry picked from commit e93822da5cdd5a6ab19292237eb84cab4e666a3a) * remove unused vars (#875) (cherry picked from commit fbb0a89f9b8abf2d4ab04eceb196457923833691) --------- Co-authored-by: Riedl Kevin, Bsc Co-authored-by: Sahil K <86316370+sk-enya@users.noreply.github.com> --- integration-tests/package.json | 2 +- .../test/alt-l2/boba_aa_alt_fee_token.spec.ts | 14 +- .../test/eth-l2/boba_aa_fee_alt_token.spec.ts | 17 +- .../test/eth-l2/boba_aa_fee_boba.spec.ts | 21 +-- packages/boba/bundler/bundler.sh | 2 +- packages/boba/bundler/src/BundlerConfig.ts | 18 +- packages/boba/bundler/src/Config.ts | 3 + packages/boba/bundler/src/runBundler.ts | 6 +- packages/boba/bundler_sdk/src/PaymasterAPI.ts | 9 +- .../src/components/PulseBadge/index.tsx | 61 +++++++ .../src/components/pulse/PulsingBadge.js | 155 ------------------ .../src/containers/bridge/Bridge.styles.js | 1 - .../boba/gateway/src/containers/home/Home.js | 2 +- .../src/containers/wallet/token/Token.js | 8 +- packages/boba/gateway/src/themes/dark.ts | 6 + packages/boba/gateway/src/themes/light.ts | 6 + ...9c8FF8F0B6a0763a3030540c21aFC721A9148.json | 2 +- yarn.lock | 16 ++ 18 files changed, 145 insertions(+), 204 deletions(-) create mode 100644 packages/boba/gateway/src/components/PulseBadge/index.tsx delete mode 100644 packages/boba/gateway/src/components/pulse/PulsingBadge.js diff --git a/integration-tests/package.json b/integration-tests/package.json index 6b1f5f2277..a2a02a03e7 100644 --- a/integration-tests/package.json +++ b/integration-tests/package.json @@ -22,8 +22,8 @@ "@boba/accountabstraction": "1.0.0", "@boba/api": "0.0.1", "@boba/contracts": "0.0.1", - "@bobanetwork/bundler_sdk": "*", "@eth-optimism/contracts": "^0.5.11", + "@bobanetwork/bundler_sdk": "file:../packages/boba/bundler_sdk", "@eth-optimism/core-utils": "0.8.1", "@eth-optimism/sdk": "1.0.1", "@ethersproject/abstract-provider": "^5.5.0", diff --git a/integration-tests/test/alt-l2/boba_aa_alt_fee_token.spec.ts b/integration-tests/test/alt-l2/boba_aa_alt_fee_token.spec.ts index 1990f0a9fa..f1a669a22a 100644 --- a/integration-tests/test/alt-l2/boba_aa_alt_fee_token.spec.ts +++ b/integration-tests/test/alt-l2/boba_aa_alt_fee_token.spec.ts @@ -11,7 +11,7 @@ import { OptimismEnv } from './shared/env' import { hexConcat, hexZeroPad, parseEther } from 'ethers/lib/utils' import { predeploys } from '@eth-optimism/contracts' // use local sdk -import { SimpleAccountAPI } from '@bobanetwork/bundler_sdk' +import { PaymasterAPI, SimpleAccountAPI } from "@bobanetwork/bundler_sdk"; import SimpleAccountJson from '@boba/accountabstraction/artifacts/contracts/samples/SimpleAccount.sol/SimpleAccount.json' import SimpleAccountFactoryJson from '@boba/accountabstraction/artifacts/contracts/samples/SimpleAccountFactory.sol/SimpleAccountFactory.json' import L2StandardERC20Json from '@eth-optimism/contracts/artifacts/contracts/standards/L2StandardERC20.sol/L2StandardERC20.json' @@ -153,17 +153,15 @@ describe('AA Alt-L1 Alt Token as Paymaster Fee Test\n', async () => { }) it('should be able to submit a userOp including the paymaster to the bundler and trigger tx', async () => { - const op = await accountAPI.createUnsignedUserOp({ + + accountAPI.paymasterAPI = new PaymasterAPI({ + paymasterAndData: GPODepositPaymaster.address, + }) + signedOp = await accountAPI.createSignedUserOp({ target: recipient.address, data: recipient.interface.encodeFunctionData('something', ['hello']), }) - - op.paymasterAndData = GPODepositPaymaster.address - op.preVerificationGas = await accountAPI.getPreVerificationGas(op) - - signedOp = await accountAPI.signUserOp(op) - const requestId = await bundlerProvider.sendUserOpToBundler(signedOp) const txid = await accountAPI.getUserOpReceipt(requestId) console.log('reqId', requestId, 'txid=', txid) diff --git a/integration-tests/test/eth-l2/boba_aa_fee_alt_token.spec.ts b/integration-tests/test/eth-l2/boba_aa_fee_alt_token.spec.ts index 6197f4cad5..2c6faeaf56 100644 --- a/integration-tests/test/eth-l2/boba_aa_fee_alt_token.spec.ts +++ b/integration-tests/test/eth-l2/boba_aa_fee_alt_token.spec.ts @@ -10,7 +10,7 @@ import { getFilteredLogIndex } from './shared/utils' import { OptimismEnv } from './shared/env' import { hexConcat, hexZeroPad, parseEther } from 'ethers/lib/utils' // use local sdk -import { SimpleAccountAPI } from '@bobanetwork/bundler_sdk' +import { PaymasterAPI, SimpleAccountAPI } from "@bobanetwork/bundler_sdk"; import SenderCreatorJson from '@boba/accountabstraction/artifacts/contracts/core/SenderCreator.sol/SenderCreator.json' import SimpleAccountFactoryJson from '@boba/accountabstraction/artifacts/contracts/samples/SimpleAccountFactory.sol/SimpleAccountFactory.json' import L2StandardERC20Json from '@eth-optimism/contracts/artifacts/contracts/standards/L2StandardERC20.sol/L2StandardERC20.json' @@ -210,17 +210,16 @@ describe('AA Alt Fee Token Test\n', async () => { ) it('should be able to submit a userOp including the paymaster to the bundler and trigger tx', async () => { - const op = await accountAPI.createUnsignedUserOp({ + accountAPI.paymasterAPI = new PaymasterAPI({ + paymasterAndData: hexConcat([ + ManualDepositPaymaster.address, + hexZeroPad(L2ERC20Token.address, 20), + ]), + }) + signedOp = await accountAPI.createSignedUserOp({ target: recipient.address, data: recipient.interface.encodeFunctionData('something', ['hello']), }) - op.paymasterAndData = hexConcat([ - ManualDepositPaymaster.address, - hexZeroPad(L2ERC20Token.address, 20), - ]) - op.preVerificationGas = await accountAPI.getPreVerificationGas(op) - - signedOp = await accountAPI.signUserOp(op) const requestId = await bundlerProvider.sendUserOpToBundler(signedOp) const txid = await accountAPI.getUserOpReceipt(requestId) diff --git a/integration-tests/test/eth-l2/boba_aa_fee_boba.spec.ts b/integration-tests/test/eth-l2/boba_aa_fee_boba.spec.ts index a8febbf16d..19071b4891 100644 --- a/integration-tests/test/eth-l2/boba_aa_fee_boba.spec.ts +++ b/integration-tests/test/eth-l2/boba_aa_fee_boba.spec.ts @@ -10,8 +10,7 @@ import { getFilteredLogIndex } from './shared/utils' import { OptimismEnv } from './shared/env' import { hexConcat, hexZeroPad, parseEther } from 'ethers/lib/utils' // use local sdk -import { SimpleAccountAPI } from '@bobanetwork/bundler_sdk' -import SenderCreatorJson from '@boba/accountabstraction/artifacts/contracts/core/SenderCreator.sol/SenderCreator.json' +import { PaymasterAPI, SimpleAccountAPI } from '@bobanetwork/bundler_sdk' import SimpleAccountFactoryJson from '@boba/accountabstraction/artifacts/contracts/samples/SimpleAccountFactory.sol/SimpleAccountFactory.json' import MockFeedRegistryJson from '@boba/accountabstraction/artifacts/contracts/test/mocks/MockFeedRegistry.sol/MockFeedRegistry.json' import L2GovernanceERC20Json from '@boba/contracts/artifacts/contracts/standards/L2GovernanceERC20.sol/L2GovernanceERC20.json' @@ -193,20 +192,18 @@ describe('AA Boba as Fee token Test\n', async () => { } ) it('should be able to submit a userOp including the paymaster to the bundler and trigger tx', async () => { - const op = await accountAPI.createUnsignedUserOp({ + accountAPI.paymasterAPI = new PaymasterAPI({ + paymasterAndData: hexConcat([ + BobaDepositPaymaster.address, + hexZeroPad(L2BOBAToken.address, 20), + ]) + }) + + signedOp = await accountAPI.createSignedUserOp({ target: recipient.address, data: recipient.interface.encodeFunctionData('something', ['hello']), }) - // TODO: check why paymasterAndData does not work when added to the walletAPI - op.paymasterAndData = hexConcat([ - BobaDepositPaymaster.address, - hexZeroPad(L2BOBAToken.address, 20), - ]) - op.preVerificationGas = await accountAPI.getPreVerificationGas(op) - - signedOp = await accountAPI.signUserOp(op) - const requestId = await bundlerProvider.sendUserOpToBundler(signedOp) const txid = await accountAPI.getUserOpReceipt(requestId) console.log('reqId', requestId, 'txid=', txid) diff --git a/packages/boba/bundler/bundler.sh b/packages/boba/bundler/bundler.sh index cbc6a08233..6ffdac2cff 100644 --- a/packages/boba/bundler/bundler.sh +++ b/packages/boba/bundler/bundler.sh @@ -1,4 +1,4 @@ #!/bin/sh set -e -node --trace-warnings --no-deprecation bundler.js --minBalance $MIN_BALANCE --mnemonic $MNEMONIC_OR_PK --network $L2_NODE_WEB3_URL --beneficiary $BENEFICIARY --addressManager $ADDRESS_MANAGER_ADDRESS --l1NodeWeb3Url $L1_NODE_WEB3_URL --maxBundleGas $MAX_BUNDLE_GAS --unsafe $UNSAFE +node --trace-warnings --no-deprecation bundler.js --minBalance $MIN_BALANCE --mnemonic $MNEMONIC_OR_PK --network $L2_NODE_WEB3_URL --beneficiary $BENEFICIARY --addressManager $ADDRESS_MANAGER_ADDRESS --l1NodeWeb3Url $L1_NODE_WEB3_URL --maxBundleGas $MAX_BUNDLE_GAS --unsafe $UNSAFE --minStake 0.2 --minUnstakeDelay 86400 diff --git a/packages/boba/bundler/src/BundlerConfig.ts b/packages/boba/bundler/src/BundlerConfig.ts index e89cf2ec85..8b5f070cab 100644 --- a/packages/boba/bundler/src/BundlerConfig.ts +++ b/packages/boba/bundler/src/BundlerConfig.ts @@ -3,7 +3,7 @@ import ow from 'ow' export interface BundlerConfig { beneficiary: string - entryPoint: string + entryPoint?: string entryPointWrapper?: string gasFactor: string minBalance: string @@ -29,7 +29,7 @@ export interface BundlerConfig { // TODO: implement merging config (args -> config.js -> default) and runtime shape validation export const BundlerConfigShape = { beneficiary: ow.string, - entryPoint: ow.string, + entryPoint: ow.optional.string, entryPointWrapper: ow.optional.string, gasFactor: ow.string, minBalance: ow.string, @@ -52,18 +52,18 @@ export const BundlerConfigShape = { logsChunkSize: ow.optional.number, } -// TODO: consider if we want any default fields at all -// TODO: implement merging config (args -> config.js -> default) and runtime shape validation +// Defaults taken from eth-infinitism repo export const bundlerConfigDefault: Partial = { port: '3000', - entryPoint: '0x1306b01bC3e4AD202612D3843387e94737673F53', + entryPoint: '0xa6e2cbb294d3b84e7900daf0052ffe26bb1328ff', unsafe: false, conditionalRpc: false, - minStake: '1', - minUnstakeDelay: 60, - autoBundleInterval: 1, - autoBundleMempoolSize: 1, + minStake: '0.0001', // testnet default + minUnstakeDelay: 5 * 60, // in seconds, testnet default (5 min) + autoBundleInterval: 3, + autoBundleMempoolSize: 10, enableDebugMethods: false, + gasFactor: '1', l2Offset: 0, logsChunkSize: 5000, } diff --git a/packages/boba/bundler/src/Config.ts b/packages/boba/bundler/src/Config.ts index 088ea97c83..8e6f1b643a 100644 --- a/packages/boba/bundler/src/Config.ts +++ b/packages/boba/bundler/src/Config.ts @@ -16,6 +16,9 @@ function getCommandLineParams (programOpts: any): Partial { } console.log(params['maxBundleGas']) params['maxBundleGas'] = parseInt(params['maxBundleGas'], 10) + params['minUnstakeDelay'] = parseInt(params['minUnstakeDelay'], 10) + params['autoBundleInterval'] = parseInt(params['autoBundleInterval'], 10) + params['autoBundleMempoolSize'] = parseInt(params['autoBundleMempoolSize'], 10) return params as BundlerConfig } diff --git a/packages/boba/bundler/src/runBundler.ts b/packages/boba/bundler/src/runBundler.ts index 13ee3b94fd..cfcc55df2b 100644 --- a/packages/boba/bundler/src/runBundler.ts +++ b/packages/boba/bundler/src/runBundler.ts @@ -119,7 +119,11 @@ export async function runBundler( .option('--addressManager ', 'address of the Address Manager', '') .option('--l1NodeWeb3Url ', 'L1 network url for Address Manager', '') .option('--maxBundleGas ', 'Max Bundle Gas available to use', '5000000') - .option('--enableDebugMethods', 'debug_* methods available', false) + .option('--enableDebugMethods ', 'debug_* methods available', false) + .option('--minStake ', 'Min stake for Entrypoint', '0.0001') + .option('--minUnstakeDelay ', 'Minimum unstake delay in seconds', '300') + .option('--autoBundleInterval ', 'Auto Bundle interval', '3') + .option('--autoBundleMempoolSize ', 'Auto Bundle Mempool Size', '10') .option('--l2Offset ', 'l2 Offset to start from') .option('--logsChunkSize ', 'eth_getLogs range supported by network') diff --git a/packages/boba/bundler_sdk/src/PaymasterAPI.ts b/packages/boba/bundler_sdk/src/PaymasterAPI.ts index e9152cd527..c8920626a2 100644 --- a/packages/boba/bundler_sdk/src/PaymasterAPI.ts +++ b/packages/boba/bundler_sdk/src/PaymasterAPI.ts @@ -1,9 +1,16 @@ import { UserOperationStruct } from '@boba/accountabstraction' +import { hexConcat, hexZeroPad } from 'ethers/lib/utils' + +export interface IPaymasterAPIConfig { + paymasterAndData?: string +} /** * an API to external a UserOperation with paymaster info */ export class PaymasterAPI { + constructor(private config?: IPaymasterAPIConfig) {} + /** * @param userOp a partially-filled UserOperation (without signature and paymasterAndData * note that the "preVerificationGas" is incomplete: it can't account for the @@ -11,6 +18,6 @@ export class PaymasterAPI { * @returns the value to put into the PaymasterAndData, undefined to leave it empty */ async getPaymasterAndData (userOp: Partial): Promise { - return '0x' + return this.config.paymasterAndData ?? '0x' } } diff --git a/packages/boba/gateway/src/components/PulseBadge/index.tsx b/packages/boba/gateway/src/components/PulseBadge/index.tsx new file mode 100644 index 0000000000..022a113bca --- /dev/null +++ b/packages/boba/gateway/src/components/PulseBadge/index.tsx @@ -0,0 +1,61 @@ +import React, { ReactNode } from 'react' +import styled from 'styled-components' + +type VariantType = 'info' | 'success' | 'danger' | 'warning' + +const Badge = styled.span<{ variant: VariantType }>(({ theme, variant }) => ({ + display: 'inline-block', + color: `${theme.colors[variant]}`, + borderRadius: '100%', + margin: '0 10px', + border: `1px solid ${theme.colors[variant]}`, +})) + +const Circle = styled.span<{ variant: VariantType }>(({ theme, variant }) => ({ + margin: 5, + display: 'block', + width: 8, + height: 8, + borderRadius: '50%', + backgroundColor: `${theme.colors[variant]}`, + boxShadow: `0 0 0 ${theme.colors[variant]}`, + animation: `pulsing 1500ms ease-in-out infinite`, + '@keyframes pulsing': { + '0%': { + boxShadow: `0 0 0 0 ${theme.colors[variant]}`, + }, + '70%': { + boxShadow: `0 0 0 4px ${theme.colors[variant]}`, + }, + '100%': { + boxShadow: `0 0 0 0 ${theme.colors[variant]}`, + }, + }, +})) + +const PulseContainer = styled.span` + display: flex; + justify-content: center; + align-items: center; +` + +interface PulseBadgeProps { + children: ReactNode + variant: VariantType +} + +export const PulseBadge: React.FC = ({ + children, + variant = 'info', +}) => { + return ( + + + + + {children} + + ) +} + +export default PulseBadge diff --git a/packages/boba/gateway/src/components/pulse/PulsingBadge.js b/packages/boba/gateway/src/components/pulse/PulsingBadge.js deleted file mode 100644 index d4c7645ead..0000000000 --- a/packages/boba/gateway/src/components/pulse/PulsingBadge.js +++ /dev/null @@ -1,155 +0,0 @@ -import React from "react" - -import { makeStyles } from '@mui/styles' -import { red, lightBlue, yellow, green } from '@mui/material/colors' - -import clsx from "clsx" - -const warningColor = yellow[200] - -const useStyles = makeStyles(theme => ({ - container: { - position: "relative", - display: "inline-block" - }, - badge: { - display: "flex", - direction: "row", - alignItems: "center", - justifyContent: "center", - paddingLeft: '5px' - }, - dangerBadge: { - color: red[500] - }, - warningBadge: { - color: warningColor - }, - infoBadge: { - color: lightBlue[500] - }, - successBadge: { - color: green[500] - }, - badgeBorder: { - borderRadius: theme.shape.borderRadius + 15 - }, - dangerBadgeBorder: { - border: `1px solid ${red[500]}` - }, - warningBadgeBorder: { - border: `1px solid ${warningColor}` - }, - infoBadgeBorder: { - border: `1px solid ${lightBlue[500]}` - }, - successBadgeBorder: { - border: `1px solid ${green[500]}` - }, - text: { - marginRight: 5 - }, - circle: { - margin: 5, - width: 8, - height: 8, - borderRadius: "50%" - }, - warningCircle: { - backgroundColor: warningColor, - boxShadow: `0 0 0 ${warningColor}`, - animation: `$pulsing-warning 1500ms ${ - theme.transitions.easing.easeOut - } infinite` - }, - dangerCircle: { - backgroundColor: red[500], - boxShadow: `0 0 0 ${red[500]}`, - animation: `$pulsing-danger 1500ms ${ - theme.transitions.easing.easeOut - } infinite` - }, - infoCircle: { - backgroundColor: lightBlue[500], - boxShadow: `0 0 0 ${lightBlue[500]}`, - animation: `$pulsing-info 1500ms ${ - theme.transitions.easing.easeOut - } infinite` - }, - successCircle: { - backgroundColor: green[500], - boxShadow: `0 0 0 ${green[500]}`, - animation: `$pulsing-success 1500ms ${ - theme.transitions.easing.easeOut - } infinite` - }, - - "@keyframes pulsing-danger": { - "0%": { - boxShadow: `0 0 0 0 ${red[500]}` - }, - "70%": { - boxShadow: `0 0 0 4px ${red[500]}` - }, - "100%": { - boxShadow: `0 0 0 0 ${red[500]}` - } - }, - "@keyframes pulsing-warning": { - "0%": { - boxShadow: `0 0 0 0 ${warningColor}` - }, - "70%": { - boxShadow: `0 0 0 4px ${warningColor}` - }, - "100%": { - boxShadow: `0 0 0 0 ${warningColor}` - } - }, - - "@keyframes pulsing-info": { - "0%": { - boxShadow: `0 0 0 0 ${lightBlue[500]}` - }, - "70%": { - boxShadow: `0 0 0 4px ${lightBlue[500]}` - }, - "100%": { - boxShadow: `0 0 0 0 ${lightBlue[500]}` - } - }, - "@keyframes pulsing-success": { - "0%": { - boxShadow: `0 0 0 0 ${green[500]}` - }, - "70%": { - boxShadow: `0 0 0 4px ${green[500]}` - }, - "100%": { - boxShadow: `0 0 0 0 ${green[500]}` - } - } -})); - -const PulsingBadge = ({ - children, - withBorder = false, - badgeLabel = "", - variant = "info" -}) => { - const classes = useStyles(); - return ( - - - - - {children} - - ); -}; -export default PulsingBadge; diff --git a/packages/boba/gateway/src/containers/bridge/Bridge.styles.js b/packages/boba/gateway/src/containers/bridge/Bridge.styles.js index b45141beec..e79ed8331d 100644 --- a/packages/boba/gateway/src/containers/bridge/Bridge.styles.js +++ b/packages/boba/gateway/src/containers/bridge/Bridge.styles.js @@ -1,7 +1,6 @@ import styled from '@emotion/styled' import {Box, Typography} from "@mui/material" import bobaGlassIcon from 'images/boba2/boba_glass.svg' -import bobaBridgeBg from 'images/boba2/bridge_bg.svg' export const PageContainer = styled(Box)(({ theme }) => ({ margin: '20px auto', marginBottom: theme.palette.spacing.toFooter, diff --git a/packages/boba/gateway/src/containers/home/Home.js b/packages/boba/gateway/src/containers/home/Home.js index e7f7d12e54..1c3595d788 100644 --- a/packages/boba/gateway/src/containers/home/Home.js +++ b/packages/boba/gateway/src/containers/home/Home.js @@ -88,7 +88,7 @@ import Alert from 'components/alert/Alert' import LayerSwitcher from 'components/mainMenu/layerSwitcher/LayerSwitcher' /******** UTILS ********/ -import { APP_STATUS, BOBABEAM_STATUS, POLL_INTERVAL } from 'util/constant' +import { APP_STATUS, POLL_INTERVAL } from 'util/constant' import useInterval from 'hooks/useInterval' import useGoogleAnalytics from 'hooks/useGoogleAnalytics' import useNetwork from 'hooks/useNetwork' diff --git a/packages/boba/gateway/src/containers/wallet/token/Token.js b/packages/boba/gateway/src/containers/wallet/token/Token.js index 9113cfcc78..0825f7930b 100644 --- a/packages/boba/gateway/src/containers/wallet/token/Token.js +++ b/packages/boba/gateway/src/containers/wallet/token/Token.js @@ -26,7 +26,7 @@ import { tokenTableHeads } from './token.tableHeads' import ListToken from 'components/listToken/listToken' import Button from 'components/button/Button' import Link from 'components/icons/LinkIcon' -import Pulse from 'components/pulse/PulsingBadge' +import PulseBadge from 'components/PulseBadge' import { isEqual,orderBy } from 'util/lodash'; @@ -247,9 +247,9 @@ function TokenPage({ navigate('/history') }} > - Bridge in progress:{' '} - Click for detailed status - + + Bridge in progress: Click for detailed status + )} diff --git a/packages/boba/gateway/src/themes/dark.ts b/packages/boba/gateway/src/themes/dark.ts index 013cf0b490..6398f3abb6 100644 --- a/packages/boba/gateway/src/themes/dark.ts +++ b/packages/boba/gateway/src/themes/dark.ts @@ -7,6 +7,12 @@ const dark = { screen, warning: 'yellow', border: 'solid 1px #2d2f3a', + colors: { + danger: 'red', + success: 'green', + info: 'blue', + warning: 'yellow', + }, bg: { glassy: 'rgba(255, 255, 255, 0.04)', secondary: 'rgba(255, 255, 255, 0.14)', diff --git a/packages/boba/gateway/src/themes/light.ts b/packages/boba/gateway/src/themes/light.ts index 6b14eafca3..14f3bc959f 100644 --- a/packages/boba/gateway/src/themes/light.ts +++ b/packages/boba/gateway/src/themes/light.ts @@ -7,6 +7,12 @@ const light = { screen, warning: 'yellow', border: 'solid 1px rgba(0, 0, 0, 0.12)', + colors: { + danger: 'red', + success: 'green', + info: 'blue', + warning: 'yellow', + }, bg: { glassy: 'rgba(0,0,0, 0.09)', secondary: 'rgba(0, 0, 0, 0.08)', diff --git a/packages/boba/register/addresses/addressesGoerli_0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148.json b/packages/boba/register/addresses/addressesGoerli_0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148.json index 0475727d67..97841983d7 100644 --- a/packages/boba/register/addresses/addressesGoerli_0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148.json +++ b/packages/boba/register/addresses/addressesGoerli_0x6FF9c8FF8F0B6a0763a3030540c21aFC721A9148.json @@ -69,5 +69,5 @@ "AggregatorHCHepler": "0x45c5dB3F5AC1579DD43404e47562641b61A6AC77", "Proxy__ETHUSD_AggregatorHC": "0x9e28dE704435871af476460B456Ec741fE5DE24f", "ETHUSD_AggregatorHC": "0x300f35972189d5FbEe140E552Dac80df85E6521C", - "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826", + "L2StandardTokenFactory": "0xD2ae16D8c66ac7bc1Cf3c9e5d6bfE5f76BeDb826" } diff --git a/yarn.lock b/yarn.lock index f256b743c8..c647f6f30d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1362,6 +1362,22 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" +"@bobanetwork/bundler_sdk@file:packages/boba/bundler_sdk": + version "0.3.1" + dependencies: + "@boba/accountabstraction" "^1.0.0" + "@boba/bundler_utils" "^0.2.3" + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/providers" "^5.7.0" + "@types/debug" "^4.1.7" + debug "^4.3.4" + ethers "^5.7.0" + hardhat-gas-reporter "^1.0.8" + "@chainlink/contracts@0.3.1": version "0.3.1" resolved "https://registry.npmjs.org/@chainlink/contracts/-/contracts-0.3.1.tgz"