Commit 77bd8dfc authored by Kelvin Fichter's avatar Kelvin Fichter

feat(sdk): refactor into single messenger class

parent ceea12f3
...@@ -45,7 +45,7 @@ export class DAIBridgeAdapter extends StandardBridgeAdapter { ...@@ -45,7 +45,7 @@ export class DAIBridgeAdapter extends StandardBridgeAdapter {
type: 'function', type: 'function',
}, },
], ],
this.provider.l1Provider this.messenger.l1Provider
) )
const allowedL1Token = await l1Bridge.l1Token() const allowedL1Token = await l1Bridge.l1Token()
......
...@@ -10,7 +10,7 @@ import { hexStringEquals } from '@eth-optimism/core-utils' ...@@ -10,7 +10,7 @@ import { hexStringEquals } from '@eth-optimism/core-utils'
import { import {
IBridgeAdapter, IBridgeAdapter,
ICrossChainProvider, ICrossChainMessenger,
NumberLike, NumberLike,
AddressLike, AddressLike,
TokenBridgeMessage, TokenBridgeMessage,
...@@ -22,7 +22,7 @@ import { toAddress } from '../utils' ...@@ -22,7 +22,7 @@ import { toAddress } from '../utils'
* Bridge adapter for any token bridge that uses the standard token bridge interface. * Bridge adapter for any token bridge that uses the standard token bridge interface.
*/ */
export class StandardBridgeAdapter implements IBridgeAdapter { export class StandardBridgeAdapter implements IBridgeAdapter {
public provider: ICrossChainProvider public messenger: ICrossChainMessenger
public l1Bridge: Contract public l1Bridge: Contract
public l2Bridge: Contract public l2Bridge: Contract
...@@ -30,25 +30,25 @@ export class StandardBridgeAdapter implements IBridgeAdapter { ...@@ -30,25 +30,25 @@ export class StandardBridgeAdapter implements IBridgeAdapter {
* Creates a StandardBridgeAdapter instance. * Creates a StandardBridgeAdapter instance.
* *
* @param opts Options for the adapter. * @param opts Options for the adapter.
* @param opts.provider Provider used to make queries related to cross-chain interactions. * @param opts.messenger Provider used to make queries related to cross-chain interactions.
* @param opts.l1Bridge L1 bridge contract. * @param opts.l1Bridge L1 bridge contract.
* @param opts.l2Bridge L2 bridge contract. * @param opts.l2Bridge L2 bridge contract.
*/ */
constructor(opts: { constructor(opts: {
provider: ICrossChainProvider messenger: ICrossChainMessenger
l1Bridge: AddressLike l1Bridge: AddressLike
l2Bridge: AddressLike l2Bridge: AddressLike
}) { }) {
this.provider = opts.provider this.messenger = opts.messenger
this.l1Bridge = new Contract( this.l1Bridge = new Contract(
toAddress(opts.l1Bridge), toAddress(opts.l1Bridge),
getContractInterface('L1StandardBridge'), getContractInterface('L1StandardBridge'),
this.provider.l1Provider this.messenger.l1Provider
) )
this.l2Bridge = new Contract( this.l2Bridge = new Contract(
toAddress(opts.l2Bridge), toAddress(opts.l2Bridge),
getContractInterface('IL2ERC20Bridge'), getContractInterface('IL2ERC20Bridge'),
this.provider.l2Provider this.messenger.l2Provider
) )
} }
...@@ -167,7 +167,7 @@ export class StandardBridgeAdapter implements IBridgeAdapter { ...@@ -167,7 +167,7 @@ export class StandardBridgeAdapter implements IBridgeAdapter {
const contract = new Contract( const contract = new Contract(
toAddress(l2Token), toAddress(l2Token),
getContractInterface('L2StandardERC20'), getContractInterface('L2StandardERC20'),
this.provider.l2Provider this.messenger.l2Provider
) )
// Don't support ETH deposits or withdrawals via this bridge. // Don't support ETH deposits or withdrawals via this bridge.
...@@ -287,7 +287,7 @@ export class StandardBridgeAdapter implements IBridgeAdapter { ...@@ -287,7 +287,7 @@ export class StandardBridgeAdapter implements IBridgeAdapter {
overrides?: Overrides overrides?: Overrides
} }
): Promise<BigNumber> => { ): Promise<BigNumber> => {
return this.provider.l1Provider.estimateGas( return this.messenger.l1Provider.estimateGas(
await this.populateTransaction.deposit(l1Token, l2Token, amount, opts) await this.populateTransaction.deposit(l1Token, l2Token, amount, opts)
) )
}, },
...@@ -300,7 +300,7 @@ export class StandardBridgeAdapter implements IBridgeAdapter { ...@@ -300,7 +300,7 @@ export class StandardBridgeAdapter implements IBridgeAdapter {
overrides?: Overrides overrides?: Overrides
} }
): Promise<BigNumber> => { ): Promise<BigNumber> => {
return this.provider.l2Provider.estimateGas( return this.messenger.l2Provider.estimateGas(
await this.populateTransaction.withdraw(l1Token, l2Token, amount, opts) await this.populateTransaction.withdraw(l1Token, l2Token, amount, opts)
) )
}, },
......
This diff is collapsed.
This diff is collapsed.
export * from './interfaces' export * from './interfaces'
export * from './utils' export * from './utils'
export * from './cross-chain-provider'
export * from './cross-chain-messenger' export * from './cross-chain-messenger'
export * from './adapters' export * from './adapters'
...@@ -11,7 +11,7 @@ import { ...@@ -11,7 +11,7 @@ import {
MessageDirection, MessageDirection,
TokenBridgeMessage, TokenBridgeMessage,
} from './types' } from './types'
import { ICrossChainProvider } from './cross-chain-provider' import { ICrossChainMessenger } from './cross-chain-messenger'
/** /**
* Represents an adapter for an L1<>L2 token bridge. Each custom bridge currently needs its own * Represents an adapter for an L1<>L2 token bridge. Each custom bridge currently needs its own
...@@ -21,7 +21,7 @@ export interface IBridgeAdapter { ...@@ -21,7 +21,7 @@ export interface IBridgeAdapter {
/** /**
* Provider used to make queries related to cross-chain interactions. * Provider used to make queries related to cross-chain interactions.
*/ */
provider: ICrossChainProvider messenger: ICrossChainMessenger
/** /**
* L1 bridge contract. * L1 bridge contract.
......
This diff is collapsed.
export * from './bridge-adapter' export * from './bridge-adapter'
export * from './cross-chain-messenger' export * from './cross-chain-messenger'
export * from './cross-chain-provider'
export * from './l2-provider' export * from './l2-provider'
export * from './types' export * from './types'
...@@ -6,7 +6,7 @@ import { ...@@ -6,7 +6,7 @@ import {
import { Signer } from '@ethersproject/abstract-signer' import { Signer } from '@ethersproject/abstract-signer'
import { Contract, BigNumber } from 'ethers' import { Contract, BigNumber } from 'ethers'
import { ICrossChainProvider } from './cross-chain-provider' import { ICrossChainMessenger } from './cross-chain-messenger'
import { IBridgeAdapter } from './bridge-adapter' import { IBridgeAdapter } from './bridge-adapter'
/** /**
...@@ -76,7 +76,7 @@ export interface OEContractsLike { ...@@ -76,7 +76,7 @@ export interface OEContractsLike {
export interface BridgeAdapterData { export interface BridgeAdapterData {
[name: string]: { [name: string]: {
Adapter: new (opts: { Adapter: new (opts: {
provider: ICrossChainProvider messenger: ICrossChainMessenger
l1Bridge: AddressLike l1Bridge: AddressLike
l2Bridge: AddressLike l2Bridge: AddressLike
}) => IBridgeAdapter }) => IBridgeAdapter
......
...@@ -5,27 +5,32 @@ import { ...@@ -5,27 +5,32 @@ import {
TransactionReceipt, TransactionReceipt,
TransactionResponse, TransactionResponse,
} from '@ethersproject/abstract-provider' } from '@ethersproject/abstract-provider'
import { Signer } from '@ethersproject/abstract-signer'
import { ethers, BigNumber } from 'ethers' import { ethers, BigNumber } from 'ethers'
import { import {
ProviderLike, SignerOrProviderLike,
TransactionLike, TransactionLike,
NumberLike, NumberLike,
AddressLike, AddressLike,
} from '../interfaces' } from '../interfaces'
/** /**
* Converts a ProviderLike into a provider. Assumes that if the ProviderLike is a string then * Converts a SignerOrProviderLike into a Signer or a Provider. Assumes that if the input is a
* it is a JSON-RPC url. * string then it is a JSON-RPC url.
* *
* @param provider ProviderLike to turn into a provider. * @param signerOrProvider SignerOrProviderLike to turn into a Signer or Provider.
* @returns ProviderLike as a provider. * @returns Input as a Signer or Provider.
*/ */
export const toProvider = (provider: ProviderLike): Provider => { export const toSignerOrProvider = (
if (typeof provider === 'string') { signerOrProvider: SignerOrProviderLike
return new ethers.providers.JsonRpcProvider(provider) ): Signer | Provider => {
} else if (Provider.isProvider(provider)) { if (typeof signerOrProvider === 'string') {
return provider return new ethers.providers.JsonRpcProvider(signerOrProvider)
} else if (Provider.isProvider(signerOrProvider)) {
return signerOrProvider as Provider
} else if (Signer.isSigner(signerOrProvider)) {
return signerOrProvider as Signer
} else { } else {
throw new Error('Invalid provider') throw new Error('Invalid provider')
} }
......
...@@ -12,7 +12,7 @@ import { ...@@ -12,7 +12,7 @@ import {
AddressLike, AddressLike,
BridgeAdapters, BridgeAdapters,
BridgeAdapterData, BridgeAdapterData,
ICrossChainProvider, ICrossChainMessenger,
} from '../interfaces' } from '../interfaces'
import { import {
StandardBridgeAdapter, StandardBridgeAdapter,
...@@ -291,14 +291,14 @@ export const getAllOEContracts = ( ...@@ -291,14 +291,14 @@ export const getAllOEContracts = (
* Gets a series of bridge adapters for the given L1 chain ID. * Gets a series of bridge adapters for the given L1 chain ID.
* *
* @param l1ChainId L1 chain ID for the L1 network where the custom bridges are deployed. * @param l1ChainId L1 chain ID for the L1 network where the custom bridges are deployed.
* @param provider Cross chain provider to connect to the bridge adapters * @param messenger Cross chain messenger to connect to the bridge adapters
* @param opts Additional options for connecting to the custom bridges. * @param opts Additional options for connecting to the custom bridges.
* @param opts.overrides Custom bridge adapters. * @param opts.overrides Custom bridge adapters.
* @returns An object containing all bridge adapters * @returns An object containing all bridge adapters
*/ */
export const getBridgeAdapters = ( export const getBridgeAdapters = (
l1ChainId: number, l1ChainId: number,
provider: ICrossChainProvider, messenger: ICrossChainMessenger,
opts?: { opts?: {
overrides?: BridgeAdapterData overrides?: BridgeAdapterData
} }
...@@ -309,7 +309,7 @@ export const getBridgeAdapters = ( ...@@ -309,7 +309,7 @@ export const getBridgeAdapters = (
...(opts?.overrides || {}), ...(opts?.overrides || {}),
})) { })) {
adapters[bridgeName] = new bridgeData.Adapter({ adapters[bridgeName] = new bridgeData.Adapter({
provider, messenger,
l1Bridge: bridgeData.l1Bridge, l1Bridge: bridgeData.l1Bridge,
l2Bridge: bridgeData.l2Bridge, l2Bridge: bridgeData.l2Bridge,
}) })
......
This diff is collapsed.
...@@ -3,17 +3,17 @@ import { Contract } from 'ethers' ...@@ -3,17 +3,17 @@ import { Contract } from 'ethers'
import { ethers } from 'hardhat' import { ethers } from 'hardhat'
import { expect } from '../setup' import { expect } from '../setup'
import { toProvider, toTransactionHash } from '../../src' import { toSignerOrProvider, toTransactionHash } from '../../src'
describe('type coercion utils', () => { describe('type coercion utils', () => {
describe('toProvider', () => { describe('toSignerOrProvider', () => {
it('should convert a string to a JsonRpcProvider', () => { it('should convert a string to a JsonRpcProvider', () => {
const provider = toProvider('http://localhost:8545') const provider = toSignerOrProvider('http://localhost:8545')
expect(Provider.isProvider(provider)).to.be.true expect(Provider.isProvider(provider)).to.be.true
}) })
it('should not do anything with a provider', () => { it('should not do anything with a provider', () => {
const provider = toProvider(ethers.provider) const provider = toSignerOrProvider(ethers.provider)
expect(provider).to.deep.equal(ethers.provider) expect(provider).to.deep.equal(ethers.provider)
}) })
}) })
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment