diff --git a/packages/protocol-utils-evm/src/endpoint/sdk.ts b/packages/protocol-utils-evm/src/endpoint/sdk.ts index 51f7c9fa1e..bb590075e5 100644 --- a/packages/protocol-utils-evm/src/endpoint/sdk.ts +++ b/packages/protocol-utils-evm/src/endpoint/sdk.ts @@ -1,11 +1,9 @@ import type { IEndpoint } from '@layerzerolabs/protocol-utils' import { formatEid, type Address, type OmniTransaction } from '@layerzerolabs/utils' import type { EndpointId } from '@layerzerolabs/lz-definitions' -import { ignoreZero, makeZeroAddress, omniContractToPoint, type OmniContract } from '@layerzerolabs/utils-evm' - -export class Endpoint implements IEndpoint { - constructor(public readonly contract: OmniContract) {} +import { ignoreZero, makeZeroAddress, OmniSDK } from '@layerzerolabs/utils-evm' +export class Endpoint extends OmniSDK implements IEndpoint { async getDefaultReceiveLibrary(eid: EndpointId): Promise { return ignoreZero(await this.contract.contract.defaultReceiveLibrary(eid)) } @@ -63,11 +61,4 @@ export class Endpoint implements IEndpoint { description: `Registering library ${lib}`, } } - - protected createTransaction(data: string): OmniTransaction { - return { - point: omniContractToPoint(this.contract), - data, - } - } } diff --git a/packages/protocol-utils-evm/src/uln302/sdk.ts b/packages/protocol-utils-evm/src/uln302/sdk.ts index 54928a94fe..24ab124df3 100644 --- a/packages/protocol-utils-evm/src/uln302/sdk.ts +++ b/packages/protocol-utils-evm/src/uln302/sdk.ts @@ -1,12 +1,10 @@ import type { EndpointId } from '@layerzerolabs/lz-definitions' import type { IUln302, Uln302ExecutorConfig, Uln302UlnConfig } from '@layerzerolabs/protocol-utils' import { Address, formatEid, type OmniTransaction } from '@layerzerolabs/utils' -import { omniContractToPoint, type OmniContract, makeZeroAddress } from '@layerzerolabs/utils-evm' +import { makeZeroAddress, OmniSDK } from '@layerzerolabs/utils-evm' import { Uln302ExecutorConfigSchema, Uln302UlnConfigInputSchema, Uln302UlnConfigSchema } from './schema' -export class Uln302 implements IUln302 { - constructor(public readonly contract: OmniContract) {} - +export class Uln302 extends OmniSDK implements IUln302 { async getUlnConfig(eid: EndpointId, address?: Address | null | undefined): Promise { const config = await this.contract.contract.getUlnConfig(makeZeroAddress(address), eid) @@ -51,11 +49,4 @@ export class Uln302 implements IUln302 { description: `Setting default ULN config for ${formatEid(eid)}: ${JSON.stringify(serializedConfig)}`, } } - - protected createTransaction(data: string): OmniTransaction { - return { - point: omniContractToPoint(this.contract), - data, - } - } } diff --git a/packages/ua-utils-evm/src/oapp/sdk.ts b/packages/ua-utils-evm/src/oapp/sdk.ts index 0d9a26a2ba..b7ebeea82f 100644 --- a/packages/ua-utils-evm/src/oapp/sdk.ts +++ b/packages/ua-utils-evm/src/oapp/sdk.ts @@ -1,8 +1,7 @@ import type { IOApp } from '@layerzerolabs/ua-utils' import type { Bytes32, Address, OmniTransaction } from '@layerzerolabs/utils' import { - omniContractToPoint, - OmniContract, + type OmniContract, ignoreZero, makeBytes32, areBytes32Equal, @@ -11,12 +10,15 @@ import { } from '@layerzerolabs/utils-evm' import type { EndpointId } from '@layerzerolabs/lz-definitions' import type { EndpointFactory, IEndpoint } from '@layerzerolabs/protocol-utils' +import { OmniSDK } from '@layerzerolabs/utils-evm' -export class OApp implements IOApp { +export class OApp extends OmniSDK implements IOApp { constructor( - public readonly contract: OmniContract, + contract: OmniContract, private readonly endpointFactory: EndpointFactory - ) {} + ) { + super(contract) + } async getEndpoint(): Promise { let address: string @@ -53,11 +55,4 @@ export class OApp implements IOApp { const data = this.contract.contract.interface.encodeFunctionData('setPeer', [eid, makeBytes32(address)]) return this.createTransaction(data) } - - protected createTransaction(data: string): OmniTransaction { - return { - point: omniContractToPoint(this.contract), - data, - } - } } diff --git a/packages/utils-evm/src/omnigraph/index.ts b/packages/utils-evm/src/omnigraph/index.ts index 01b288f654..911698dcd8 100644 --- a/packages/utils-evm/src/omnigraph/index.ts +++ b/packages/utils-evm/src/omnigraph/index.ts @@ -1,3 +1,4 @@ export * from './coordinates' export * from './format' +export * from './sdk' export * from './types' diff --git a/packages/utils-evm/src/omnigraph/sdk.ts b/packages/utils-evm/src/omnigraph/sdk.ts new file mode 100644 index 0000000000..6c669f0999 --- /dev/null +++ b/packages/utils-evm/src/omnigraph/sdk.ts @@ -0,0 +1,22 @@ +import { OmniPoint, OmniTransaction } from '@layerzerolabs/utils' +import { IOmniSDK, OmniContract } from './types' +import { omniContractToPoint } from './coordinates' + +/** + * Base class for all EVM SDKs, providing some common functionality + * to reduce the boilerplate + */ +export abstract class OmniSDK implements IOmniSDK { + constructor(public readonly contract: OmniContract) {} + + get point(): OmniPoint { + return omniContractToPoint(this.contract) + } + + protected createTransaction(data: string): OmniTransaction { + return { + point: this.point, + data, + } + } +} diff --git a/packages/utils-evm/src/omnigraph/types.ts b/packages/utils-evm/src/omnigraph/types.ts index b5950bf484..1edde4a17c 100644 --- a/packages/utils-evm/src/omnigraph/types.ts +++ b/packages/utils-evm/src/omnigraph/types.ts @@ -1,8 +1,15 @@ import type { Contract } from '@ethersproject/contracts' -import type { OmniPoint, WithEid } from '@layerzerolabs/utils' +import type { IOmniSDK as IOmniSDKAbstract, OmniPoint, WithEid } from '@layerzerolabs/utils' export type OmniContract = WithEid<{ contract: TContract }> export type OmniContractFactory = (point: OmniPoint) => OmniContract | Promise + +/** + * Base interface for all EVM SDKs, adding the EVM specific attributes + */ +export interface IOmniSDK extends IOmniSDKAbstract { + contract: OmniContract +}