diff --git a/.env.example b/.env.example index 6bdb3c76..61b90352 100644 --- a/.env.example +++ b/.env.example @@ -3,6 +3,9 @@ ## The network used for testing purposes NETWORK_NAME="sepolia" # ["mainnet", "sepolia", "polygon", "baseMainnet", "arbitrum"] +## To upload the metadata for deployed contracts +PUB_PINATA_JWT= + # CONTRACTS ## One or multiple hex encoded private keys separated by commas `,` replacing the hardhat default accounts. diff --git a/.github/workflows/artifacts-publish.yml b/.github/workflows/artifacts-publish.yml new file mode 100644 index 00000000..aae974d2 --- /dev/null +++ b/.github/workflows/artifacts-publish.yml @@ -0,0 +1,63 @@ +name: Publish Artifacts + +on: + workflow_dispatch: + +jobs: + publish-artifacts-to-npm: + runs-on: ubuntu-latest + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '18' + registry-url: 'https://registry.npmjs.org/' + + - name: Configure NPM for Scoped Package + run: | + cd packages/artifacts + SCOPE=$(jq -r '.name' package.json | cut -d'/' -f1) + echo "$SCOPE:registry=https://registry.npmjs.org/" > ~/.npmrc + echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" >> ~/.npmrc + + - name: Get Version from package.json + id: get_version + run: | + cd packages/artifacts + VERSION=$(jq -r '.version' package.json) + TAG_VERSION="v$VERSION" + echo "VERSION=$TAG_VERSION" >> $GITHUB_ENV + + - name: Create Git Tag + run: | + git config --global user.name "github-actions" + git config --global user.email "github-actions@github.com" + git tag $VERSION + git push origin $VERSION + + - name: Install Dependencies + run: | + cd packages/artifacts + yarn install + + - name: Build Package + env: + ALCHEMY_API_KEY: ${{ secrets.ALCHEMY_API_KEY }} + run: | + cd packages/artifacts + yarn build + + - name: Publish to NPM + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + run: | + cd packages/artifacts + if [[ "$VERSION" == *"-alpha"* ]]; then + npm publish --tag alpha --access public + else + npm publish --tag latest --access public + fi diff --git a/.github/workflows/contracts-tests.yml b/.github/workflows/contracts-tests.yml index fb34a28e..22a783ce 100644 --- a/.github/workflows/contracts-tests.yml +++ b/.github/workflows/contracts-tests.yml @@ -26,7 +26,7 @@ jobs: node-version: 18 - name: 'Install the dependencies' - run: 'yarn install --frozen-lockfile' + run: 'yarn install --frozen-lockfile --ignore-scripts' - name: 'Build the contracts' run: 'yarn build' diff --git a/.github/workflows/formatting-linting.yml b/.github/workflows/formatting-linting.yml index 4552e7a2..ef3f68c6 100644 --- a/.github/workflows/formatting-linting.yml +++ b/.github/workflows/formatting-linting.yml @@ -19,7 +19,7 @@ jobs: node-version: 18 - name: 'Install the dependencies' - run: 'yarn install --frozen-lockfile' + run: 'yarn install --frozen-lockfile --ignore-scripts' - name: 'Check code formatting' run: 'yarn prettier:check' diff --git a/.github/workflows/subgraph-tests.yml b/.github/workflows/subgraph-tests.yml index ef013b86..3eac01c5 100644 --- a/.github/workflows/subgraph-tests.yml +++ b/.github/workflows/subgraph-tests.yml @@ -25,15 +25,15 @@ jobs: node-version: 18 - name: 'Install root dependencies' - run: 'yarn install --frozen-lockfile' + run: 'yarn install --frozen-lockfile --ignore-scripts' working-directory: . - name: 'Install dependencies for contracts' - run: 'yarn install --frozen-lockfile' + run: 'yarn install --frozen-lockfile --ignore-scripts' working-directory: packages/contracts - name: 'Install the dependencies for subgraph' - run: 'yarn install --frozen-lockfile' + run: 'yarn install --frozen-lockfile --ignore-scripts' working-directory: packages/subgraph - name: 'Build the subgraph' diff --git a/.gitignore b/.gitignore index b2cc668a..6d895e32 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,7 @@ .coverage_artifacts .coverage_cache .coverage_contracts -artifacts +packages/contracts/artifacts build cache coverage @@ -37,3 +37,8 @@ artifacts-zk cache-zk deployments-zk deployments + +generated + +#artifacts +packages/artifacts/src/abi.ts diff --git a/README.md b/README.md index 9a2656fd..dd459535 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ The root folder of the repo includes two subfolders: The root-level `package.json` file contains global `dev-dependencies` for formatting and linting. After installing the dependencies with ```sh -yarn install +yarn --ignore-scripts ``` you can run the associated [formatting](#formatting) and [linting](#linting) commands. @@ -81,7 +81,7 @@ This package is located in `packages/contracts`. ### Install Dependencies ```sh -yarn install +yarn --ignore-scripts ``` ### Building @@ -237,7 +237,7 @@ yarn deploy:zksync --network zksyncMainnet --tags ... In `packages/subgraph`, first run ```sh -yarn install +yarn --ignore-scripts ``` which will also run diff --git a/packages/artifacts/CHANGELOG.md b/packages/artifacts/CHANGELOG.md new file mode 100644 index 00000000..a0331fdf --- /dev/null +++ b/packages/artifacts/CHANGELOG.md @@ -0,0 +1,12 @@ +# Aragon Admin plugin Artifacts + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## v1.2.0 + +### Added + +- First NPM release of the Plugin's ABI (release 1, build 2) diff --git a/packages/artifacts/README.md b/packages/artifacts/README.md new file mode 100644 index 00000000..4de4cd50 --- /dev/null +++ b/packages/artifacts/README.md @@ -0,0 +1,57 @@ +# Admin Plugin artifacts + +This package contains the ABIs of the OSx Admin plugin, as well as the address of the plugin repository on each supported network. + +## Installation + +```sh +yarn add @aragon/admin-plugin-artifacts +``` + +## Usage + +```typescript +import { + AdminSetupABI, + AdminABI +} from "@aragon/admin-plugin-artifacts"; + +import { addresses } from "@aragon/admin-plugin-artifacts"; +``` + +You can also open [addresses.json](./src/addresses.json) directly. + + +## Development + +### Building the package + +Install the dependencies and generate the local ABI definitions. + +```sh +yarn --ignore-scripts +yarn build +``` + +The `build` script will: +1. Move to `packages/contracts`. +2. Install its dependencies. +3. Compile the contracts using Hardhat. +4. Generate their ABI. +5. Extract their ABI and embed it into on `src/abi.ts`. + +## Documentation + +You can find all documentation regarding how to use this plugin in [Aragon's documentation here](https://docs.aragon.org/admin/1.x/index.html). + +## Contributing + +If you like what we're doing and would love to support, please review our `CONTRIBUTING_GUIDE.md` [here](https://github.com/aragon/admin-plugin/blob/main/CONTRIBUTIONS.md). We'd love to build with you. + +## Security + +If you believe you've found a security issue, we encourage you to notify us. We welcome working with you to resolve the issue promptly. + +Security Contact Email: sirt@aragon.org + +Please do not use the issue tracker for security issues. \ No newline at end of file diff --git a/packages/artifacts/package.json b/packages/artifacts/package.json new file mode 100644 index 00000000..8e024fe5 --- /dev/null +++ b/packages/artifacts/package.json @@ -0,0 +1,22 @@ +{ + "name": "@aragon/admin-plugin-artifacts", + "author": "Aragon X", + "version": "1.2.0-alpha", + "license": "AGPL-3.0-or-later", + "description": "The Admin Plugin ABI definition", + "typings": "dist/index.d.ts", + "main": "dist/index.js", + "files": [ + "dist" + ], + "publishConfig": { + "access": "public" + }, + "scripts": { + "build": "yarn prepare-abi && rm -Rf dist && tsc -p tsconfig.json", + "prepare-abi": "bash prepare-abi.sh" + }, + "devDependencies": { + "typescript": "^5.7.3" + } +} diff --git a/packages/artifacts/prepare-abi.sh b/packages/artifacts/prepare-abi.sh new file mode 100644 index 00000000..0012ccb7 --- /dev/null +++ b/packages/artifacts/prepare-abi.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +# Exit on error +set -e + +# Constants +CONTRACTS_FOLDER="../contracts" +TARGET_ABI_FILE="./src/abi.ts" + +# Move into contracts package and install dependencies +cd $CONTRACTS_FOLDER + +yarn --ignore-scripts && yarn build + +# Move back to artifacts package +cd - > /dev/null + +# Wipe the destination file +echo "// NOTE: Do not edit this file. It is generated automatically." > $TARGET_ABI_FILE + +# Extract the abi field and create a TS file +find $CONTRACTS_FOLDER/src -type f -name "*.sol" ! -path "*/mocks/*" | while read -r SRC_CONTRACT_FILE +do + SRC_FILE_NAME=$(basename "$SRC_CONTRACT_FILE") + RELATIVE_PATH=${SRC_CONTRACT_FILE#"$CONTRACTS_FOLDER/src/"} + + # Adjusting the artifact path to match the directory structure + ARTIFACT_PATH="$CONTRACTS_FOLDER/artifacts/src/${RELATIVE_PATH%".sol"}.sol/${SRC_FILE_NAME%".sol"}.json" + + ABI=$(node -e "console.log(JSON.stringify(JSON.parse(fs.readFileSync(\"$ARTIFACT_PATH\").toString()).abi))") + CONTRACT_NAME=${SRC_FILE_NAME%".sol"} + + echo "const ${CONTRACT_NAME}ABI = $ABI as const;" >> $TARGET_ABI_FILE + echo "export {${CONTRACT_NAME}ABI};" >> $TARGET_ABI_FILE + echo "" >> $TARGET_ABI_FILE +done + +echo "ABI prepared: $TARGET_ABI_FILE" diff --git a/packages/artifacts/src/addresses.json b/packages/artifacts/src/addresses.json new file mode 100644 index 00000000..16c21904 --- /dev/null +++ b/packages/artifacts/src/addresses.json @@ -0,0 +1,18 @@ +{ + "pluginRepo": { + "mainnet": "0xA4371a239D08bfBA6E8894eccf8466C6323A52C3", + "sepolia": "0x152c9E28995E418870b85cbbc0AEE4e53020edb2", + "holesky": "0xC56B719Fc71D9056AbC559a0E3e6CE98Abc44a67", + "devSepolia": "0xEdA3074437375DC71007AFC9D421644656d72287", + "polygon": "0x7fF570473d0876db16A59e8F04EE7F17Ab117309", + "mumbai": "0x0DF9b15550fF39149e491dDD154b28f587e0cD16", + "base": "0x212eF339C77B3390599caB4D46222D79fAabcb5c", + "baseSepolia": "0x152c9E28995E418870b85cbbc0AEE4e53020edb2", + "arbitrum": "0x326A2aee6A8eE78D79E7E956DE60C6E452f76a8e", + "arbitrumSepolia": "0x152c9E28995E418870b85cbbc0AEE4e53020edb2", + "linea": "0x7d56667664ADf9e5aAb436629e6a789162Ad83eA", + "lineaSepolia": "0xf79F733e0D5d5e0e3037b221E8B3fd12Fb564101", + "zksync": "", + "zksyncSepolia": "" + } +} diff --git a/packages/artifacts/src/index.ts b/packages/artifacts/src/index.ts new file mode 100644 index 00000000..36b412b5 --- /dev/null +++ b/packages/artifacts/src/index.ts @@ -0,0 +1,3 @@ +export * from './abi'; +import * as addresses from "./addresses.json"; +export {addresses}; diff --git a/packages/artifacts/tsconfig.json b/packages/artifacts/tsconfig.json new file mode 100644 index 00000000..894c5a55 --- /dev/null +++ b/packages/artifacts/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs", + "declaration": true, + "resolveJsonModule": true, + "outDir": "./dist", + }, + "include": ["src"] +} + diff --git a/packages/artifacts/yarn.lock b/packages/artifacts/yarn.lock new file mode 100644 index 00000000..ee9d5e50 --- /dev/null +++ b/packages/artifacts/yarn.lock @@ -0,0 +1,8 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +typescript@^5.7.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e" + integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==