From b777f4a19667a49cc177638325bbb25fda07916d Mon Sep 17 00:00:00 2001 From: Jan Nanista Date: Tue, 21 Nov 2023 11:18:04 -0800 Subject: [PATCH] feat: New version of ua-utils-evm with an example setPeer property --- packages/ua-utils-evm/.eslintignore | 2 + packages/ua-utils-evm/.gitignore | 3 ++ packages/ua-utils-evm/.mocharc.json | 5 +++ packages/ua-utils-evm/.prettierignore | 2 + packages/ua-utils-evm/README.md | 27 +++++++++++++ packages/ua-utils-evm/package.json | 49 +++++++++++++++++++++++ packages/ua-utils-evm/src/index.ts | 1 + packages/ua-utils-evm/src/oapp.ts | 14 +++++++ packages/ua-utils-evm/test/oapp.test.ts | 30 ++++++++++++++ packages/ua-utils-evm/tsconfig.build.json | 4 ++ packages/ua-utils-evm/tsconfig.json | 9 +++++ packages/ua-utils-evm/tsup.config.ts | 12 ++++++ 12 files changed, 158 insertions(+) create mode 100644 packages/ua-utils-evm/.eslintignore create mode 100644 packages/ua-utils-evm/.gitignore create mode 100644 packages/ua-utils-evm/.mocharc.json create mode 100644 packages/ua-utils-evm/.prettierignore create mode 100644 packages/ua-utils-evm/README.md create mode 100644 packages/ua-utils-evm/package.json create mode 100644 packages/ua-utils-evm/src/index.ts create mode 100644 packages/ua-utils-evm/src/oapp.ts create mode 100644 packages/ua-utils-evm/test/oapp.test.ts create mode 100644 packages/ua-utils-evm/tsconfig.build.json create mode 100644 packages/ua-utils-evm/tsconfig.json create mode 100644 packages/ua-utils-evm/tsup.config.ts diff --git a/packages/ua-utils-evm/.eslintignore b/packages/ua-utils-evm/.eslintignore new file mode 100644 index 000000000..db4c6d9b6 --- /dev/null +++ b/packages/ua-utils-evm/.eslintignore @@ -0,0 +1,2 @@ +dist +node_modules \ No newline at end of file diff --git a/packages/ua-utils-evm/.gitignore b/packages/ua-utils-evm/.gitignore new file mode 100644 index 000000000..803d4166c --- /dev/null +++ b/packages/ua-utils-evm/.gitignore @@ -0,0 +1,3 @@ +artifacts +cache +deployments \ No newline at end of file diff --git a/packages/ua-utils-evm/.mocharc.json b/packages/ua-utils-evm/.mocharc.json new file mode 100644 index 000000000..d4ee538e6 --- /dev/null +++ b/packages/ua-utils-evm/.mocharc.json @@ -0,0 +1,5 @@ +{ + "extensions": ["ts"], + "spec": ["**/*.test.*"], + "loader": "ts-node/esm" +} diff --git a/packages/ua-utils-evm/.prettierignore b/packages/ua-utils-evm/.prettierignore new file mode 100644 index 000000000..763301fc0 --- /dev/null +++ b/packages/ua-utils-evm/.prettierignore @@ -0,0 +1,2 @@ +dist/ +node_modules/ \ No newline at end of file diff --git a/packages/ua-utils-evm/README.md b/packages/ua-utils-evm/README.md new file mode 100644 index 000000000..309a5701f --- /dev/null +++ b/packages/ua-utils-evm/README.md @@ -0,0 +1,27 @@ +

+ + LayerZero + +

+ +

@layerzerolabs/ua-utils-evm

+ + +

+ + NPM Version + + Downloads + + NPM License +

