Skip to content

Commit

Permalink
chore: sync with osx-plugin-template-hardhat and osx-commons (#14)
Browse files Browse the repository at this point in the history
* feat: copied files from the simple-storage-example-plugin repo into package/contracts

* set monorepo package.json

* fix: CI/CD

* init subgraph

* fix: CI/CD

* feat: CI/CD improvements

* feat: cleaned devDependencies

* feat: improve CI step description

* subgraph bare bone (WIP)

* feat: add subpackages and cleaned dependencies

* feat: temporary readme

* feat: move packages

* fix: wrong path

* add post install

* plugin repo only

* switch to osx-ethers

* fix missing dir issue

* make it build

* build 1

* chore: cleaning

* feat: deleted contracts-versions

* feat: refactoring

* feat: refactoring

* feat: improvements

* feat: refactoring

* fix: linting and prettier

* feat: print more infos, remove unused function

* fix: print more info

* More infos

* Renaming

* More info

* fix: test failing because of wrong default test network

* feature: add subgraph workflow

* fix: rename flows

* fix: adapt triggers

* fix: install packages first

* fix: triggers

* feat: one .env file

* fix: .env paths

* fix: remove redundant checkout

* debug: print info

* debug: attempt fix

* fix: missing env variable

* fix: triggers

* Removed summaries

* WIP

* improvements

* fix: path

* fix: empty json handling

* fix: lint warnings

* add psp and pluginRepos related mapping WIP

* refactor PSP handlers (WIP)

* refactor PSP handlers (WIP)

* refactor PSP handlers (WIP)

* refactor PSP handlers (WIP)

* clean up

* create common id functions

* clean up

* Feature: Add js client (#2)

* add dummy js-client

* update yarn.lock

* update package.json

* fix formatting

* fix comments and add js-client github actions

* update js-client test workflow

* fix test workflow

* fix lint

* update workflow

* wip

* fix comments and add implementation

* update yarn lock and remove docs workflow

* Update packages/contracts-ethers/package.json

Co-authored-by: Jør∂¡ <4456749+brickpop@users.noreply.github.com>

* Update packages/js-client/src/context.ts

Co-authored-by: Jør∂¡ <4456749+brickpop@users.noreply.github.com>

* Update packages/js-client/test/unit/context.test.ts

Co-authored-by: Jør∂¡ <4456749+brickpop@users.noreply.github.com>

* add tests

* fix comments

* fix comments

* update client-common version

* fix lint command

* Update packages/js-client/src/internal/modules/methods.ts

Co-authored-by: Jør∂¡ <4456749+brickpop@users.noreply.github.com>

* update size limit

* update gh actions

* update gh actions

* fix gh actions

* add build command

* update gh actions

* fix gh action

* fix lint

* fix lint

* ignore js-client tests

* minor fixes

---------

Co-authored-by: Jør∂¡ <4456749+brickpop@users.noreply.github.com>

* fix subgraph build

* fix lint

* map 1 event

* chore: bump package versions

* feat: added event, tests, and improved signer, renamed plugin

* fix: linting and formatting errors

* feature: support base goerli network

* Add missing migration import for setup processing

* feat: added sepolia and base support and fix IPFS returning empty strings (#10)

* feat: added sepolia and base support

* fix: replaced outdated IPFS server url

* fix: empty return value

* OS-593: refactors repo for linting and linting during workflows (#11)

* chore(OS-593): Removes .editorconfig from project root

Prettier uses its .prettierrc as a first priority to configure the
formatter

* chore(OS-593): Updates node to v18 in gitpod

* chore(OS-593): same network for subgraph and contracts

Use the same network for subgraph and contracts in the .env.example file

* chore(OS-593): configure vscode editor correctly

configures vscode to use fixed a tabsize of 4 and adds commitizen
extentions into recommendations

* chore(OS-593): reconfigures linting system to start from the root

all linting commands have to be run from the root, then eslint merges
the configs per package and lints those

* build(OS-593): refactors package.json and dependency handling

moves all linting commands to the root of the repo for proper config
merging

* chore(OS-593): adds solidity visual developer as recommmended

we recommend to use the solidity visual auditor extension for
development

* style(OS-593): fixes linting issues

fixes some linting issues in contracts and js-client

* ci(OS-593): refactor workflows and include linting

refactors workflows to be easier and includes formatting and linting in
all workflows

* style(OS-593): apply prettier formatting

* ci(OS-593): lint all packages indiviually

lints the packages individually and adds step summaries for important
steps

* ci(OS-593): remove prettier output from summary

prettiers output isn't really working with step summary

* ci(OS-593): uses now node 18 in workflows

* chore(OS-593): fix typo in formatting-linting.yml

* docs: added readme (#13)

* docs: added readme

* docs: fix typos

* Os 782 remove the contracts ethers and do rollup in mini sdk (#12)

* refactor(OS-782): removes contracts-ethers package

Removes a now unecessary contracts-ethers package. js-client creates its
own typechain now

BREAKING CHANGE: Removal of contracts-ethers

* refactor(OS-782): js-client generates typescript

js-client doesn't depend on contracts-ethers anymore and creates the
typechain typings during its own build

* test(OS-782): ganache replacment, optimizations, use native jest

replaces depricated ganache setup with hardhat for testing, removes
contract interactions where they aren't necessary, upgrades jest by not
using tsdx for testing

* ci(OS-782): fixes js-client publish and tests workflows

corrects reusable worfklow in js-client publishing workflow, adapts
js-client-tests to use the new typechain integration properly

* build(OS-782): removes contracts-ethers linting command

* chore(OS-782): applies prettier formatting

* refactor: renamed and refactored files

* refactor: skip repo creation if ENS name is already taken

* docs: added usage guide and improved comments

* ci: fix workflow by removing outdated lint

* ci: formatting & linting on every push

* docs: improve migration file comment

* ci: fix linting workflow

* build: use the same typescript version everywhere

* docs: improve usage guide

* docs: improved usage guide

* OS-754 : re-organize entity relations & add testing (#15)

* re organize entity relations

* add testing for OSx & Plugin

* remove extra files

* Update Satsuma deploy node url

* Clean up

* fix lint

* fix subgraph scripts

* fix subgraph test flow

* ci: fixed linting work flow

* add comment

* OSx: Remove redundant code

* flow: build contracts for subgraph testing

* flow: build root for subgraph testing

* flow: remove comments

* subgraph: update test constants and comments

* subgraph: refactor & add comments

* ci: skip js-client linting

* docs: fix typo

---------

Co-authored-by: Michael Heuer <20623991+Michael-A-Heuer@users.noreply.github.com>

* fix(js-client): exclude dist from tsconfig.json (aragon#20)

* fix(js-client): exclude dist from tsconfig.json

not excluding dist would result in an error trying to run tests after
the client has been built

* ci(js-client): fix missing env in build

* chore: added arbitrum and arbitrumGoerli (aragon#18)

* chore: added arbitrum and arbitrumGoerli

* ci: fix ci pipeline by adding typescript dev dependency

* ci: fix pipeline by removing leftover contracts-ethers lint

* ci: do a global lint on every push

* fix: etherscan arbitrum name

* ci: skip js-client linting

* build: add cross-env to fix subgraph ci

* refactor: add event explicitly

* build(js-client): replaces tsdx with dts-cli (aragon#21)

* build(js-client): replace tsdx with dts-cli
deps(js-client): update to typescript 5.2.2
deps(root): update eslint packages

* lint(js-client): fixes linting errors

* test(js-client): fixes jest-environment import

* style: apply prettier changes

* chore: bump OZ dependency (aragon#22)

* docs: add readme and usage guide

* OS-888 fix: Import Repo address from plugin-info (aragon#26)

* fix: Import repo address from plugin-info

* fix: fix typo

* update plugin-info.json location

* update script

* update gitignore

* update osx-ethers to version 1.3.0

* Update .gitignore

Co-authored-by: Michael Heuer <20623991+Michael-A-Heuer@users.noreply.github.com>

* fix import

* remove alias import

---------

Co-authored-by: Jose Manuel Mariñas Bascoy <josemarinasbascoy@gmail.com>
Co-authored-by: josemarinas <36479864+josemarinas@users.noreply.github.com>
Co-authored-by: Michael Heuer <20623991+Michael-A-Heuer@users.noreply.github.com>

* build: clean-up of dependecy and commands  (aragon#19)

* build: remove docker-related commands

* build: remove local subgraphs commands

* chore: bump dependencies

* build: bump OZ version and fix unmet dependencies

* Feature: Add Subgraph step-by-step guide (aragon#25)

* add step-by-step guide

* fiux lintint

* fix comments

* fix lint

* fix: Remove individual usage

* fix: update .env.example to include Sepolia

* docs: Improve usage guide

* fix: replace arbitrumGoerli and baseGoerli with the sepolia replacements

* fix: improve usage format

* Apply suggestions from code review

Co-authored-by: Michael Heuer <20623991+Michael-A-Heuer@users.noreply.github.com>

* feat: improve usage guide file structure & address comments

* fix: remove redundant titles

* fix: link dependencies in the usage guide

* fix: fix typo

* Apply suggestions from code review

Co-authored-by: Michael Heuer <20623991+Michael-A-Heuer@users.noreply.github.com>

---------

Co-authored-by: Rekard0 <5880388+Rekard0@users.noreply.github.com>
Co-authored-by: Michael Heuer <20623991+Michael-A-Heuer@users.noreply.github.com>

* feat: use `osx-commons-contracts` and `osx-commons-configs` (aragon#28)

* build: use ts 5.2.2

* refactor: use osx-commons

* refactor: use osx-commons

* build: use osx-commons-sdk

* build: use osx-commons-sdk

* refactor: contract improvements

* build: print coverage report

* chore: bump osx-commons-sdk version

* feat: use the latest osx-commons-contracts

* refactor: use osx-commons-configs and deploy script refactor

* build: subgraph fix

* docs: improve .env example

* style: fix prettier

* build: use osx-commons

* chore: bump subgraph osx-ethers dependency

* chore: remove todo

* test: remove redundant expect

* fix: use unknown instead of any

* fix: imports

* fix: wrong type

* fix: import

* fix: import

* feat: use typechain binding

* refactor: deploy script simplification

* refactor: findPluginRepo and domain

* refactor: improve code, comments, and tests

* refactor: improved helpers

* style: fix linting issues

* chore: remove todos

* revert: deletion of hashHelpers

* feat: catch errors properly

* refactor: folder structure

* refactor: help gh to track files

* refactor: help gh to track files

* refactor: improve folder structure (aragon#30)

* build: remove js client (aragon#31)

* ci: clean GH flows and remove gitpod (aragon#32)

* ci: improve flows

* style: remove unused commitizen config file

* build: update yarn.lock

* docs: update README.md (aragon#33)

* docs: update README.md

* doc: improve README and USAGE_GUIDE

* doc: minor improvement

* feat: use commons subgraph (aragon#29)

* use commons subgraph

* update events folder structure

* fix comments

* fix tests

* build: update yarn.lock

---------

Co-authored-by: Michael Heuer <michael.heuer@rwth-aachen.de>

* build: improve  package.json files (aragon#34)

* feat: improvements surfaced from the admin plugin (aragon#36)

* feat: various improvements that surfaced from the admin plugin

* build: remove duplicated dependency

* ci: use network name env var

* style: throw errors for unsupported networks or missing deployments

* feat: update the env examples to change the infura api key for the alchemy one

* feat: update the hardhat contracts file to use the new commons networks config

* feat: update the hardhat config to use the new addRpcUrlToNetwork function from the config commons package

* feat: update the config commons dependency version

* ci: update the readme to add the new alchemy api key needed

* feat: add new commons config version

* ci: typo

* Update .env.example

Co-authored-by: Michael Heuer <20623991+Michael-A-Heuer@users.noreply.github.com>

* Update README.md

Co-authored-by: Michael Heuer <20623991+Michael-A-Heuer@users.noreply.github.com>

* feat: update the api key in the workflows

* ci: update readme

* feat: bump commons config version on subgraph

* feat: update the actions to run over the PR changes  instead of the commit changes

* ci: comment to check the pipeline

* ci: undo the last comment added on the readme

* feature: improvements (aragon#44)

* doc: added missing comment

* build: remove redundant dependency

* feat: add a function to generate a random ens, set the ens to the plugin settings

* feat: bump commons config version in subgraph

* feat: add random name function

* refactor: settings

---------

Co-authored-by: Claudia <claudiabarcelovaldes40@gmail.com>

* feat: add manifest with psp address for missing networks and add the Plugin address to the json

* feat: update the script for getting the repo address

* feat: update the readme

* feat: update the deployment script to avoid deploying if the plugin address is not set

* ci update comment

* feat: change the manifest data json struct

* feat: change the script to get the correct params from the manifest data

* featL change to ens name

* feat: remove the ens domain due to it is not used

* feat: update deploy script to get the correct repo address

* feat: added IAction to template

* feat: bump matchstick version

* fix: remove deprecated networks

* fix: update the repository in the placeholder

* fix: local deploy script problem with `generateRandomName`  (aragon#53)

* fix: error on local deployment

* refactor: move generateName to avoid circular dependency

* refactor: bytes and metadata encoding

* fix: redundant imports

* refactor: split upgrade repo script into two (aragon#60)

* refactor: renamed file

* refactor: extract skip function

* refactor: renaming and commenting

* style: satisfy linter

* chore: maintained guide

* refactor: don't alias

* fix: wrong import

* fix: change the execution order so that reinitialization happens by default

* refactor: common steps

* fix: merge conflict

* doc: subgraph description

* fix: remove duplicated IAction

* refactor: remove IAction (aragon#61)

* f: removed IAction from template as is opinonated solution

* style: add empty line at EOF

---------

Co-authored-by: Michael Heuer <20623991+Michael-A-Heuer@users.noreply.github.com>

* chore: refactor helpers (aragon#57)

* refactor: delete hashHelpers

* style: fix linter

* fix: import

* build: bump OZ dependency

* chore: bump osx-commons-sdk dependency

* chore: bumped commons-contracts

* fix: tests

* style: whitespace

* revert: import

* style: apply prettier

* chore: maintained changelog

* revert: test change

* chore: bump osx-commons-sdk version (aragon#62)

* chore: author change after AA dissolution

* chore: sync with `osx-commons` (aragon#63)

* chore: bump osx-commons-sdk version

* chore: bump osx-commons

* fix: yarn lock

* Apply suggestions from code review

Co-authored-by: Jordan <45881807+jordaniza@users.noreply.github.com>

---------

Co-authored-by: Rekard0 <5880388+Rekard0@users.noreply.github.com>
Co-authored-by: josemarinas <36479864+josemarinas@users.noreply.github.com>
Co-authored-by: Jør∂¡ <4456749+brickpop@users.noreply.github.com>
Co-authored-by: Jør∂¡ <itsbrickpop@gmail.com>
Co-authored-by: Mathias Scherer <mathias@aragon.org>
Co-authored-by: Aaron Abu Usama <50079365+pythonpete32@users.noreply.github.com>
Co-authored-by: Jose Manuel Mariñas Bascoy <josemarinasbascoy@gmail.com>
Co-authored-by: Claudia <claudiabarcelovaldes40@gmail.com>
Co-authored-by: jordaniza <jordan.imran@predixa.ai>
Co-authored-by: Jordan <45881807+jordaniza@users.noreply.github.com>
  • Loading branch information
11 people committed Apr 23, 2024
1 parent 9d0c061 commit 72ad577
Show file tree
Hide file tree
Showing 24 changed files with 463 additions and 551 deletions.
4 changes: 3 additions & 1 deletion USAGE_GUIDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,9 @@ The standard deploy scripts in the `packages/contracts/deploy` should already be
- Fetches the plugin setup and implementation contract and queues it for block explorer verification.
- `20_new_version/23_publish.ts`
- Publishes the plugin setup contract on the plugin repo created in `10_repo/11_create_repo.ts`
- `30_upgrade_repo/31_upgrade_repo.ts`
- `30_upgrade_repo/31a_upgrade_and_reinitialize_repo.ts`
- Upgrades the plugin repo to the latest Aragon OSx protocol version and reinitializes it.
- `30_upgrade_repo/31b_upgrade_repo.ts`
- Upgrades the plugin repo to the latest Aragon OSx protocol version.
- `40_conclude/41_conclude.ts`
- Prints information on the used account's balance after deployment.
Expand Down
3 changes: 2 additions & 1 deletion packages/contracts/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,6 @@ and this project adheres to the [Aragon OSx Plugin Versioning Convention](https:

### Changed

- Used `ProxyLib` from `osx-commons-contracts` for the minimal proxy deployment in `MultisigSetup`.
- Bumped OpenZepplin to `4.9.6`.
- Used `ProxyLib` from `osx-commons-contracts` for the UUPS proxy deployment in `MultisigSetup`.
- Hard-coded the `bytes32 internal constant EXECUTE_PERMISSION_ID` constant in `MultisigSetup` until it is available in `PermissionLib`.
5 changes: 5 additions & 0 deletions packages/contracts/deploy/00_info/01_info.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import {PLUGIN_REPO_ENS_SUBDOMAIN_NAME} from '../../plugin-settings';
import {
AragonOSxAsciiArt,
getProductionNetworkName,
Expand Down Expand Up @@ -52,6 +53,10 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
await deployer.getBalance()
)} native tokens.`
);

console.log(
`Chosen PluginRepo ENS subdomain name: '${PLUGIN_REPO_ENS_SUBDOMAIN_NAME}'`
);
};

export default func;
Expand Down
4 changes: 2 additions & 2 deletions packages/contracts/deploy/10_create_repo/11_create_repo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {

// Get the PluginRepo address and deployment block number from the txn and event therein
const eventLog =
await findEventTopicLog<PluginRepoRegistryEvents.PluginRepoRegisteredEvent>(
tx,
findEventTopicLog<PluginRepoRegistryEvents.PluginRepoRegisteredEvent>(
await tx.wait(),
PluginRepoRegistry__factory.createInterface(),
'PluginRepoRegistered'
);
Expand Down
11 changes: 4 additions & 7 deletions packages/contracts/deploy/20_new_version/23_publish.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,9 @@ import {
isLocal,
pluginEnsDomain,
} from '../../utils/helpers';
import {
PLUGIN_REPO_PERMISSIONS,
toHex,
uploadToIPFS,
} from '@aragon/osx-commons-sdk';
import {PLUGIN_REPO_PERMISSIONS, uploadToIPFS} from '@aragon/osx-commons-sdk';
import {writeFile} from 'fs/promises';
import {ethers} from 'hardhat';
import {DeployFunction} from 'hardhat-deploy/types';
import {HardhatRuntimeEnvironment} from 'hardhat/types';
import path from 'path';
Expand Down Expand Up @@ -114,8 +111,8 @@ const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
.createVersion(
VERSION.release,
setup.address,
toHex(buildMetadataURI),
toHex(releaseMetadataURI)
ethers.utils.hexlify(ethers.utils.toUtf8Bytes(buildMetadataURI)),
ethers.utils.hexlify(ethers.utils.toUtf8Bytes(releaseMetadataURI))
);

await tx.wait();
Expand Down
213 changes: 0 additions & 213 deletions packages/contracts/deploy/30_upgrade_repo/31_upgrade_repo.ts

This file was deleted.

36 changes: 36 additions & 0 deletions packages/contracts/deploy/30_upgrade_repo/31a_upgrade_repo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import {fetchData, skipUpgrade} from './_common';
import {PLUGIN_REPO_PERMISSIONS} from '@aragon/osx-commons-sdk';
import {DeployFunction} from 'hardhat-deploy/types';
import {HardhatRuntimeEnvironment} from 'hardhat/types';

/**
* Upgrades the plugin repo to the latest implementation.
* This script CAN be called if the contract does not require reinitialization.
* It MUST NOT be called if the contract requires reinitialization, because this
* would leave the proxy unreinitialized.
* @param {HardhatRuntimeEnvironment} hre
*/
const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
const {deployer, pluginRepo, latestPluginRepoImplementation} =
await fetchData(hre);

// Check if deployer has the permission to upgrade the plugin repo
if (
await pluginRepo.isGranted(
pluginRepo.address,
deployer.address,
PLUGIN_REPO_PERMISSIONS.UPGRADE_REPO_PERMISSION_ID,
[]
)
) {
await pluginRepo.upgradeTo(latestPluginRepoImplementation.address);
} else {
throw Error(
`The new version cannot be published because the deployer ('${deployer.address}')
is lacking the ${PLUGIN_REPO_PERMISSIONS.UPGRADE_REPO_PERMISSION_ID} permission.`
);
}
};
export default func;
func.tags = ['UpgradeRepo'];
func.skip = skipUpgrade;
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import {fetchData, skipUpgrade} from './_common';
import {PLUGIN_REPO_PERMISSIONS} from '@aragon/osx-commons-sdk';
import {BytesLike} from 'ethers';
import {DeployFunction} from 'hardhat-deploy/types';
import {HardhatRuntimeEnvironment} from 'hardhat/types';

/**
* Upgrades the plugin repo to the latest implementation and reinitializes the proxy.
* This script MUST be called if the contract requires reinitialization -- otherwise
* the proxy is left unreinitialized.
* @param {HardhatRuntimeEnvironment} hre
*/
const func: DeployFunction = async function (hre: HardhatRuntimeEnvironment) {
const {deployer, pluginRepo, latestPluginRepoImplementation, current} =
await fetchData(hre);

// Define the `_initData` arguments
const initData: BytesLike[] = [];

// Encode the call to `function initializeFrom(uint8[3] calldata _previousProtocolVersion, bytes calldata _initData)` with `initData`.
const initializeFromCalldata =
latestPluginRepoImplementation.interface.encodeFunctionData(
// Re-initialization will happen through a call to `function initializeFrom(uint8[3] calldata _previousProtocolVersion, bytes calldata _initData)`
// that Aragon will add to the `PluginRepo` contract once it's required.
'initializeFrom',
[current, initData]
);

// Check if deployer has the permission to upgrade the plugin repo
if (
await pluginRepo.isGranted(
pluginRepo.address,
deployer.address,
PLUGIN_REPO_PERMISSIONS.UPGRADE_REPO_PERMISSION_ID,
[]
)
) {
// Use `upgradeToAndCall` to reinitialize the new `PluginRepo` implementation after the update.
if (initializeFromCalldata.length > 0) {
await pluginRepo.upgradeToAndCall(
latestPluginRepoImplementation.address,
initializeFromCalldata
);
} else {
throw Error(
`Initialization data is missing for 'upgradeToAndCall'. Stopping repo upgrade and reinitialization...`
);
}
} else {
throw Error(
`The new version cannot be published because the deployer ('${deployer.address}')
is lacking the ${PLUGIN_REPO_PERMISSIONS.UPGRADE_REPO_PERMISSION_ID} permission.`
);
}
};
export default func;
func.tags = ['UpgradeAndReinitializeRepo'];
func.skip = skipUpgrade;
Loading

0 comments on commit 72ad577

Please sign in to comment.