+ +## Installation + +```bash +yarn add @layerzerolabs/ua-utils-evm + +pnpm add @layerzerolabs/ua-utils-evm + +npm install @layerzerolabs/ua-utils-evm +``` diff --git a/packages/ua-utils-evm/package.json b/packages/ua-utils-evm/package.json new file mode 100644 index 000000000..e70596212 --- /dev/null +++ b/packages/ua-utils-evm/package.json @@ -0,0 +1,49 @@ +{ + "name": "@layerzerolabs/ua-utils-evm", + "description": "Utilities for working with LayerZero EVM projects", + "version": "0.0.1", + "license": "MIT", + "private": true, + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "module": "./dist/index.mjs", + "exports": { + "types": "./dist/index.d.ts", + "require": "./dist/index.js", + "import": "./dist/index.mjs" + }, + "files": [ + "./dist/index.*" + ], + "scripts": { + "build": "npx tsup", + "clean": "rm -rf dist", + "dev": "npx tsup --watch", + "lint": "npx eslint '**/*.{js,ts,json}'", + "prebuild": "npx tsc --noEmit -p tsconfig.build.json", + "test": "mocha --parallel" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/LayerZero-Labs/lz-utils.git", + "directory": "packages/ua-utils-evm" + }, + "devDependencies": { + "@ethersproject/contracts": "5.7.0", + "@layerzerolabs/lz-definitions": "~1.5.58", + "@layerzerolabs/ua-utils": "~0.1.0", + "@types/mocha": "^10.0.1", + "@types/sinon": "^17.0.2", + "chai": "^4.3.10", + "mocha": "^10.2.0", + "sinon": "^17.0.1", + "ts-node": "^10.9.1", + "tsup": "~7.2.0", + "typescript": "^5.2.2" + }, + "peerDependencies": { + "@ethersproject/contracts": "5.7.0", + "@layerzerolabs/lz-definitions": "~1.5.58", + "@layerzerolabs/ua-utils": "~0.1.0" + } +} diff --git a/packages/ua-utils-evm/src/index.ts b/packages/ua-utils-evm/src/index.ts new file mode 100644 index 000000000..9e4b10a93 --- /dev/null +++ b/packages/ua-utils-evm/src/index.ts @@ -0,0 +1 @@ +export * from "./oapp" diff --git a/packages/ua-utils-evm/src/oapp.ts b/packages/ua-utils-evm/src/oapp.ts new file mode 100644 index 000000000..c424baf6f --- /dev/null +++ b/packages/ua-utils-evm/src/oapp.ts @@ -0,0 +1,14 @@ +import { Contract } from "@ethersproject/contracts" +import { GetPropertyValue, createProperty } from "@layerzerolabs/ua-utils" +import { EndpointId } from "@layerzerolabs/lz-definitions" + +type SetPeerConfigurableContext = [oapp: Contract, endpointId: EndpointId] + +type SetPeerConfigurableValue = string + +export const createSetPeerProperty = (desired: GetPropertyValue) => + createProperty({ + desired, + get: (oapp, endpointId) => oapp.peers(endpointId), + set: (oapp, endpointId, peer) => oapp.setPeer(endpointId, peer), + }) diff --git a/packages/ua-utils-evm/test/oapp.test.ts b/packages/ua-utils-evm/test/oapp.test.ts new file mode 100644 index 000000000..8fc3e4d94 --- /dev/null +++ b/packages/ua-utils-evm/test/oapp.test.ts @@ -0,0 +1,30 @@ +import { Contract } from "@ethersproject/contracts" +import { EndpointId } from "@layerzerolabs/lz-definitions" +import { expect } from "chai" +import { describe } from "mocha" +import sinon from "sinon" +import { createSetPeerProperty } from "../src/oapp" +import { isMisconfigured } from "@layerzerolabs/ua-utils" + +describe("oapp", () => { + describe("createSetPeerProperty", () => { + it("should check peers and return Misconfigured if they don't match", async () => { + const peers = sinon.stub().resolves("peer-not-set") + const setPeer = sinon.stub().resolves("okay") + const oapp = { peers, setPeer } as unknown as Contract + + const desired = (oapp: Contract, endpointId: EndpointId) => `peer-on-${endpointId}` + const configurable = createSetPeerProperty(desired) + const state = await configurable(oapp, EndpointId.AAVEGOTCHI_TESTNET) + + expect(isMisconfigured(state)).to.be.true + expect(state.value).to.eql("peer-not-set") + expect(state.desiredValue).to.eql(`peer-on-${EndpointId.AAVEGOTCHI_TESTNET}`) + + const result = await state.configure?.() + + expect(result).to.eql("okay") + expect(setPeer.calledOnceWith(EndpointId.AAVEGOTCHI_TESTNET, `peer-on-${EndpointId.AAVEGOTCHI_TESTNET}`)).to.be.true + }) + }) +}) diff --git a/packages/ua-utils-evm/tsconfig.build.json b/packages/ua-utils-evm/tsconfig.build.json new file mode 100644 index 000000000..1e8f7493d --- /dev/null +++ b/packages/ua-utils-evm/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "dist", "test"] +} diff --git a/packages/ua-utils-evm/tsconfig.json b/packages/ua-utils-evm/tsconfig.json new file mode 100644 index 000000000..084db5958 --- /dev/null +++ b/packages/ua-utils-evm/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "exclude": ["dist", "node_modules"], + "include": ["src", "test", "*.config.ts"], + "compilerOptions": { + "module": "commonjs", + "types": ["node", "mocha"] + } +} diff --git a/packages/ua-utils-evm/tsup.config.ts b/packages/ua-utils-evm/tsup.config.ts new file mode 100644 index 000000000..16d909226 --- /dev/null +++ b/packages/ua-utils-evm/tsup.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from "tsup" + +export default defineConfig({ + entry: ["src/index.ts"], + outDir: "./dist", + clean: true, + dts: true, + sourcemap: true, + splitting: false, + treeshake: true, + format: ["esm", "cjs"], +})