From f8545e734913df5e1a877423ef237fa19afd78dd Mon Sep 17 00:00:00 2001 From: Zak Angelle Date: Tue, 13 Apr 2021 12:47:41 -0500 Subject: [PATCH] chore: consolidate protocol info and add validation tooling (#85) --- .github/workflows/pr.yml | 16 + .gitignore | 1 + .../aave}/Gov Weekly/Week 10 2021 11-03-21.md | 0 .../aave}/Gov Weekly/Week 11 2021 18-03-21.md | 0 .../aave}/Gov Weekly/Week 12 2021 24-03-21.md | 0 .../aave}/Gov Weekly/Week 8 2021 02-23-21.md | 0 .../aave}/Gov Weekly/Week 9 2021 03-04-21.md | 0 {aave => __unsupported/aave}/calls/.gitkeep | 0 {aave => __unsupported/aave}/events.json | 0 {aave => __unsupported/aave}/logo.png | Bin {aave => __unsupported/aave}/overview.md | 0 .../balancer}/calls/.gitkeep | 0 .../balancer}/events.json | 0 {balancer => __unsupported/balancer}/logo.png | Bin .../balancer}/overview.md | 0 {dhedge => __unsupported/dhedge}/events.json | 0 {dhedge => __unsupported/dhedge}/header.png | Bin {dhedge => __unsupported/dhedge}/logo.png | Bin {dhedge => __unsupported/dhedge}/overview.md | 0 .../Update Week 9 2021, 03-05-2021.md | 0 .../Update Week 11 2021 18-03-21.md | 0 .../Update Week 12 2021 26-03-21.md | 0 .../Update Week 13 2021 01-04-21.md | 0 .../Update Week 14 2021 08-04-21.md | 0 .../Gov Weekly/Update Week 8 2021 24-02-21.md | 0 .../Gov Weekly/Update Week 9 2021 03-03-21.md | 0 .../pooltogether}/calls/Call.md | 0 .../pooltogether}/events.json | 0 .../pooltogether}/header.png | Bin .../pooltogether}/logo.png | Bin .../pooltogether}/overview.md | 0 .../powerpool}/calls/.gitkeep | 0 .../powerpool}/events.json | 0 .../powerpool}/logo.png | Bin .../powerpool}/overview.md | 0 {siren => __unsupported/siren}/calls/.gitkeep | 0 .../siren}/events.json | 0 {siren => __unsupported/siren}/logo.png | Bin {siren => __unsupported/siren}/overview.md | 0 {yamv2 => __unsupported/yamv2}/calls/.gitkeep | 0 .../yamv2}/events.json | 0 {yamv2 => __unsupported/yamv2}/logo.png | Bin {yamv2 => __unsupported/yamv2}/overview.md | 0 {yearn => __unsupported/yearn}/calls/.gitkeep | 0 .../yearn}/events.json | 0 {yearn => __unsupported/yearn}/logo.png | Bin {yearn => __unsupported/yearn}/overview.md | 0 compoundgrants/header.png | Bin 53400 -> 0 bytes compoundgrants/logo.png | Bin 21365 -> 0 bytes dist/index.js | 132 --- index.d.ts | 5 + index.ts | 159 ---- indexCoop/.DS_Store | Bin 6148 -> 0 bytes package.json | 21 +- protocols/compound/contracts/governance.json | 755 ++++++++++++++++++ protocols/compound/contracts/token.json | 530 ++++++++++++ {powerpool => protocols/compound}/events.json | 0 {compound => protocols/compound}/header.png | Bin protocols/compound/index.json | 20 + {compound => protocols/compound}/logo.png | Bin {compound => protocols/compound}/overview.md | 0 .../Gov Weekly/Week 10 2021 10-03-21.md | 0 .../Gov Weekly/Week 11 2021 17-03-21.md | 0 .../Gov Weekly/Week 12 2021 24-03-21.md | 0 .../Gov Weekly/Week 13 2021 31-03-21.md | 0 .../Gov Weekly/Week 14 2021 07-04-21.md | 0 .../Gov Weekly/Week 8 2021 25-02-21.md | 0 .../Gov Weekly/Week 9 2021 03-03-21.md | 0 ...r Community Call – Dec. 23, 16:30 GMT.md | 0 ...er Community Call – Dec. 9, 16:30 GMT.md | 0 ...r Community Call – Jan. 13, 16:30 GMT.md | 0 ...r Community Call – Nov. 11, 16:30 GMT.md | 0 ...r Community Call – Nov. 25, 16:30 GMT.md | 0 ...r Community Call – Oct. 28, 16:30 GMT.md | 0 .../compoundgrants/contracts/governance.json | 755 ++++++++++++++++++ protocols/compoundgrants/contracts/token.json | 530 ++++++++++++ .../compoundgrants}/events.json | 0 protocols/compoundgrants/header.png | Bin 0 -> 12834 bytes protocols/compoundgrants/index.json | 20 + protocols/compoundgrants/logo.png | Bin 0 -> 9715 bytes .../compoundgrants}/overview.md | 0 protocols/defidollar/contracts/token.json | 401 ++++++++++ {siren => protocols/defidollar}/events.json | 0 .../defidollar}/header.png | Bin protocols/defidollar/index.json | 25 + {defidollar => protocols/defidollar}/logo.png | Bin .../defidollar}/overview.md | 0 .../Documentation/1. Getting Started.md | 0 .../Documentation/2. Interacting with DUSD.md | 0 .../resources}/Documentation/3. Audits.md | 0 .../resources}/Documentation/4. Roadmap.md | 0 ... Pertaining to the DefiDollar Ecosystem.md | 0 protocols/gnosis.eth/contracts/token.json | 226 ++++++ .../gnosis.eth}/events.json | 0 .../gnosis.eth}/header.png | Bin protocols/gnosis.eth/index.json | 23 + {gnosis.eth => protocols/gnosis.eth}/logo.png | Bin .../gnosis.eth}/overview.md | 0 .../Update Week 11 2021 18-03-21.md | 0 .../Update Week 12 2021 24-03-21.md | 0 .../Gov Weekly/Update Week 7 2021 02-16-21.md | 0 .../Gov Weekly/Update Week 8 2021 02-22-21.md | 0 .../gnosis.eth/resources}/calls/Call.md | 0 protocols/indexCoop/contracts/token.json | 491 ++++++++++++ .../indexCoop}/events.json | 0 {indexCoop => protocols/indexCoop}/header.png | Bin protocols/indexCoop/index.json | 24 + {indexCoop => protocols/indexCoop}/logo.png | Bin .../indexCoop}/overview.md | 0 .../Index Coop January Bounties.md | 0 .../Development/Technical Resources.md | 0 .../Gov Weekly/Week 10 2021 11-03-21.md | 0 .../Gov Weekly/Week 11 2021 18-03-21.md | 0 .../Gov Weekly/Week 12 2021 11-03-21.md | 0 .../Gov Weekly/Week 13 2021 01-04-21.md | 0 .../Gov Weekly/Week 14 2021 09-04-21.md | 0 .../Gov Weekly/Week 6 2021 11-02-21.md | 0 .../Gov Weekly/Week 7 2021 19-02-21.md | 0 .../Gov Weekly/Week 8 2021 20-02-21.md | 0 .../Gov Weekly/Week 9 2021 04-03-21.md | 0 .../Growth/About the Growth Working Group.md | 0 .../resources}/Growth/Advertisements.md | 0 .../resources}/Growth/BD Materials List.md | 0 .../Operations/Governance Call Notes.md | 0 .../resources}/Operations/Q1 2021 - OKRs.md | 0 .../indexCoop/resources}/Product/CGI.md | 0 .../indexCoop/resources}/Product/DPI.md | 0 .../indexCoop/resources}/Product/INDEX.md | 0 .../resources}/Product/Product Materials.md | 0 protocols/rally/contracts/token.json | 296 +++++++ {uniswap => protocols/rally}/events.json | 0 {rally => protocols/rally}/header.png | Bin protocols/rally/index.json | 19 + {rally => protocols/rally}/logo.png | Bin {rally => protocols/rally}/overview.md | 0 protocols/rarible/contracts/token.json | 482 +++++++++++ {yamv2 => protocols/rarible}/events.json | 0 {rarible => protocols/rarible}/header.png | Bin protocols/rarible/index.json | 28 + {rarible => protocols/rarible}/logo.png | Bin {rarible => protocols/rarible}/overview.md | 0 .../Gov Weekly/Week 9 2021 03-05-21.md | 0 .../rarible/resources}/calls/Call.md | 0 protocols/synthetix/contracts/governance.json | 423 ++++++++++ protocols/synthetix/contracts/token.json | 415 ++++++++++ {yearn => protocols/synthetix}/events.json | 0 {synthetix => protocols/synthetix}/header.png | Bin protocols/synthetix/index.json | 19 + {synthetix => protocols/synthetix}/logo.png | Bin .../synthetix}/overview.md | 0 .../Update Week 11 2021 18-03-21.md | 0 .../Update Week 12 2021 03-25-21.md | 0 .../Update Week 13 2021 01-04-21.md | 0 .../Update Week 14 2021 08-04-21.md | 0 .../Gov Weekly/Update Week 8 2021 02-25-21.md | 0 .../Gov Weekly/Update Week 9 2021 03-05-21.md | 0 ...0 - Synthetix Community Governance Call.md | 0 protocols/uniswap/contracts/governance.json | 644 +++++++++++++++ protocols/uniswap/contracts/token.json | 714 +++++++++++++++++ protocols/uniswap/events.json | 1 + {uniswap => protocols/uniswap}/header.png | Bin protocols/uniswap/index.json | 28 + {uniswap => protocols/uniswap}/logo.png | Bin {uniswap => protocols/uniswap}/overview.md | 0 .../Update Week 12 2021 24-03-21.md | 0 .../Update Week 13 2021 01-04-21.md | 0 .../Update Week 14 2021 08-04-21.md | 0 .../Gov Weekly/Update Week 8 2021 02-22-21.md | 0 .../Gov Weekly/Update Week 9 2021 03-05-21.md | 0 ...munity Call - Thursday 12 Nov 17:00 UTC.md | 0 protocols/yup.eth/contracts/token.json | 148 ++++ {yup => protocols/yup.eth}/events.json | 0 {yup => protocols/yup.eth}/header.png | Bin protocols/yup.eth/index.json | 20 + {yup => protocols/yup.eth}/logo.png | Bin {yup => protocols/yup.eth}/overview.md | 0 .../Community Meeting Feb 18 18-02-21.md | 0 .../Community Meeting Feb 25 25-02-21.md | 0 rally/events.json | 0 rollup.config.js | 9 - scripts/build.ts | 16 + scripts/validate.ts | 30 + tsconfig.json | 76 +- types.ts | 36 + yarn.lock | 135 ++-- 185 files changed, 7244 insertions(+), 429 deletions(-) create mode 100644 .github/workflows/pr.yml rename {aave => __unsupported/aave}/Gov Weekly/Week 10 2021 11-03-21.md (100%) rename {aave => __unsupported/aave}/Gov Weekly/Week 11 2021 18-03-21.md (100%) rename {aave => __unsupported/aave}/Gov Weekly/Week 12 2021 24-03-21.md (100%) rename {aave => __unsupported/aave}/Gov Weekly/Week 8 2021 02-23-21.md (100%) rename {aave => __unsupported/aave}/Gov Weekly/Week 9 2021 03-04-21.md (100%) rename {aave => __unsupported/aave}/calls/.gitkeep (100%) rename {aave => __unsupported/aave}/events.json (100%) rename {aave => __unsupported/aave}/logo.png (100%) rename {aave => __unsupported/aave}/overview.md (100%) rename {balancer => __unsupported/balancer}/calls/.gitkeep (100%) rename {balancer => __unsupported/balancer}/events.json (100%) rename {balancer => __unsupported/balancer}/logo.png (100%) rename {balancer => __unsupported/balancer}/overview.md (100%) rename {dhedge => __unsupported/dhedge}/events.json (100%) rename {dhedge => __unsupported/dhedge}/header.png (100%) rename {dhedge => __unsupported/dhedge}/logo.png (100%) rename {dhedge => __unsupported/dhedge}/overview.md (100%) rename {gnosis => __unsupported/gnosis}/Gov Weekly/Update Week 9 2021, 03-05-2021.md (100%) rename {pooltogether => __unsupported/pooltogether}/Gov Weekly/Update Week 11 2021 18-03-21.md (100%) rename {pooltogether => __unsupported/pooltogether}/Gov Weekly/Update Week 12 2021 26-03-21.md (100%) rename {pooltogether => __unsupported/pooltogether}/Gov Weekly/Update Week 13 2021 01-04-21.md (100%) rename {pooltogether => __unsupported/pooltogether}/Gov Weekly/Update Week 14 2021 08-04-21.md (100%) rename {pooltogether => __unsupported/pooltogether}/Gov Weekly/Update Week 8 2021 24-02-21.md (100%) rename {pooltogether => __unsupported/pooltogether}/Gov Weekly/Update Week 9 2021 03-03-21.md (100%) rename {gnosis.eth => __unsupported/pooltogether}/calls/Call.md (100%) rename {compound => __unsupported/pooltogether}/events.json (100%) rename {pooltogether => __unsupported/pooltogether}/header.png (100%) rename {pooltogether => __unsupported/pooltogether}/logo.png (100%) rename {pooltogether => __unsupported/pooltogether}/overview.md (100%) rename {powerpool => __unsupported/powerpool}/calls/.gitkeep (100%) rename {compoundgrants => __unsupported/powerpool}/events.json (100%) rename {powerpool => __unsupported/powerpool}/logo.png (100%) rename {powerpool => __unsupported/powerpool}/overview.md (100%) rename {siren => __unsupported/siren}/calls/.gitkeep (100%) rename {defidollar => __unsupported/siren}/events.json (100%) rename {siren => __unsupported/siren}/logo.png (100%) rename {siren => __unsupported/siren}/overview.md (100%) rename {yamv2 => __unsupported/yamv2}/calls/.gitkeep (100%) rename {gnosis.eth => __unsupported/yamv2}/events.json (100%) rename {yamv2 => __unsupported/yamv2}/logo.png (100%) rename {yamv2 => __unsupported/yamv2}/overview.md (100%) rename {yearn => __unsupported/yearn}/calls/.gitkeep (100%) rename {pooltogether => __unsupported/yearn}/events.json (100%) rename {yearn => __unsupported/yearn}/logo.png (100%) rename {yearn => __unsupported/yearn}/overview.md (100%) delete mode 100644 compoundgrants/header.png delete mode 100644 compoundgrants/logo.png delete mode 100644 dist/index.js create mode 100644 index.d.ts delete mode 100644 index.ts delete mode 100644 indexCoop/.DS_Store create mode 100644 protocols/compound/contracts/governance.json create mode 100644 protocols/compound/contracts/token.json rename {powerpool => protocols/compound}/events.json (100%) rename {compound => protocols/compound}/header.png (100%) create mode 100644 protocols/compound/index.json rename {compound => protocols/compound}/logo.png (100%) rename {compound => protocols/compound}/overview.md (100%) rename {compound => protocols/compound/resources}/Gov Weekly/Week 10 2021 10-03-21.md (100%) rename {compound => protocols/compound/resources}/Gov Weekly/Week 11 2021 17-03-21.md (100%) rename {compound => protocols/compound/resources}/Gov Weekly/Week 12 2021 24-03-21.md (100%) rename {compound => protocols/compound/resources}/Gov Weekly/Week 13 2021 31-03-21.md (100%) rename {compound => protocols/compound/resources}/Gov Weekly/Week 14 2021 07-04-21.md (100%) rename {compound => protocols/compound/resources}/Gov Weekly/Week 8 2021 25-02-21.md (100%) rename {compound => protocols/compound/resources}/Gov Weekly/Week 9 2021 03-03-21.md (100%) rename {compound => protocols/compound/resources}/calls/Compound Developer Community Call – Dec. 23, 16:30 GMT.md (100%) rename {compound => protocols/compound/resources}/calls/Compound Developer Community Call – Dec. 9, 16:30 GMT.md (100%) rename {compound => protocols/compound/resources}/calls/Compound Developer Community Call – Jan. 13, 16:30 GMT.md (100%) rename {compound => protocols/compound/resources}/calls/Compound Developer Community Call – Nov. 11, 16:30 GMT.md (100%) rename {compound => protocols/compound/resources}/calls/Compound Developer Community Call – Nov. 25, 16:30 GMT.md (100%) rename {compound => protocols/compound/resources}/calls/First Compound Developer Community Call – Oct. 28, 16:30 GMT.md (100%) create mode 100644 protocols/compoundgrants/contracts/governance.json create mode 100644 protocols/compoundgrants/contracts/token.json rename {rarible => protocols/compoundgrants}/events.json (100%) create mode 100644 protocols/compoundgrants/header.png create mode 100644 protocols/compoundgrants/index.json create mode 100644 protocols/compoundgrants/logo.png rename {compoundgrants => protocols/compoundgrants}/overview.md (100%) create mode 100644 protocols/defidollar/contracts/token.json rename {siren => protocols/defidollar}/events.json (100%) rename {defidollar => protocols/defidollar}/header.png (100%) create mode 100644 protocols/defidollar/index.json rename {defidollar => protocols/defidollar}/logo.png (100%) rename {defidollar => protocols/defidollar}/overview.md (100%) rename {defidollar => protocols/defidollar/resources}/Documentation/1. Getting Started.md (100%) rename {defidollar => protocols/defidollar/resources}/Documentation/2. Interacting with DUSD.md (100%) rename {defidollar => protocols/defidollar/resources}/Documentation/3. Audits.md (100%) rename {defidollar => protocols/defidollar/resources}/Documentation/4. Roadmap.md (100%) rename {defidollar => protocols/defidollar/resources}/FAQs/Collection of FAQ's Pertaining to the DefiDollar Ecosystem.md (100%) create mode 100644 protocols/gnosis.eth/contracts/token.json rename {synthetix => protocols/gnosis.eth}/events.json (100%) rename {gnosis.eth => protocols/gnosis.eth}/header.png (100%) create mode 100644 protocols/gnosis.eth/index.json rename {gnosis.eth => protocols/gnosis.eth}/logo.png (100%) rename {gnosis.eth => protocols/gnosis.eth}/overview.md (100%) rename {gnosis.eth => protocols/gnosis.eth/resources}/Gov Weekly/Update Week 11 2021 18-03-21.md (100%) rename {gnosis.eth => protocols/gnosis.eth/resources}/Gov Weekly/Update Week 12 2021 24-03-21.md (100%) rename {gnosis.eth => protocols/gnosis.eth/resources}/Gov Weekly/Update Week 7 2021 02-16-21.md (100%) rename {gnosis.eth => protocols/gnosis.eth/resources}/Gov Weekly/Update Week 8 2021 02-22-21.md (100%) rename {pooltogether => protocols/gnosis.eth/resources}/calls/Call.md (100%) create mode 100644 protocols/indexCoop/contracts/token.json rename {indexCoop => protocols/indexCoop}/events.json (100%) rename {indexCoop => protocols/indexCoop}/header.png (100%) create mode 100644 protocols/indexCoop/index.json rename {indexCoop => protocols/indexCoop}/logo.png (100%) rename {indexCoop => protocols/indexCoop}/overview.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Development/Index Coop January Bounties.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Development/Technical Resources.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Gov Weekly/Week 10 2021 11-03-21.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Gov Weekly/Week 11 2021 18-03-21.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Gov Weekly/Week 12 2021 11-03-21.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Gov Weekly/Week 13 2021 01-04-21.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Gov Weekly/Week 14 2021 09-04-21.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Gov Weekly/Week 6 2021 11-02-21.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Gov Weekly/Week 7 2021 19-02-21.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Gov Weekly/Week 8 2021 20-02-21.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Gov Weekly/Week 9 2021 04-03-21.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Growth/About the Growth Working Group.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Growth/Advertisements.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Growth/BD Materials List.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Operations/Governance Call Notes.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Operations/Q1 2021 - OKRs.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Product/CGI.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Product/DPI.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Product/INDEX.md (100%) rename {indexCoop => protocols/indexCoop/resources}/Product/Product Materials.md (100%) create mode 100644 protocols/rally/contracts/token.json rename {uniswap => protocols/rally}/events.json (100%) rename {rally => protocols/rally}/header.png (100%) create mode 100644 protocols/rally/index.json rename {rally => protocols/rally}/logo.png (100%) rename {rally => protocols/rally}/overview.md (100%) create mode 100644 protocols/rarible/contracts/token.json rename {yamv2 => protocols/rarible}/events.json (100%) rename {rarible => protocols/rarible}/header.png (100%) create mode 100644 protocols/rarible/index.json rename {rarible => protocols/rarible}/logo.png (100%) rename {rarible => protocols/rarible}/overview.md (100%) rename {rarible => protocols/rarible/resources}/Gov Weekly/Week 9 2021 03-05-21.md (100%) rename {rarible => protocols/rarible/resources}/calls/Call.md (100%) create mode 100644 protocols/synthetix/contracts/governance.json create mode 100644 protocols/synthetix/contracts/token.json rename {yearn => protocols/synthetix}/events.json (100%) rename {synthetix => protocols/synthetix}/header.png (100%) create mode 100644 protocols/synthetix/index.json rename {synthetix => protocols/synthetix}/logo.png (100%) rename {synthetix => protocols/synthetix}/overview.md (100%) rename {synthetix => protocols/synthetix/resources}/Gov Weekly/Update Week 11 2021 18-03-21.md (100%) rename {synthetix => protocols/synthetix/resources}/Gov Weekly/Update Week 12 2021 03-25-21.md (100%) rename {synthetix => protocols/synthetix/resources}/Gov Weekly/Update Week 13 2021 01-04-21.md (100%) rename {synthetix => protocols/synthetix/resources}/Gov Weekly/Update Week 14 2021 08-04-21.md (100%) rename {synthetix => protocols/synthetix/resources}/Gov Weekly/Update Week 8 2021 02-25-21.md (100%) rename {synthetix => protocols/synthetix/resources}/Gov Weekly/Update Week 9 2021 03-05-21.md (100%) rename {synthetix => protocols/synthetix/resources}/calls/November 2020 - Synthetix Community Governance Call.md (100%) create mode 100644 protocols/uniswap/contracts/governance.json create mode 100644 protocols/uniswap/contracts/token.json create mode 100644 protocols/uniswap/events.json rename {uniswap => protocols/uniswap}/header.png (100%) create mode 100644 protocols/uniswap/index.json rename {uniswap => protocols/uniswap}/logo.png (100%) rename {uniswap => protocols/uniswap}/overview.md (100%) rename {uniswap => protocols/uniswap/resources}/Gov Weekly/Update Week 12 2021 24-03-21.md (100%) rename {uniswap => protocols/uniswap/resources}/Gov Weekly/Update Week 13 2021 01-04-21.md (100%) rename {uniswap => protocols/uniswap/resources}/Gov Weekly/Update Week 14 2021 08-04-21.md (100%) rename {uniswap => protocols/uniswap/resources}/Gov Weekly/Update Week 8 2021 02-22-21.md (100%) rename {uniswap => protocols/uniswap/resources}/Gov Weekly/Update Week 9 2021 03-05-21.md (100%) rename {uniswap => protocols/uniswap/resources}/calls/Community Call - Thursday 12 Nov 17:00 UTC.md (100%) create mode 100644 protocols/yup.eth/contracts/token.json rename {yup => protocols/yup.eth}/events.json (100%) rename {yup => protocols/yup.eth}/header.png (100%) create mode 100644 protocols/yup.eth/index.json rename {yup => protocols/yup.eth}/logo.png (100%) rename {yup => protocols/yup.eth}/overview.md (100%) rename {yup => protocols/yup.eth/resources}/Meeting & Events/Community Meeting Feb 18 18-02-21.md (100%) rename {yup => protocols/yup.eth/resources}/Meeting & Events/Community Meeting Feb 25 25-02-21.md (100%) delete mode 100644 rally/events.json delete mode 100644 rollup.config.js create mode 100644 scripts/build.ts create mode 100644 scripts/validate.ts create mode 100644 types.ts diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 0000000..5439e24 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,16 @@ +name: validate protocol info +on: + pull_request + +jobs: + validate-protocol-info: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v1 + + - name: Install dependencies + run: yarn + + - name: Validate + run: yarn validate diff --git a/.gitignore b/.gitignore index be73918..e48648c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ .DS_Store node_modules +dist # Remove some common IDE working directories .idea diff --git a/aave/Gov Weekly/Week 10 2021 11-03-21.md b/__unsupported/aave/Gov Weekly/Week 10 2021 11-03-21.md similarity index 100% rename from aave/Gov Weekly/Week 10 2021 11-03-21.md rename to __unsupported/aave/Gov Weekly/Week 10 2021 11-03-21.md diff --git a/aave/Gov Weekly/Week 11 2021 18-03-21.md b/__unsupported/aave/Gov Weekly/Week 11 2021 18-03-21.md similarity index 100% rename from aave/Gov Weekly/Week 11 2021 18-03-21.md rename to __unsupported/aave/Gov Weekly/Week 11 2021 18-03-21.md diff --git a/aave/Gov Weekly/Week 12 2021 24-03-21.md b/__unsupported/aave/Gov Weekly/Week 12 2021 24-03-21.md similarity index 100% rename from aave/Gov Weekly/Week 12 2021 24-03-21.md rename to __unsupported/aave/Gov Weekly/Week 12 2021 24-03-21.md diff --git a/aave/Gov Weekly/Week 8 2021 02-23-21.md b/__unsupported/aave/Gov Weekly/Week 8 2021 02-23-21.md similarity index 100% rename from aave/Gov Weekly/Week 8 2021 02-23-21.md rename to __unsupported/aave/Gov Weekly/Week 8 2021 02-23-21.md diff --git a/aave/Gov Weekly/Week 9 2021 03-04-21.md b/__unsupported/aave/Gov Weekly/Week 9 2021 03-04-21.md similarity index 100% rename from aave/Gov Weekly/Week 9 2021 03-04-21.md rename to __unsupported/aave/Gov Weekly/Week 9 2021 03-04-21.md diff --git a/aave/calls/.gitkeep b/__unsupported/aave/calls/.gitkeep similarity index 100% rename from aave/calls/.gitkeep rename to __unsupported/aave/calls/.gitkeep diff --git a/aave/events.json b/__unsupported/aave/events.json similarity index 100% rename from aave/events.json rename to __unsupported/aave/events.json diff --git a/aave/logo.png b/__unsupported/aave/logo.png similarity index 100% rename from aave/logo.png rename to __unsupported/aave/logo.png diff --git a/aave/overview.md b/__unsupported/aave/overview.md similarity index 100% rename from aave/overview.md rename to __unsupported/aave/overview.md diff --git a/balancer/calls/.gitkeep b/__unsupported/balancer/calls/.gitkeep similarity index 100% rename from balancer/calls/.gitkeep rename to __unsupported/balancer/calls/.gitkeep diff --git a/balancer/events.json b/__unsupported/balancer/events.json similarity index 100% rename from balancer/events.json rename to __unsupported/balancer/events.json diff --git a/balancer/logo.png b/__unsupported/balancer/logo.png similarity index 100% rename from balancer/logo.png rename to __unsupported/balancer/logo.png diff --git a/balancer/overview.md b/__unsupported/balancer/overview.md similarity index 100% rename from balancer/overview.md rename to __unsupported/balancer/overview.md diff --git a/dhedge/events.json b/__unsupported/dhedge/events.json similarity index 100% rename from dhedge/events.json rename to __unsupported/dhedge/events.json diff --git a/dhedge/header.png b/__unsupported/dhedge/header.png similarity index 100% rename from dhedge/header.png rename to __unsupported/dhedge/header.png diff --git a/dhedge/logo.png b/__unsupported/dhedge/logo.png similarity index 100% rename from dhedge/logo.png rename to __unsupported/dhedge/logo.png diff --git a/dhedge/overview.md b/__unsupported/dhedge/overview.md similarity index 100% rename from dhedge/overview.md rename to __unsupported/dhedge/overview.md diff --git a/gnosis/Gov Weekly/Update Week 9 2021, 03-05-2021.md b/__unsupported/gnosis/Gov Weekly/Update Week 9 2021, 03-05-2021.md similarity index 100% rename from gnosis/Gov Weekly/Update Week 9 2021, 03-05-2021.md rename to __unsupported/gnosis/Gov Weekly/Update Week 9 2021, 03-05-2021.md diff --git a/pooltogether/Gov Weekly/Update Week 11 2021 18-03-21.md b/__unsupported/pooltogether/Gov Weekly/Update Week 11 2021 18-03-21.md similarity index 100% rename from pooltogether/Gov Weekly/Update Week 11 2021 18-03-21.md rename to __unsupported/pooltogether/Gov Weekly/Update Week 11 2021 18-03-21.md diff --git a/pooltogether/Gov Weekly/Update Week 12 2021 26-03-21.md b/__unsupported/pooltogether/Gov Weekly/Update Week 12 2021 26-03-21.md similarity index 100% rename from pooltogether/Gov Weekly/Update Week 12 2021 26-03-21.md rename to __unsupported/pooltogether/Gov Weekly/Update Week 12 2021 26-03-21.md diff --git a/pooltogether/Gov Weekly/Update Week 13 2021 01-04-21.md b/__unsupported/pooltogether/Gov Weekly/Update Week 13 2021 01-04-21.md similarity index 100% rename from pooltogether/Gov Weekly/Update Week 13 2021 01-04-21.md rename to __unsupported/pooltogether/Gov Weekly/Update Week 13 2021 01-04-21.md diff --git a/pooltogether/Gov Weekly/Update Week 14 2021 08-04-21.md b/__unsupported/pooltogether/Gov Weekly/Update Week 14 2021 08-04-21.md similarity index 100% rename from pooltogether/Gov Weekly/Update Week 14 2021 08-04-21.md rename to __unsupported/pooltogether/Gov Weekly/Update Week 14 2021 08-04-21.md diff --git a/pooltogether/Gov Weekly/Update Week 8 2021 24-02-21.md b/__unsupported/pooltogether/Gov Weekly/Update Week 8 2021 24-02-21.md similarity index 100% rename from pooltogether/Gov Weekly/Update Week 8 2021 24-02-21.md rename to __unsupported/pooltogether/Gov Weekly/Update Week 8 2021 24-02-21.md diff --git a/pooltogether/Gov Weekly/Update Week 9 2021 03-03-21.md b/__unsupported/pooltogether/Gov Weekly/Update Week 9 2021 03-03-21.md similarity index 100% rename from pooltogether/Gov Weekly/Update Week 9 2021 03-03-21.md rename to __unsupported/pooltogether/Gov Weekly/Update Week 9 2021 03-03-21.md diff --git a/gnosis.eth/calls/Call.md b/__unsupported/pooltogether/calls/Call.md similarity index 100% rename from gnosis.eth/calls/Call.md rename to __unsupported/pooltogether/calls/Call.md diff --git a/compound/events.json b/__unsupported/pooltogether/events.json similarity index 100% rename from compound/events.json rename to __unsupported/pooltogether/events.json diff --git a/pooltogether/header.png b/__unsupported/pooltogether/header.png similarity index 100% rename from pooltogether/header.png rename to __unsupported/pooltogether/header.png diff --git a/pooltogether/logo.png b/__unsupported/pooltogether/logo.png similarity index 100% rename from pooltogether/logo.png rename to __unsupported/pooltogether/logo.png diff --git a/pooltogether/overview.md b/__unsupported/pooltogether/overview.md similarity index 100% rename from pooltogether/overview.md rename to __unsupported/pooltogether/overview.md diff --git a/powerpool/calls/.gitkeep b/__unsupported/powerpool/calls/.gitkeep similarity index 100% rename from powerpool/calls/.gitkeep rename to __unsupported/powerpool/calls/.gitkeep diff --git a/compoundgrants/events.json b/__unsupported/powerpool/events.json similarity index 100% rename from compoundgrants/events.json rename to __unsupported/powerpool/events.json diff --git a/powerpool/logo.png b/__unsupported/powerpool/logo.png similarity index 100% rename from powerpool/logo.png rename to __unsupported/powerpool/logo.png diff --git a/powerpool/overview.md b/__unsupported/powerpool/overview.md similarity index 100% rename from powerpool/overview.md rename to __unsupported/powerpool/overview.md diff --git a/siren/calls/.gitkeep b/__unsupported/siren/calls/.gitkeep similarity index 100% rename from siren/calls/.gitkeep rename to __unsupported/siren/calls/.gitkeep diff --git a/defidollar/events.json b/__unsupported/siren/events.json similarity index 100% rename from defidollar/events.json rename to __unsupported/siren/events.json diff --git a/siren/logo.png b/__unsupported/siren/logo.png similarity index 100% rename from siren/logo.png rename to __unsupported/siren/logo.png diff --git a/siren/overview.md b/__unsupported/siren/overview.md similarity index 100% rename from siren/overview.md rename to __unsupported/siren/overview.md diff --git a/yamv2/calls/.gitkeep b/__unsupported/yamv2/calls/.gitkeep similarity index 100% rename from yamv2/calls/.gitkeep rename to __unsupported/yamv2/calls/.gitkeep diff --git a/gnosis.eth/events.json b/__unsupported/yamv2/events.json similarity index 100% rename from gnosis.eth/events.json rename to __unsupported/yamv2/events.json diff --git a/yamv2/logo.png b/__unsupported/yamv2/logo.png similarity index 100% rename from yamv2/logo.png rename to __unsupported/yamv2/logo.png diff --git a/yamv2/overview.md b/__unsupported/yamv2/overview.md similarity index 100% rename from yamv2/overview.md rename to __unsupported/yamv2/overview.md diff --git a/yearn/calls/.gitkeep b/__unsupported/yearn/calls/.gitkeep similarity index 100% rename from yearn/calls/.gitkeep rename to __unsupported/yearn/calls/.gitkeep diff --git a/pooltogether/events.json b/__unsupported/yearn/events.json similarity index 100% rename from pooltogether/events.json rename to __unsupported/yearn/events.json diff --git a/yearn/logo.png b/__unsupported/yearn/logo.png similarity index 100% rename from yearn/logo.png rename to __unsupported/yearn/logo.png diff --git a/yearn/overview.md b/__unsupported/yearn/overview.md similarity index 100% rename from yearn/overview.md rename to __unsupported/yearn/overview.md diff --git a/compoundgrants/header.png b/compoundgrants/header.png deleted file mode 100644 index f3e6afc5aa7bbed2a5a105160271baf1ac14315a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53400 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 AO8@`> diff --git a/compoundgrants/logo.png b/compoundgrants/logo.png deleted file mode 100644 index 318c601cf7747c2cc1fded4c2a8109f74e0e161e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21365 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 diff --git a/package.json b/package.json index b6ebd99..1ed2a7c 100644 --- a/package.json +++ b/package.json @@ -1,17 +1,24 @@ { - "name": "boardroomInfo", - "version": "1.0.0", - "description": "Testing", - "main": "index.ts", - "repository": "https://github.com/boardroom-inc/testRepo.git", + "name": "@boardroom/protocol-info", + "version": "2.0.1", + "description": "Project information which will be served to display on the Boardroom Governance Portal.", + "main": "dist/index.ts", + "repository": "https://github.com/boardroom-inc/protocol-Info.git", "author": "sudheer ", "license": "MIT", "devDependencies": { - "@rollup/plugin-typescript": "^8.1.1", + "@types/mkdirp": "^1.0.1", + "@types/node": "^14.14.37", + "fp-ts": "^2.9.5", + "io-ts": "^2.2.16", + "io-ts-validator": "^0.0.5", + "mkdirp": "^1.0.4", + "ts-node": "^9.1.1", "tslib": "^2.1.0", "typescript": "^4.1.3" }, "scripts": { - "build": "rollup -c" + "build": "ts-node ./scripts/build.ts", + "validate": "yarn build && ts-node ./scripts/validate.ts" } } diff --git a/protocols/compound/contracts/governance.json b/protocols/compound/contracts/governance.json new file mode 100644 index 0000000..724f68a --- /dev/null +++ b/protocols/compound/contracts/governance.json @@ -0,0 +1,755 @@ +[ + { + "inputs":[ + { + "internalType":"address", + "name":"timelock_", + "type":"address" + }, + { + "internalType":"address", + "name":"comp_", + "type":"address" + }, + { + "internalType":"address", + "name":"guardian_", + "type":"address" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"constructor", + "signature":"constructor" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"id", + "type":"uint256" + } + ], + "name":"ProposalCanceled", + "type":"event", + "signature":"0x789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"id", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"address", + "name":"proposer", + "type":"address" + }, + { + "indexed":false, + "internalType":"address[]", + "name":"targets", + "type":"address[]" + }, + { + "indexed":false, + "internalType":"uint256[]", + "name":"values", + "type":"uint256[]" + }, + { + "indexed":false, + "internalType":"string[]", + "name":"signatures", + "type":"string[]" + }, + { + "indexed":false, + "internalType":"bytes[]", + "name":"calldatas", + "type":"bytes[]" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"startBlock", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"endBlock", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"string", + "name":"description", + "type":"string" + } + ], + "name":"ProposalCreated", + "type":"event", + "signature":"0x7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e0" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"id", + "type":"uint256" + } + ], + "name":"ProposalExecuted", + "type":"event", + "signature":"0x712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"id", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"eta", + "type":"uint256" + } + ], + "name":"ProposalQueued", + "type":"event", + "signature":"0x9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"address", + "name":"voter", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"bool", + "name":"support", + "type":"bool" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"votes", + "type":"uint256" + } + ], + "name":"VoteCast", + "type":"event", + "signature":"0x877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c46" + }, + { + "constant":true, + "inputs":[], + "name":"BALLOT_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0xdeaaa7cc" + }, + { + "constant":true, + "inputs":[], + "name":"DOMAIN_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x20606b70" + }, + { + "constant":false, + "inputs":[], + "name":"__abdicate", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0x760fbc13" + }, + { + "constant":false, + "inputs":[], + "name":"__acceptAdmin", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0xb9a61961" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"newPendingAdmin", + "type":"address" + }, + { + "internalType":"uint256", + "name":"eta", + "type":"uint256" + } + ], + "name":"__executeSetTimelockPendingAdmin", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0x21f43e42" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"newPendingAdmin", + "type":"address" + }, + { + "internalType":"uint256", + "name":"eta", + "type":"uint256" + } + ], + "name":"__queueSetTimelockPendingAdmin", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0x91500671" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"cancel", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0x40e58ee5" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + }, + { + "internalType":"bool", + "name":"support", + "type":"bool" + } + ], + "name":"castVote", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0x15373e3d" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + }, + { + "internalType":"bool", + "name":"support", + "type":"bool" + }, + { + "internalType":"uint8", + "name":"v", + "type":"uint8" + }, + { + "internalType":"bytes32", + "name":"r", + "type":"bytes32" + }, + { + "internalType":"bytes32", + "name":"s", + "type":"bytes32" + } + ], + "name":"castVoteBySig", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0x4634c61f" + }, + { + "constant":true, + "inputs":[], + "name":"comp", + "outputs":[ + { + "internalType":"contract CompInterface", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x109d0af8" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"execute", + "outputs":[], + "payable":true, + "stateMutability":"payable", + "type":"function", + "signature":"0xfe0d94c1" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"getActions", + "outputs":[ + { + "internalType":"address[]", + "name":"targets", + "type":"address[]" + }, + { + "internalType":"uint256[]", + "name":"values", + "type":"uint256[]" + }, + { + "internalType":"string[]", + "name":"signatures", + "type":"string[]" + }, + { + "internalType":"bytes[]", + "name":"calldatas", + "type":"bytes[]" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x328dd982" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + }, + { + "internalType":"address", + "name":"voter", + "type":"address" + } + ], + "name":"getReceipt", + "outputs":[ + { + "components":[ + { + "internalType":"bool", + "name":"hasVoted", + "type":"bool" + }, + { + "internalType":"bool", + "name":"support", + "type":"bool" + }, + { + "internalType":"uint96", + "name":"votes", + "type":"uint96" + } + ], + "internalType":"struct GovernorAlpha.Receipt", + "name":"", + "type":"tuple" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0xe23a9a52" + }, + { + "constant":true, + "inputs":[], + "name":"guardian", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x452a9320" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"latestProposalIds", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x17977c61" + }, + { + "constant":true, + "inputs":[], + "name":"name", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x06fdde03" + }, + { + "constant":true, + "inputs":[], + "name":"proposalCount", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0xda35c664" + }, + { + "constant":true, + "inputs":[], + "name":"proposalMaxOperations", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function", + "signature":"0x7bdbe4d0" + }, + { + "constant":true, + "inputs":[], + "name":"proposalThreshold", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function", + "signature":"0xb58131b0" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "name":"proposals", + "outputs":[ + { + "internalType":"uint256", + "name":"id", + "type":"uint256" + }, + { + "internalType":"address", + "name":"proposer", + "type":"address" + }, + { + "internalType":"uint256", + "name":"eta", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"startBlock", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"endBlock", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"forVotes", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"againstVotes", + "type":"uint256" + }, + { + "internalType":"bool", + "name":"canceled", + "type":"bool" + }, + { + "internalType":"bool", + "name":"executed", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x013cf08b" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address[]", + "name":"targets", + "type":"address[]" + }, + { + "internalType":"uint256[]", + "name":"values", + "type":"uint256[]" + }, + { + "internalType":"string[]", + "name":"signatures", + "type":"string[]" + }, + { + "internalType":"bytes[]", + "name":"calldatas", + "type":"bytes[]" + }, + { + "internalType":"string", + "name":"description", + "type":"string" + } + ], + "name":"propose", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0xda95691a" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"queue", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0xddf0b009" + }, + { + "constant":true, + "inputs":[], + "name":"quorumVotes", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function", + "signature":"0x24bc1a64" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"state", + "outputs":[ + { + "internalType":"enum GovernorAlpha.ProposalState", + "name":"", + "type":"uint8" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x3e4f49e6" + }, + { + "constant":true, + "inputs":[], + "name":"timelock", + "outputs":[ + { + "internalType":"contract TimelockInterface", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0xd33219b4" + }, + { + "constant":true, + "inputs":[], + "name":"votingDelay", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function", + "signature":"0x3932abb1" + }, + { + "constant":true, + "inputs":[], + "name":"votingPeriod", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function", + "signature":"0x02a251a3" + } +] diff --git a/protocols/compound/contracts/token.json b/protocols/compound/contracts/token.json new file mode 100644 index 0000000..0122903 --- /dev/null +++ b/protocols/compound/contracts/token.json @@ -0,0 +1,530 @@ +[ + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"constructor" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"owner", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"Approval", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"delegator", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"fromDelegate", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"toDelegate", + "type":"address" + } + ], + "name":"DelegateChanged", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"delegate", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"previousBalance", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"newBalance", + "type":"uint256" + } + ], + "name":"DelegateVotesChanged", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"from", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"Transfer", + "type":"event" + }, + { + "constant":true, + "inputs":[], + "name":"DELEGATION_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"DOMAIN_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"address", + "name":"spender", + "type":"address" + } + ], + "name":"allowance", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + } + ], + "name":"approve", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"balanceOf", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + }, + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "name":"checkpoints", + "outputs":[ + { + "internalType":"uint32", + "name":"fromBlock", + "type":"uint32" + }, + { + "internalType":"uint96", + "name":"votes", + "type":"uint96" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"decimals", + "outputs":[ + { + "internalType":"uint8", + "name":"", + "type":"uint8" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"delegatee", + "type":"address" + } + ], + "name":"delegate", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"delegatee", + "type":"address" + }, + { + "internalType":"uint256", + "name":"nonce", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"expiry", + "type":"uint256" + }, + { + "internalType":"uint8", + "name":"v", + "type":"uint8" + }, + { + "internalType":"bytes32", + "name":"r", + "type":"bytes32" + }, + { + "internalType":"bytes32", + "name":"s", + "type":"bytes32" + } + ], + "name":"delegateBySig", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"delegates", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"getCurrentVotes", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"uint256", + "name":"blockNumber", + "type":"uint256" + } + ], + "name":"getPriorVotes", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"name", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"nonces", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"numCheckpoints", + "outputs":[ + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"symbol", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"totalSupply", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"dst", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + } + ], + "name":"transfer", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"src", + "type":"address" + }, + { + "internalType":"address", + "name":"dst", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + } + ], + "name":"transferFrom", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + } +] diff --git a/powerpool/events.json b/protocols/compound/events.json similarity index 100% rename from powerpool/events.json rename to protocols/compound/events.json diff --git a/compound/header.png b/protocols/compound/header.png similarity index 100% rename from compound/header.png rename to protocols/compound/header.png diff --git a/protocols/compound/index.json b/protocols/compound/index.json new file mode 100644 index 0000000..964949e --- /dev/null +++ b/protocols/compound/index.json @@ -0,0 +1,20 @@ +{ + "name": "Compound", + "description": "Compound is a decentralized money market protocol to borrow and lend assets.", + "path": "compound", + "folder": "compound", + "type": "compoundish", + "suffix": "COMP", + "coinGeckoPriceString": "compound-governance-token", + "tokenContractAddress": "0xc00e94Cb662C3520282E6f5717214004A7f26888", + "governanceContractAddress": "0xc0da01a04c3f3e0be433606045bb7017a7323e38", + "isEnabled": true, + "hasOnchain": true, + "isHybrid": false, + "hasDelegation": true, + "snapshotSpaceName": "compound", + "invalidSnapshots": [], + "branding": {}, + "discourseForum": {}, + "safeAddress": null +} diff --git a/compound/logo.png b/protocols/compound/logo.png similarity index 100% rename from compound/logo.png rename to protocols/compound/logo.png diff --git a/compound/overview.md b/protocols/compound/overview.md similarity index 100% rename from compound/overview.md rename to protocols/compound/overview.md diff --git a/compound/Gov Weekly/Week 10 2021 10-03-21.md b/protocols/compound/resources/Gov Weekly/Week 10 2021 10-03-21.md similarity index 100% rename from compound/Gov Weekly/Week 10 2021 10-03-21.md rename to protocols/compound/resources/Gov Weekly/Week 10 2021 10-03-21.md diff --git a/compound/Gov Weekly/Week 11 2021 17-03-21.md b/protocols/compound/resources/Gov Weekly/Week 11 2021 17-03-21.md similarity index 100% rename from compound/Gov Weekly/Week 11 2021 17-03-21.md rename to protocols/compound/resources/Gov Weekly/Week 11 2021 17-03-21.md diff --git a/compound/Gov Weekly/Week 12 2021 24-03-21.md b/protocols/compound/resources/Gov Weekly/Week 12 2021 24-03-21.md similarity index 100% rename from compound/Gov Weekly/Week 12 2021 24-03-21.md rename to protocols/compound/resources/Gov Weekly/Week 12 2021 24-03-21.md diff --git a/compound/Gov Weekly/Week 13 2021 31-03-21.md b/protocols/compound/resources/Gov Weekly/Week 13 2021 31-03-21.md similarity index 100% rename from compound/Gov Weekly/Week 13 2021 31-03-21.md rename to protocols/compound/resources/Gov Weekly/Week 13 2021 31-03-21.md diff --git a/compound/Gov Weekly/Week 14 2021 07-04-21.md b/protocols/compound/resources/Gov Weekly/Week 14 2021 07-04-21.md similarity index 100% rename from compound/Gov Weekly/Week 14 2021 07-04-21.md rename to protocols/compound/resources/Gov Weekly/Week 14 2021 07-04-21.md diff --git a/compound/Gov Weekly/Week 8 2021 25-02-21.md b/protocols/compound/resources/Gov Weekly/Week 8 2021 25-02-21.md similarity index 100% rename from compound/Gov Weekly/Week 8 2021 25-02-21.md rename to protocols/compound/resources/Gov Weekly/Week 8 2021 25-02-21.md diff --git a/compound/Gov Weekly/Week 9 2021 03-03-21.md b/protocols/compound/resources/Gov Weekly/Week 9 2021 03-03-21.md similarity index 100% rename from compound/Gov Weekly/Week 9 2021 03-03-21.md rename to protocols/compound/resources/Gov Weekly/Week 9 2021 03-03-21.md diff --git a/compound/calls/Compound Developer Community Call – Dec. 23, 16:30 GMT.md b/protocols/compound/resources/calls/Compound Developer Community Call – Dec. 23, 16:30 GMT.md similarity index 100% rename from compound/calls/Compound Developer Community Call – Dec. 23, 16:30 GMT.md rename to protocols/compound/resources/calls/Compound Developer Community Call – Dec. 23, 16:30 GMT.md diff --git a/compound/calls/Compound Developer Community Call – Dec. 9, 16:30 GMT.md b/protocols/compound/resources/calls/Compound Developer Community Call – Dec. 9, 16:30 GMT.md similarity index 100% rename from compound/calls/Compound Developer Community Call – Dec. 9, 16:30 GMT.md rename to protocols/compound/resources/calls/Compound Developer Community Call – Dec. 9, 16:30 GMT.md diff --git a/compound/calls/Compound Developer Community Call – Jan. 13, 16:30 GMT.md b/protocols/compound/resources/calls/Compound Developer Community Call – Jan. 13, 16:30 GMT.md similarity index 100% rename from compound/calls/Compound Developer Community Call – Jan. 13, 16:30 GMT.md rename to protocols/compound/resources/calls/Compound Developer Community Call – Jan. 13, 16:30 GMT.md diff --git a/compound/calls/Compound Developer Community Call – Nov. 11, 16:30 GMT.md b/protocols/compound/resources/calls/Compound Developer Community Call – Nov. 11, 16:30 GMT.md similarity index 100% rename from compound/calls/Compound Developer Community Call – Nov. 11, 16:30 GMT.md rename to protocols/compound/resources/calls/Compound Developer Community Call – Nov. 11, 16:30 GMT.md diff --git a/compound/calls/Compound Developer Community Call – Nov. 25, 16:30 GMT.md b/protocols/compound/resources/calls/Compound Developer Community Call – Nov. 25, 16:30 GMT.md similarity index 100% rename from compound/calls/Compound Developer Community Call – Nov. 25, 16:30 GMT.md rename to protocols/compound/resources/calls/Compound Developer Community Call – Nov. 25, 16:30 GMT.md diff --git a/compound/calls/First Compound Developer Community Call – Oct. 28, 16:30 GMT.md b/protocols/compound/resources/calls/First Compound Developer Community Call – Oct. 28, 16:30 GMT.md similarity index 100% rename from compound/calls/First Compound Developer Community Call – Oct. 28, 16:30 GMT.md rename to protocols/compound/resources/calls/First Compound Developer Community Call – Oct. 28, 16:30 GMT.md diff --git a/protocols/compoundgrants/contracts/governance.json b/protocols/compoundgrants/contracts/governance.json new file mode 100644 index 0000000..724f68a --- /dev/null +++ b/protocols/compoundgrants/contracts/governance.json @@ -0,0 +1,755 @@ +[ + { + "inputs":[ + { + "internalType":"address", + "name":"timelock_", + "type":"address" + }, + { + "internalType":"address", + "name":"comp_", + "type":"address" + }, + { + "internalType":"address", + "name":"guardian_", + "type":"address" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"constructor", + "signature":"constructor" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"id", + "type":"uint256" + } + ], + "name":"ProposalCanceled", + "type":"event", + "signature":"0x789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"id", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"address", + "name":"proposer", + "type":"address" + }, + { + "indexed":false, + "internalType":"address[]", + "name":"targets", + "type":"address[]" + }, + { + "indexed":false, + "internalType":"uint256[]", + "name":"values", + "type":"uint256[]" + }, + { + "indexed":false, + "internalType":"string[]", + "name":"signatures", + "type":"string[]" + }, + { + "indexed":false, + "internalType":"bytes[]", + "name":"calldatas", + "type":"bytes[]" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"startBlock", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"endBlock", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"string", + "name":"description", + "type":"string" + } + ], + "name":"ProposalCreated", + "type":"event", + "signature":"0x7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e0" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"id", + "type":"uint256" + } + ], + "name":"ProposalExecuted", + "type":"event", + "signature":"0x712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"id", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"eta", + "type":"uint256" + } + ], + "name":"ProposalQueued", + "type":"event", + "signature":"0x9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda2892" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"address", + "name":"voter", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"bool", + "name":"support", + "type":"bool" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"votes", + "type":"uint256" + } + ], + "name":"VoteCast", + "type":"event", + "signature":"0x877856338e13f63d0c36822ff0ef736b80934cd90574a3a5bc9262c39d217c46" + }, + { + "constant":true, + "inputs":[], + "name":"BALLOT_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0xdeaaa7cc" + }, + { + "constant":true, + "inputs":[], + "name":"DOMAIN_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x20606b70" + }, + { + "constant":false, + "inputs":[], + "name":"__abdicate", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0x760fbc13" + }, + { + "constant":false, + "inputs":[], + "name":"__acceptAdmin", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0xb9a61961" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"newPendingAdmin", + "type":"address" + }, + { + "internalType":"uint256", + "name":"eta", + "type":"uint256" + } + ], + "name":"__executeSetTimelockPendingAdmin", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0x21f43e42" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"newPendingAdmin", + "type":"address" + }, + { + "internalType":"uint256", + "name":"eta", + "type":"uint256" + } + ], + "name":"__queueSetTimelockPendingAdmin", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0x91500671" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"cancel", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0x40e58ee5" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + }, + { + "internalType":"bool", + "name":"support", + "type":"bool" + } + ], + "name":"castVote", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0x15373e3d" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + }, + { + "internalType":"bool", + "name":"support", + "type":"bool" + }, + { + "internalType":"uint8", + "name":"v", + "type":"uint8" + }, + { + "internalType":"bytes32", + "name":"r", + "type":"bytes32" + }, + { + "internalType":"bytes32", + "name":"s", + "type":"bytes32" + } + ], + "name":"castVoteBySig", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0x4634c61f" + }, + { + "constant":true, + "inputs":[], + "name":"comp", + "outputs":[ + { + "internalType":"contract CompInterface", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x109d0af8" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"execute", + "outputs":[], + "payable":true, + "stateMutability":"payable", + "type":"function", + "signature":"0xfe0d94c1" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"getActions", + "outputs":[ + { + "internalType":"address[]", + "name":"targets", + "type":"address[]" + }, + { + "internalType":"uint256[]", + "name":"values", + "type":"uint256[]" + }, + { + "internalType":"string[]", + "name":"signatures", + "type":"string[]" + }, + { + "internalType":"bytes[]", + "name":"calldatas", + "type":"bytes[]" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x328dd982" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + }, + { + "internalType":"address", + "name":"voter", + "type":"address" + } + ], + "name":"getReceipt", + "outputs":[ + { + "components":[ + { + "internalType":"bool", + "name":"hasVoted", + "type":"bool" + }, + { + "internalType":"bool", + "name":"support", + "type":"bool" + }, + { + "internalType":"uint96", + "name":"votes", + "type":"uint96" + } + ], + "internalType":"struct GovernorAlpha.Receipt", + "name":"", + "type":"tuple" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0xe23a9a52" + }, + { + "constant":true, + "inputs":[], + "name":"guardian", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x452a9320" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"latestProposalIds", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x17977c61" + }, + { + "constant":true, + "inputs":[], + "name":"name", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x06fdde03" + }, + { + "constant":true, + "inputs":[], + "name":"proposalCount", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0xda35c664" + }, + { + "constant":true, + "inputs":[], + "name":"proposalMaxOperations", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function", + "signature":"0x7bdbe4d0" + }, + { + "constant":true, + "inputs":[], + "name":"proposalThreshold", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function", + "signature":"0xb58131b0" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "name":"proposals", + "outputs":[ + { + "internalType":"uint256", + "name":"id", + "type":"uint256" + }, + { + "internalType":"address", + "name":"proposer", + "type":"address" + }, + { + "internalType":"uint256", + "name":"eta", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"startBlock", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"endBlock", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"forVotes", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"againstVotes", + "type":"uint256" + }, + { + "internalType":"bool", + "name":"canceled", + "type":"bool" + }, + { + "internalType":"bool", + "name":"executed", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x013cf08b" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address[]", + "name":"targets", + "type":"address[]" + }, + { + "internalType":"uint256[]", + "name":"values", + "type":"uint256[]" + }, + { + "internalType":"string[]", + "name":"signatures", + "type":"string[]" + }, + { + "internalType":"bytes[]", + "name":"calldatas", + "type":"bytes[]" + }, + { + "internalType":"string", + "name":"description", + "type":"string" + } + ], + "name":"propose", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0xda95691a" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"queue", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function", + "signature":"0xddf0b009" + }, + { + "constant":true, + "inputs":[], + "name":"quorumVotes", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function", + "signature":"0x24bc1a64" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"state", + "outputs":[ + { + "internalType":"enum GovernorAlpha.ProposalState", + "name":"", + "type":"uint8" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0x3e4f49e6" + }, + { + "constant":true, + "inputs":[], + "name":"timelock", + "outputs":[ + { + "internalType":"contract TimelockInterface", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function", + "signature":"0xd33219b4" + }, + { + "constant":true, + "inputs":[], + "name":"votingDelay", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function", + "signature":"0x3932abb1" + }, + { + "constant":true, + "inputs":[], + "name":"votingPeriod", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function", + "signature":"0x02a251a3" + } +] diff --git a/protocols/compoundgrants/contracts/token.json b/protocols/compoundgrants/contracts/token.json new file mode 100644 index 0000000..0122903 --- /dev/null +++ b/protocols/compoundgrants/contracts/token.json @@ -0,0 +1,530 @@ +[ + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"constructor" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"owner", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"Approval", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"delegator", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"fromDelegate", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"toDelegate", + "type":"address" + } + ], + "name":"DelegateChanged", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"delegate", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"previousBalance", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"newBalance", + "type":"uint256" + } + ], + "name":"DelegateVotesChanged", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"from", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"Transfer", + "type":"event" + }, + { + "constant":true, + "inputs":[], + "name":"DELEGATION_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"DOMAIN_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"address", + "name":"spender", + "type":"address" + } + ], + "name":"allowance", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + } + ], + "name":"approve", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"balanceOf", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + }, + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "name":"checkpoints", + "outputs":[ + { + "internalType":"uint32", + "name":"fromBlock", + "type":"uint32" + }, + { + "internalType":"uint96", + "name":"votes", + "type":"uint96" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"decimals", + "outputs":[ + { + "internalType":"uint8", + "name":"", + "type":"uint8" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"delegatee", + "type":"address" + } + ], + "name":"delegate", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"delegatee", + "type":"address" + }, + { + "internalType":"uint256", + "name":"nonce", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"expiry", + "type":"uint256" + }, + { + "internalType":"uint8", + "name":"v", + "type":"uint8" + }, + { + "internalType":"bytes32", + "name":"r", + "type":"bytes32" + }, + { + "internalType":"bytes32", + "name":"s", + "type":"bytes32" + } + ], + "name":"delegateBySig", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"delegates", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"getCurrentVotes", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"uint256", + "name":"blockNumber", + "type":"uint256" + } + ], + "name":"getPriorVotes", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"name", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"nonces", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"numCheckpoints", + "outputs":[ + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"symbol", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"totalSupply", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"dst", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + } + ], + "name":"transfer", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"src", + "type":"address" + }, + { + "internalType":"address", + "name":"dst", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + } + ], + "name":"transferFrom", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + } +] diff --git a/rarible/events.json b/protocols/compoundgrants/events.json similarity index 100% rename from rarible/events.json rename to protocols/compoundgrants/events.json diff --git a/protocols/compoundgrants/header.png b/protocols/compoundgrants/header.png new file mode 100644 index 0000000000000000000000000000000000000000..555f6b15f302be0fca657f50e52b8cc19d0e2d04 GIT binary patch literal 12834 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 d<9qD088xLZb}9R}?M?^rn zH0iyQPy;FN;Jx4fe&2d;t+(EKb5>@4ne4sK{PvkMv-gBFN}2&!G*vZJ0WvZGPzNu7 zGz$c(cstqwfR+{@0ssIlKt;v|P=JUGya2Kb0M#E10Gec6|G~Osm;R9<2Y@g~fbt)i zhhTeJK+C7v|Fq;E$p0fz@qyxBd@4%X1f(B0IJrByIXF4<-ne=VkiMg#MR{rwEPt@z zAILJq^JWYUlu@n*(!JX_x`QOmk$=!oQnGlUtF5YWPvs9O^5|#Q&)q1m0l@PY?ykCO zcX*9W9`gRt|EIFDc5_yI@ZjEm@B5$l;MbqA1A|viZT-*R{;%H{Y;4`ELGrYqq_nlO zt2>AlKz!fJ-T4$pgP6nG!O8~2*&r5k1qTS?zSI84f8&KyZ2vbtI>oN~x=H{*&In>& z`@gZ+DSrGnKIOt|?cn+xlz9f?i_f2VfMfVmPM-p!?F$1vu;u>qaRYP#HQ)}w3p@rq z07u{%;0{~?+ZUkE{?B^X|LENZoIo9GuyzJ~09R1M9&iA4#lT()lSsSZyrW40074jvbdpIT5wZY)ViW+H;{VlmiU-}f z1@=e(+jlV)03bmC@TKA3zQ;KL@D=p&xhZEWSF1nwp#W=gJ8*_$a{++K1OV7UU(-MO z|NZ@Me}lG9?E_gO0HE&&0QY(T;C(Ux2!Z#5n37rmR$8C}sGuO@2gq5;C|JozZ2%19 zPDS>ooT`F_f}E0!3ZSN;rK4v61zK4EG77Mdf|8n&hMJO=+Kr4HpkSqBP4K^P%@Nt<~0 z7R!O)taHwD!YWd>Mdc{M}33Of4p7cN~Ek(RlwuAylJI@8|4@rjqW zk8fyL`0I%1#H4rclRxBq%+33hUsCzyYgKhkQ(ODDj_;j6`i6#ojf{?s&nzr1Ew8Mu z?e6U#93J70Pg#-y6n~Qh>pv_{Nl;S#%aRo!CkJ^_kW)~RQ;}0rhLM3jqF`a;qvVxP zWT(2ue_e+|f%=Ak)txggx;I}wxEPb6RC<=?@h!cbenHD-GgK{ZHkHv51)7rmt@A`!d3SM z+W78f>9?44>U`aIj4<;D|zqXPYcUyljy^}@fvoP98#Sx(h;9M|(D&Z6&W z){smAgU)`M*|hUP?()g!GJ=!rH+Od?to;7FUyTN3l|}b5EhO&X4vwOd3U?W53kGpd z8XES!DUYT2d^|1)?aHPk`(+&9%{Z;wVej_^jT&KktrDJN4ch&C3n$WVe;T{{M(j*k zsjT>S;_izq9*W7zYW=WCV=gb;g~#qObRE_)_5Pk5FoR^}&je8P_P!i{&3c@M?Z#rP;Bk;qt_h7rezddQTsKFnF^0Y zcO5?Jg1v{1F9fW>16GU%a9&EidxuFLY9k8A3Ok;1s~E`Y&7}DO!*FQfw|AAhBtX;7 ze_D34`fOO!{^j}GF?&T1t6K}gv-d?pcYI()cuJyCj!pR?nV_fDa6&+FSiD4o*S#psy836+YXxT|7R?gt%$i_|^zH-u6)5 z)ccaXlB|DEU()?m!uQIKw~?72$L(!b4aeiY|QOl#c6x8KXHHFliRN%qrLjk=L`*FqU+k4sQcuL8$W*LWS&oK4;e#cZH*Uh#SSG1 zSLkZ6R!&~vIGbK;zBs)lUCEZC8uGm$ATNojkQL4o$4~b}Q-68l^MaSG|IR^WRqUjp zm(K63?JcjiBO zF(KwtNFOk{j902)*C78ab!ow4)8j>Cc#)MUTeHY);NdV+;eEdw9&V+v zA+g4bueJ<+hfJ6cm1b1@P7LD+Pn4e;rc*kVUqgh;XDAqN!#0(iNC0#jRdr6N;&)b3 z<<><0K(@$J@0`Rny6S#2Q(hG}#&Y@B_9?Zfio-Gz5H3H0SKQ1KDW9gnbXmXc;`wTU zIehAOllj*c*Go62Gc7L;a8|yow-Pw{4jl^LStrVmIy{%UmC-IDq_Q;4@pEbFk%tzep67p4X((1|p`2x2CUc)&9MvG$qCr@_f8UH-L~i ztDdIy;6NOcI)PW*Xq@AU$45F{iGrq0^fX@QEH_<<8u8RIl`SxN-ut_R1n^jtfU=)^ zM9dP3e%;m7;qW@7p7XZWA5;$RfIWuJKYPBU86Wce(6LJGF&SryrC#iBB*b>xg5T%9sb%p0-xf8F61&Y#NZ=N{vEdK1IUkrxsCLmy(Q zUQpkkFi3mCvpTg#X{zSsBv>=~aj8PuKEmd(wj{#K{_96NSu=}firSjQnfgX2QOgGb zIF|S9K3_gDt|(sCmwns)oU6uo^2%L;u)}c8M75Ny%vO<*RWoCpNQaX$!ne_PZh-40 ze5hpMYnqhK@94pyxzg&G=1SEIEb+oygC#_(2W?*pxbA$Lv>UX4mdF+#3ZFem|MS9w zu@Qo7P)L2AQ#cQo7bQV$hB8QLCIKcSz%adsN82cJs0#VS`pv7~Jmz8~AoyV4O#im` zi@3O}$XY>pskS@hSXbluHwaqa=~%*5MS5osCx<)H%#rTNXw`jyz{-xG7z(YuI$blI5a4qM^$!z zaH-~P$w5cK4ncDCB&>4;)-@Y{kOqrc5gdw1;*!>+&iTlkC3N1@q{$;d3SRteQTq1V z+!5`#n69CBB;b8JQ#5PekyY@*duDi+xT?40xusQKj2?C$bv_9q5Pe+FiIYP$;p62S z@;i=9eZDGiip$&M&k%8gaBs_~)uglDc5j=iCG1x1o;e$9LyUNG!=%*WAbdwtjePIg z;Y!%iEHq+bZO>u>LjovvQQu%Q&T*UV>n}ToMdxjs z4;pT+*8EPDInky)Xi%b_lktUML53l?;(7FrJX{f-{RX|TS1NC$XMaD7w&zWAYhnO1 z($q&Fkt=f_#f3%)yxQl1n*X(%+lC_7?r2NP7pga{KPy))-`RNi*J~0W3JaS%*0$ry zSy&(0lUNh5?h4B9>c1a3=uuT3`P!CDLKkARGea1)c)MyJcAkA76*JI*^_@RyaYDOZ@7?^H3(SrXvCPl46$+&7V?3ey<&5b8bQ%s#5JlFjKn zW(&4m5T=&J^My*QHK{rMnT=qujv(7E&hXWnZOoRvpZkyyylQs%X_F`6!{((ep2I1R z3x-L1PBkRJ@}KRB8bN+Sa0Q4_w?y~h@fqTWSv#l(g7$>Q3CvUhANeZ}!KojOwD`GS zV8OR!#^U369rU-d4z}LULaZ^7xP$uf0AeO4GVr1c4YjJi366|!FpINk(SkV?8&Zq zTQ02N!%3M};oaQU&R~tc;^Ap3bj+T&_y)XCJxXA|qyk51S4V!+|E%v_Q*h`wkMRvy zg>Q4mt(b>K5aLF&F<7w-WZxXdsH6dbsP2OPK!gMfkIP-K)=rv^4NPxfmwFiBKl)%7 zxf7FjP|H}Kz2bKn`7!}2Z1^esz#ZnJx%By_VLaCRH!7G%*Oh7^Dx^jo{k3ab%~03- zY+mo;O>dl-CoQ4UQ(^ZuVUYwlkO0WDOanOdo{&YB(N3K{8AR5NsNtQ*q84)!zVVu7 ziNn!iBe}%XVegECc771Ww)lzKkwwi!aUz>YWmQ|jvU2&oPkHir%<6mM+5P4r{f;=8 zS}ZaK+7Qq`Dt@4Uo>>qjIM~n3iZ5Fom@zQFm0;JCkQ<&vCT?)*~I&n#x#BFTmtRmP1#teyOo*GG3Dxz6VJmcQSbiFEAU zcFR}&B4H1uFQ@w$^?x>dIwygJQK!68d}ShW2U4k;7oGo!+fN-WV$g-%h#DXP_GPq= z@H`jMev}K!{)wLhIO0BHr+W1i0;9|~2M{|65ul5qWzPjLG_&97* zqWGnMWkA?)$cKK#xuW;-@Fh_#a~%Rd%6OBrr+=ZS(%;WO^(A(uAO2*2Lpa_YZR1P8 zpGEY!8?R!G3iiBve<7as{JIqq&|M#L9QNK&6T7Xs(5P_S!+s)AlIWt06UP0epBxs? zqd`czb8FA%VswB~1|LdlFXobeT8`3E(n;%)yi6EAY0r7^M7u~yTQT?9V=W|HTjur% z9`-YUUlgYxFI3pKtF~adZJ;N?`bY`K9971&lg?%DbJVaRMz7B+iO| z?6uPHpRbPkOE zP}0;l^Ivf`g0CHRRO<85Bp)u~Ipg=0ldx(YenbMM@n;SfrpZVEYO8^1O2(QBn@ikP zYKMWlgk8)dcz>$~Y_xaZhhkwcz{{HttAxwxhNO@H8RDmhNTIJxkJ8RJK4editP*cJ z$py>>h^1adS1s;BQ7hxXPc*^c74F{GfptVJ6(tF{k~Qz2U4bSqfQnkVy+h4J+XvT8 zEPu*6z``4s5#~ma5-*`4~$Q;OBq2g#-xW)6a@RgOV@v z%|!DrQP~ZJQ zroW2u=}z#wYqbYReOBSK!o!X`KMhRHk7<$vkLBcy((aq5oDDEJKJ;;5^sJ1G5uI#x zKataAk?GgkCjm3>4pDdNKr0=S;Z)0wp|7E+*d&gqqvU6InlR>i1%p3|k0!OdRG$?- zFbcA`BI;f4S8W>}MgHQpBMF%0plxwZfQ25RYKA&9%F|*tEarPmKHKE+tFdpHASj7D!HhLVWF)6(HTe&xP)n;9wyxOrC?U-oq|m%w}% zzrEBt37GZ9wiGH6e_h!~Ca{g<+DfEyAn*)aMDZVABw_Js5uF*0t<~aAXR<~c;9T_B z-@l~eXO^;?cccS!lW?$J{3Rw^Xj4RYO{Bn%I8G@vQO;!7t|O%r^$lmN`hkUR?3OEE zP~^-aB{z8^FF35%luE(R5E#xLO8J&|QcccaS2`H7BCw9~+aCA8U`8x!nFNR!uCKM9 z)%e!#u-|-AE@)(&zk~2lu;ABcmrD{Zj<9s~uaf*gzdNT&xr?!c*37OG*(+HNK{K`Z z;-z30egA?<=j*M+3(xACQ2F<4L!4HOejXRZ9X{GeT2~2%jx;TtfEkB^^-@_pJ@cLI z2pKt@kcVQiqr3N_vz1oibKp3)i7>BIepo$(Wa*9JAi1*Y)&w)D*5e24IiFpLNra2% znZI4o*b#u;%tVKN$6s1rYLzGZfwSiQK*^dWew0Q677tMg_^~u`*^g3 zNs!^I<+}c4k3hNn&uzqyR3X0w`Yqq=+UaZ3@hU{8elAk5B->SNssC&3$bq{B} z4Me>9AWboce|HRDyW@}dzoh%+5lspM6g6kIRXQBOwqkiwHNWM=)_W0_e*jUt457o3 zfR{4?eR(8+-^C1}UK)XncYYcuW-e1c*O886V9}Zd7q5tA*gj1xvE{PGOyA9!VdNRA z7me%PrswY?w!zi;-y=PiQbo*f>#GBB4*vJ$h?=al+BcUR%4`+-N^JpaAy(o*P)Z)v zj~yzRU~)(0Z=RGr&1V7lTPV-cx~ zT7>QQbQjzA!+r?HLKcu=L-@sOgKPdsH}+iW14Wm2(@Vqzil7w|;AMG)s66b0Y||nH z`*Gh)C9fksrI%Ue_ista!?(f#O6H5o=9}hqb@C@KrJXz-%gr9+Scc3 zS+$Q0!tVztBs|f~xs4`HzdBNdu7vwe!|hgu%4a)XL*K7)&k3$!lGDyE1_}1IC~=9E zUwPjcj)t}WCo*A?p?)Ml$8?m@nIFcRG5ggtV=eExALq!e{oMN+2fb?IY_-+|^aY@ffYg97?z>yxe{9b3 zj0y*pq(uZDrZ(92ei+J!T}P^vUCnJ8+0j$W0g&xvd(y6Su!LzY75Hg)^; zDF`A%hjml<6A92?eq|ig`%=sLz4$;5UWE;eeflKN2{$VWQLU+KMP#)i&a_Gi+?CAe z&q7KQj2~PHWtgT}yV`Z`uQd4m!q1nk;^w=?jMYk0>(k^9y&sl5?GckR-cPXLQx$R* zzkM&c3RPO=FPD>EU7cV>yU&bvU;n9Ru;^pqo@OeN)_7&UXqf*sjUq-b&Ga&H{pBk# zxEsXW+~oMKr5hF;B4(+AWFS=xw`@Q279yEi^gVV7e`)61FDmJ;XkUh=2Ap>)>DMuKczg@(B zauxGo)09eY{875L8cpU_Th~cL{TFC(_%-^33bGEoV#luj2NKXeC^nC)OGiu-6j@`& znhTjux}ogos7v8$;fS$~e67Kr3yfXS#597zjjfqkc_~R#So`7p+IOukI{Tp5?6Xjw z1{5XIfr+EW=xaZ6>fCdq-~HSibYH!nhrjSGtFheC%Sek5IA0SD7t4;ln$jSTI=X?r z6$>|_J^s*AjqfA@!;(V4?%i7ykdWh~T}!Qz!A4BcWYl6Sc6pn4F&Bj{;pR*6$lgi}RK2SOO*Qxu>l@L8Rz@80yNSF_ziI%E)q%$N0NFXt(zPc>E@ zXLB3OqTOMF@8@uMG{&vys&j9Y=Xzl0jn(_`o>E103`#ivnj{NrDL=N+{5R2V$JmOF z=u=E!36)gabY4ijNuHaj-EWk@xuQKQ`EYiS>pi{%#h~kydh{Np5~)i@qhmA7)sFjg zK>}~0aeKK)bZBI^Zw@M_3u&FamH!jPKDytoPN@yCFl0$#xJX1tFtT=EBLUi-QfZ!T zQ>u;Kls58FNX;-U*}bDWv=JDpCGTsz%UV?=Xr;;`_;&&A6mb{!O%m|qnsLwZ6Mgi8I$Ad)ptLD4VIq)cu!7h=f$ede6Pt zCV|zpjy7jX$O=A2n|di>VlSCyu(w8ew&ww2Ui6wzLy^+ZbMHMZw#O_<`IdMRa6?g> zPA^2^xuq*q%#6y0p-JVLot5N%bBTkpw)ER+CuF3U`_TZdrhw)^Px)QFqxkKD?Na(w zy5KfU+Q!}Uth~3q1ke#*zS~xB;Oci7Q^rh0$r8D_Aj(C}YoSm&;!}p=9;#dtAk<)% z<44Xm`#boA<|H#n(VvzCJozh8)_sl(%w-aHjM>Pp7%?pUq@9oU^T6C`5~f%+xzqEV zs5vGiHh;`bc+SShd)r?g=DwVXT_I~p<4>SyR)sioqM>C*7E$zH1f+#02|Q}#Q7|dc zvvEX@1KAZsP0M}0^oU^od$_Wa{v$T+QIkMdibXoS(E-Z&fn0*z9+<&kgNUm?)jL{= zE8bD((D#YzIfgbi_`WvQXmn7``(?J?ZY)B0@>OEsduVzDV<0azv>4n0=OByvm)l5y zpmetX;1X}zeOOJg4*DkrHa-fKUB-C$UJrkUQB=f5h-fZx9MOwkc^sqvuS@(~N}M&vRW=$K7rWzhJG1|1?Gd&iH%; zF5go{)}>ccSo>BWtR7GS%C9+ox{`_^>#SJ z?Orzb&T^zjs0G$qhkOXV)MN8H6Ne~QZtj|xjvJ=F#ySdzCI{(AyS3BthV;w#rPutG zTP!|O(2b5vw+6j}dW!$_x^DZqb!W#DFPb*5>rj!V!pK*Jer65E_5uYn+n9jX8D;{C zRgaPl(&t~-FhNe&AU@E|_QjmiuhHNCYS4h2VeD=Tr+reVZKBV0S(w1wN8qM?%?4r2 zssvFR#vybuz5V`n>jfXE+T{CX?^SO!G4D-g9*%G4D3kR^$zG9abXZ4?I&H6n5s#Z< zpaaKwWikcplJGt6wDof{v{MuWgJ@+AKboM-74l0w2`evcp7rKKh(p4WXIyeS2X6Ta z(c$C@Q)w@X9=~`f9SrwIT-1HbegP(E#r#Bmya>@g*OaY(I? zciMSUbnzWbP#VC(XNVi>>4^wIS|4S|S{!y}e&01t4tx&^XyhDDG^^B#wEMs4MLsufpn z$iN*D-n8Vo__YFNi!*XhUJt_yk>Z(|WR;gJjtitXo!dsMuevys;c_&QiUntiFLPbw gTqqSm&>M;dl3xOT%zkY=N@`b>6p02i9n#qU0#hpg+W-In literal 0 HcmV?d00001 diff --git a/compoundgrants/overview.md b/protocols/compoundgrants/overview.md similarity index 100% rename from compoundgrants/overview.md rename to protocols/compoundgrants/overview.md diff --git a/protocols/defidollar/contracts/token.json b/protocols/defidollar/contracts/token.json new file mode 100644 index 0000000..4219cd0 --- /dev/null +++ b/protocols/defidollar/contracts/token.json @@ -0,0 +1,401 @@ +[ + { + "inputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"constructor" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"owner", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"value", + "type":"uint256" + } + ], + "name":"Approval", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"from", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"value", + "type":"uint256" + } + ], + "name":"Transfer", + "type":"event" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"_minter", + "type":"address" + } + ], + "name":"addMinter", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"owner", + "type":"address" + }, + { + "internalType":"address", + "name":"spender", + "type":"address" + } + ], + "name":"allowance", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"approve", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"balanceOf", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"decimals", + "outputs":[ + { + "internalType":"uint8", + "name":"", + "type":"uint8" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"subtractedValue", + "type":"uint256" + } + ], + "name":"decreaseAllowance", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"governance", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"addedValue", + "type":"uint256" + } + ], + "name":"increaseAllowance", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"mint", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"minters", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"name", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"_minter", + "type":"address" + } + ], + "name":"removeMinter", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"_governance", + "type":"address" + } + ], + "name":"setGovernance", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"symbol", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"totalSupply", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"recipient", + "type":"address" + }, + { + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"transfer", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"sender", + "type":"address" + }, + { + "internalType":"address", + "name":"recipient", + "type":"address" + }, + { + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"transferFrom", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + } +] diff --git a/siren/events.json b/protocols/defidollar/events.json similarity index 100% rename from siren/events.json rename to protocols/defidollar/events.json diff --git a/defidollar/header.png b/protocols/defidollar/header.png similarity index 100% rename from defidollar/header.png rename to protocols/defidollar/header.png diff --git a/protocols/defidollar/index.json b/protocols/defidollar/index.json new file mode 100644 index 0000000..6c3564a --- /dev/null +++ b/protocols/defidollar/index.json @@ -0,0 +1,25 @@ +{ + "name": "DefiDollar DAO", + "description": "DUSD is a stablecoin controlled by a DAO using DeFi primitives to remain pegged to the Dollar.", + "path": "defidollar", + "folder": "defidollar", + "type": "snapshot", + "suffix": "DFD", + "coinGeckoPriceString": "defidollar-dao", + "tokenContractAddress": "0x20c36f062a31865bED8a5B1e512D9a1A20AA333A", + "isEnabled": true, + "hasOnchain": false, + "isHybrid": false, + "hasDelegation": false, + "snapshotSpaceName": "defidolla.eth", + "invalidSnapshots": [ + "QmZUUs11CVfwPapHMs53N1ZbmeAzu3bhkfZJFRyENS9kGf", + "QmQG2ppd3TwTGK87KAX7rgyWVEkKo31tXCKw9f6GFQrhHA", + "QmYRKXzmqLVSD9ao3Sba3EsJcAbD3spG58Cg5wznVrnMUM", + "QmehCJcrywhtgU93vFu1AoeVPSzzYf8jBUEED7mBx15U4R", + "QmYRKXzmqLVSD9ao3Sba3EsJcAbD3spG58Cg5wznVrnMUM" + ], + "branding": {}, + "discourseForum": {}, + "safeAddress": null +} diff --git a/defidollar/logo.png b/protocols/defidollar/logo.png similarity index 100% rename from defidollar/logo.png rename to protocols/defidollar/logo.png diff --git a/defidollar/overview.md b/protocols/defidollar/overview.md similarity index 100% rename from defidollar/overview.md rename to protocols/defidollar/overview.md diff --git a/defidollar/Documentation/1. Getting Started.md b/protocols/defidollar/resources/Documentation/1. Getting Started.md similarity index 100% rename from defidollar/Documentation/1. Getting Started.md rename to protocols/defidollar/resources/Documentation/1. Getting Started.md diff --git a/defidollar/Documentation/2. Interacting with DUSD.md b/protocols/defidollar/resources/Documentation/2. Interacting with DUSD.md similarity index 100% rename from defidollar/Documentation/2. Interacting with DUSD.md rename to protocols/defidollar/resources/Documentation/2. Interacting with DUSD.md diff --git a/defidollar/Documentation/3. Audits.md b/protocols/defidollar/resources/Documentation/3. Audits.md similarity index 100% rename from defidollar/Documentation/3. Audits.md rename to protocols/defidollar/resources/Documentation/3. Audits.md diff --git a/defidollar/Documentation/4. Roadmap.md b/protocols/defidollar/resources/Documentation/4. Roadmap.md similarity index 100% rename from defidollar/Documentation/4. Roadmap.md rename to protocols/defidollar/resources/Documentation/4. Roadmap.md diff --git a/defidollar/FAQs/Collection of FAQ's Pertaining to the DefiDollar Ecosystem.md b/protocols/defidollar/resources/FAQs/Collection of FAQ's Pertaining to the DefiDollar Ecosystem.md similarity index 100% rename from defidollar/FAQs/Collection of FAQ's Pertaining to the DefiDollar Ecosystem.md rename to protocols/defidollar/resources/FAQs/Collection of FAQ's Pertaining to the DefiDollar Ecosystem.md diff --git a/protocols/gnosis.eth/contracts/token.json b/protocols/gnosis.eth/contracts/token.json new file mode 100644 index 0000000..7241e42 --- /dev/null +++ b/protocols/gnosis.eth/contracts/token.json @@ -0,0 +1,226 @@ +[ + { + "constant":true, + "inputs":[], + "name":"name", + "outputs":[ + { + "name":"", + "type":"string" + } + ], + "payable":false, + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"_spender", + "type":"address" + }, + { + "name":"_value", + "type":"uint256" + } + ], + "name":"approve", + "outputs":[ + { + "name":"", + "type":"bool" + } + ], + "payable":false, + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"totalSupply", + "outputs":[ + { + "name":"", + "type":"uint256" + } + ], + "payable":false, + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"_from", + "type":"address" + }, + { + "name":"_to", + "type":"address" + }, + { + "name":"_value", + "type":"uint256" + } + ], + "name":"transferFrom", + "outputs":[ + { + "name":"", + "type":"bool" + } + ], + "payable":false, + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"decimals", + "outputs":[ + { + "name":"", + "type":"uint8" + } + ], + "payable":false, + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "name":"_owner", + "type":"address" + } + ], + "name":"balanceOf", + "outputs":[ + { + "name":"", + "type":"uint256" + } + ], + "payable":false, + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"symbol", + "outputs":[ + { + "name":"", + "type":"string" + } + ], + "payable":false, + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"_to", + "type":"address" + }, + { + "name":"_value", + "type":"uint256" + } + ], + "name":"transfer", + "outputs":[ + { + "name":"", + "type":"bool" + } + ], + "payable":false, + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "name":"_owner", + "type":"address" + }, + { + "name":"_spender", + "type":"address" + } + ], + "name":"allowance", + "outputs":[ + { + "name":"", + "type":"uint256" + } + ], + "payable":false, + "type":"function" + }, + { + "inputs":[ + { + "name":"dutchAuction", + "type":"address" + }, + { + "name":"owners", + "type":"address[]" + }, + { + "name":"tokens", + "type":"uint256[]" + } + ], + "payable":false, + "type":"constructor" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "name":"from", + "type":"address" + }, + { + "indexed":true, + "name":"to", + "type":"address" + }, + { + "indexed":false, + "name":"value", + "type":"uint256" + } + ], + "name":"Transfer", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "name":"owner", + "type":"address" + }, + { + "indexed":true, + "name":"spender", + "type":"address" + }, + { + "indexed":false, + "name":"value", + "type":"uint256" + } + ], + "name":"Approval", + "type":"event" + } +] diff --git a/synthetix/events.json b/protocols/gnosis.eth/events.json similarity index 100% rename from synthetix/events.json rename to protocols/gnosis.eth/events.json diff --git a/gnosis.eth/header.png b/protocols/gnosis.eth/header.png similarity index 100% rename from gnosis.eth/header.png rename to protocols/gnosis.eth/header.png diff --git a/protocols/gnosis.eth/index.json b/protocols/gnosis.eth/index.json new file mode 100644 index 0000000..1342d0f --- /dev/null +++ b/protocols/gnosis.eth/index.json @@ -0,0 +1,23 @@ +{ + "name": "Gnosis", + "description": "GnosisDAO uses Gnosis products to transparently guide decisions on development, support, and governance of its token ecosystem.", + "path": "gnosis.eth", + "folder": "gnosis.eth", + "type": "snapshot", + "suffix": "GNO", + "coinGeckoPriceString": "gnosis", + "tokenContractAddress": "0x6810e776880c02933d47db1b9fc05908e5386b96", + "isEnabled": true, + "hasOnchain": false, + "isHybrid": false, + "hasDelegation": false, + "snapshotSpaceName": "gnosis.eth", + "invalidSnapshots": [ + "Qmey2pnp3wMctMBBiG4QgSdKejmgyXNAady5ZCZQKQKnKF", + "QmaGQ3K3PkjUakoyR127dbym8ESsruXg4dyeKKQxxRdPgA", + "QmcERezRFobLTWGqYw47t9NZtWVsiW791rVeqHvPTBs8gW" + ], + "branding": {}, + "discourseForum": {}, + "safeAddress": null +} diff --git a/gnosis.eth/logo.png b/protocols/gnosis.eth/logo.png similarity index 100% rename from gnosis.eth/logo.png rename to protocols/gnosis.eth/logo.png diff --git a/gnosis.eth/overview.md b/protocols/gnosis.eth/overview.md similarity index 100% rename from gnosis.eth/overview.md rename to protocols/gnosis.eth/overview.md diff --git a/gnosis.eth/Gov Weekly/Update Week 11 2021 18-03-21.md b/protocols/gnosis.eth/resources/Gov Weekly/Update Week 11 2021 18-03-21.md similarity index 100% rename from gnosis.eth/Gov Weekly/Update Week 11 2021 18-03-21.md rename to protocols/gnosis.eth/resources/Gov Weekly/Update Week 11 2021 18-03-21.md diff --git a/gnosis.eth/Gov Weekly/Update Week 12 2021 24-03-21.md b/protocols/gnosis.eth/resources/Gov Weekly/Update Week 12 2021 24-03-21.md similarity index 100% rename from gnosis.eth/Gov Weekly/Update Week 12 2021 24-03-21.md rename to protocols/gnosis.eth/resources/Gov Weekly/Update Week 12 2021 24-03-21.md diff --git a/gnosis.eth/Gov Weekly/Update Week 7 2021 02-16-21.md b/protocols/gnosis.eth/resources/Gov Weekly/Update Week 7 2021 02-16-21.md similarity index 100% rename from gnosis.eth/Gov Weekly/Update Week 7 2021 02-16-21.md rename to protocols/gnosis.eth/resources/Gov Weekly/Update Week 7 2021 02-16-21.md diff --git a/gnosis.eth/Gov Weekly/Update Week 8 2021 02-22-21.md b/protocols/gnosis.eth/resources/Gov Weekly/Update Week 8 2021 02-22-21.md similarity index 100% rename from gnosis.eth/Gov Weekly/Update Week 8 2021 02-22-21.md rename to protocols/gnosis.eth/resources/Gov Weekly/Update Week 8 2021 02-22-21.md diff --git a/pooltogether/calls/Call.md b/protocols/gnosis.eth/resources/calls/Call.md similarity index 100% rename from pooltogether/calls/Call.md rename to protocols/gnosis.eth/resources/calls/Call.md diff --git a/protocols/indexCoop/contracts/token.json b/protocols/indexCoop/contracts/token.json new file mode 100644 index 0000000..89a5ad2 --- /dev/null +++ b/protocols/indexCoop/contracts/token.json @@ -0,0 +1,491 @@ +[ + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "stateMutability":"nonpayable", + "type":"constructor" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"owner", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"Approval", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"delegator", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"fromDelegate", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"toDelegate", + "type":"address" + } + ], + "name":"DelegateChanged", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"delegate", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"previousBalance", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"newBalance", + "type":"uint256" + } + ], + "name":"DelegateVotesChanged", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"from", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"Transfer", + "type":"event" + }, + { + "inputs":[], + "name":"DELEGATION_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[], + "name":"DOMAIN_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"address", + "name":"spender", + "type":"address" + } + ], + "name":"allowance", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + } + ], + "name":"approve", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"balanceOf", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + }, + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "name":"checkpoints", + "outputs":[ + { + "internalType":"uint32", + "name":"fromBlock", + "type":"uint32" + }, + { + "internalType":"uint96", + "name":"votes", + "type":"uint96" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[], + "name":"decimals", + "outputs":[ + { + "internalType":"uint8", + "name":"", + "type":"uint8" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"delegatee", + "type":"address" + } + ], + "name":"delegate", + "outputs":[], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"delegatee", + "type":"address" + }, + { + "internalType":"uint256", + "name":"nonce", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"expiry", + "type":"uint256" + }, + { + "internalType":"uint8", + "name":"v", + "type":"uint8" + }, + { + "internalType":"bytes32", + "name":"r", + "type":"bytes32" + }, + { + "internalType":"bytes32", + "name":"s", + "type":"bytes32" + } + ], + "name":"delegateBySig", + "outputs":[], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"delegates", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"getCurrentVotes", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"uint256", + "name":"blockNumber", + "type":"uint256" + } + ], + "name":"getPriorVotes", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[], + "name":"name", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"nonces", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"numCheckpoints", + "outputs":[ + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[], + "name":"symbol", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[], + "name":"totalSupply", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"dst", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + } + ], + "name":"transfer", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"src", + "type":"address" + }, + { + "internalType":"address", + "name":"dst", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + } + ], + "name":"transferFrom", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "stateMutability":"nonpayable", + "type":"function" + } +] diff --git a/indexCoop/events.json b/protocols/indexCoop/events.json similarity index 100% rename from indexCoop/events.json rename to protocols/indexCoop/events.json diff --git a/indexCoop/header.png b/protocols/indexCoop/header.png similarity index 100% rename from indexCoop/header.png rename to protocols/indexCoop/header.png diff --git a/protocols/indexCoop/index.json b/protocols/indexCoop/index.json new file mode 100644 index 0000000..cf5fdee --- /dev/null +++ b/protocols/indexCoop/index.json @@ -0,0 +1,24 @@ +{ + "name": "Index", + "description": "The Index Coop is an autonomous asset manager governed, maintained, and upgraded by INDEX token holders.", + "path": "index", + "folder": "indexCoop", + "type": "snapshot", + "suffix": "INDEX", + "coinGeckoPriceString": "index-cooperative", + "tokenContractAddress": "0x0954906da0Bf32d5479e25f46056d22f08464cab", + "isEnabled": true, + "hasOnchain": false, + "isHybrid": false, + "hasDelegation": false, + "snapshotSpaceName": "index", + "invalidSnapshots": [ + "QmQ2s6DsA2jc7ops9BC2KzQwo4rYZLYavisLJvLihpTGvH" + ], + "branding": {}, + "discourseForum": { + "url": "https://gov.indexcoop.com", + "categoryId": "5" + }, + "safeAddress": null +} diff --git a/indexCoop/logo.png b/protocols/indexCoop/logo.png similarity index 100% rename from indexCoop/logo.png rename to protocols/indexCoop/logo.png diff --git a/indexCoop/overview.md b/protocols/indexCoop/overview.md similarity index 100% rename from indexCoop/overview.md rename to protocols/indexCoop/overview.md diff --git a/indexCoop/Development/Index Coop January Bounties.md b/protocols/indexCoop/resources/Development/Index Coop January Bounties.md similarity index 100% rename from indexCoop/Development/Index Coop January Bounties.md rename to protocols/indexCoop/resources/Development/Index Coop January Bounties.md diff --git a/indexCoop/Development/Technical Resources.md b/protocols/indexCoop/resources/Development/Technical Resources.md similarity index 100% rename from indexCoop/Development/Technical Resources.md rename to protocols/indexCoop/resources/Development/Technical Resources.md diff --git a/indexCoop/Gov Weekly/Week 10 2021 11-03-21.md b/protocols/indexCoop/resources/Gov Weekly/Week 10 2021 11-03-21.md similarity index 100% rename from indexCoop/Gov Weekly/Week 10 2021 11-03-21.md rename to protocols/indexCoop/resources/Gov Weekly/Week 10 2021 11-03-21.md diff --git a/indexCoop/Gov Weekly/Week 11 2021 18-03-21.md b/protocols/indexCoop/resources/Gov Weekly/Week 11 2021 18-03-21.md similarity index 100% rename from indexCoop/Gov Weekly/Week 11 2021 18-03-21.md rename to protocols/indexCoop/resources/Gov Weekly/Week 11 2021 18-03-21.md diff --git a/indexCoop/Gov Weekly/Week 12 2021 11-03-21.md b/protocols/indexCoop/resources/Gov Weekly/Week 12 2021 11-03-21.md similarity index 100% rename from indexCoop/Gov Weekly/Week 12 2021 11-03-21.md rename to protocols/indexCoop/resources/Gov Weekly/Week 12 2021 11-03-21.md diff --git a/indexCoop/Gov Weekly/Week 13 2021 01-04-21.md b/protocols/indexCoop/resources/Gov Weekly/Week 13 2021 01-04-21.md similarity index 100% rename from indexCoop/Gov Weekly/Week 13 2021 01-04-21.md rename to protocols/indexCoop/resources/Gov Weekly/Week 13 2021 01-04-21.md diff --git a/indexCoop/Gov Weekly/Week 14 2021 09-04-21.md b/protocols/indexCoop/resources/Gov Weekly/Week 14 2021 09-04-21.md similarity index 100% rename from indexCoop/Gov Weekly/Week 14 2021 09-04-21.md rename to protocols/indexCoop/resources/Gov Weekly/Week 14 2021 09-04-21.md diff --git a/indexCoop/Gov Weekly/Week 6 2021 11-02-21.md b/protocols/indexCoop/resources/Gov Weekly/Week 6 2021 11-02-21.md similarity index 100% rename from indexCoop/Gov Weekly/Week 6 2021 11-02-21.md rename to protocols/indexCoop/resources/Gov Weekly/Week 6 2021 11-02-21.md diff --git a/indexCoop/Gov Weekly/Week 7 2021 19-02-21.md b/protocols/indexCoop/resources/Gov Weekly/Week 7 2021 19-02-21.md similarity index 100% rename from indexCoop/Gov Weekly/Week 7 2021 19-02-21.md rename to protocols/indexCoop/resources/Gov Weekly/Week 7 2021 19-02-21.md diff --git a/indexCoop/Gov Weekly/Week 8 2021 20-02-21.md b/protocols/indexCoop/resources/Gov Weekly/Week 8 2021 20-02-21.md similarity index 100% rename from indexCoop/Gov Weekly/Week 8 2021 20-02-21.md rename to protocols/indexCoop/resources/Gov Weekly/Week 8 2021 20-02-21.md diff --git a/indexCoop/Gov Weekly/Week 9 2021 04-03-21.md b/protocols/indexCoop/resources/Gov Weekly/Week 9 2021 04-03-21.md similarity index 100% rename from indexCoop/Gov Weekly/Week 9 2021 04-03-21.md rename to protocols/indexCoop/resources/Gov Weekly/Week 9 2021 04-03-21.md diff --git a/indexCoop/Growth/About the Growth Working Group.md b/protocols/indexCoop/resources/Growth/About the Growth Working Group.md similarity index 100% rename from indexCoop/Growth/About the Growth Working Group.md rename to protocols/indexCoop/resources/Growth/About the Growth Working Group.md diff --git a/indexCoop/Growth/Advertisements.md b/protocols/indexCoop/resources/Growth/Advertisements.md similarity index 100% rename from indexCoop/Growth/Advertisements.md rename to protocols/indexCoop/resources/Growth/Advertisements.md diff --git a/indexCoop/Growth/BD Materials List.md b/protocols/indexCoop/resources/Growth/BD Materials List.md similarity index 100% rename from indexCoop/Growth/BD Materials List.md rename to protocols/indexCoop/resources/Growth/BD Materials List.md diff --git a/indexCoop/Operations/Governance Call Notes.md b/protocols/indexCoop/resources/Operations/Governance Call Notes.md similarity index 100% rename from indexCoop/Operations/Governance Call Notes.md rename to protocols/indexCoop/resources/Operations/Governance Call Notes.md diff --git a/indexCoop/Operations/Q1 2021 - OKRs.md b/protocols/indexCoop/resources/Operations/Q1 2021 - OKRs.md similarity index 100% rename from indexCoop/Operations/Q1 2021 - OKRs.md rename to protocols/indexCoop/resources/Operations/Q1 2021 - OKRs.md diff --git a/indexCoop/Product/CGI.md b/protocols/indexCoop/resources/Product/CGI.md similarity index 100% rename from indexCoop/Product/CGI.md rename to protocols/indexCoop/resources/Product/CGI.md diff --git a/indexCoop/Product/DPI.md b/protocols/indexCoop/resources/Product/DPI.md similarity index 100% rename from indexCoop/Product/DPI.md rename to protocols/indexCoop/resources/Product/DPI.md diff --git a/indexCoop/Product/INDEX.md b/protocols/indexCoop/resources/Product/INDEX.md similarity index 100% rename from indexCoop/Product/INDEX.md rename to protocols/indexCoop/resources/Product/INDEX.md diff --git a/indexCoop/Product/Product Materials.md b/protocols/indexCoop/resources/Product/Product Materials.md similarity index 100% rename from indexCoop/Product/Product Materials.md rename to protocols/indexCoop/resources/Product/Product Materials.md diff --git a/protocols/rally/contracts/token.json b/protocols/rally/contracts/token.json new file mode 100644 index 0000000..54da284 --- /dev/null +++ b/protocols/rally/contracts/token.json @@ -0,0 +1,296 @@ +[ + { + "inputs":[ + { + "internalType":"address", + "name":"_escrow", + "type":"address" + } + ], + "stateMutability":"nonpayable", + "type":"constructor" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"owner", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"value", + "type":"uint256" + } + ], + "name":"Approval", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"from", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"value", + "type":"uint256" + } + ], + "name":"Transfer", + "type":"event" + }, + { + "inputs":[], + "name":"TOKEN_SUPPLY", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"owner", + "type":"address" + }, + { + "internalType":"address", + "name":"spender", + "type":"address" + } + ], + "name":"allowance", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"approve", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"balanceOf", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[], + "name":"decimals", + "outputs":[ + { + "internalType":"uint8", + "name":"", + "type":"uint8" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"subtractedValue", + "type":"uint256" + } + ], + "name":"decreaseAllowance", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"addedValue", + "type":"uint256" + } + ], + "name":"increaseAllowance", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[], + "name":"name", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[], + "name":"symbol", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[], + "name":"totalSupply", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"recipient", + "type":"address" + }, + { + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"transfer", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"sender", + "type":"address" + }, + { + "internalType":"address", + "name":"recipient", + "type":"address" + }, + { + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"transferFrom", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "stateMutability":"nonpayable", + "type":"function" + } +] diff --git a/uniswap/events.json b/protocols/rally/events.json similarity index 100% rename from uniswap/events.json rename to protocols/rally/events.json diff --git a/rally/header.png b/protocols/rally/header.png similarity index 100% rename from rally/header.png rename to protocols/rally/header.png diff --git a/protocols/rally/index.json b/protocols/rally/index.json new file mode 100644 index 0000000..5b1f0d0 --- /dev/null +++ b/protocols/rally/index.json @@ -0,0 +1,19 @@ +{ + "name": "Rally", + "description": "Rally is a decentralized network enabling creators to monetize and align themselves with their community.", + "path": "rally", + "folder": "rally", + "type": "snapshot", + "suffix": "RLY", + "coinGeckoPriceString": "rally-2", + "tokenContractAddress": "0xf1f955016EcbCd7321c7266BccFB96c68ea5E49b", + "isEnabled": true, + "hasOnchain": false, + "isHybrid": false, + "hasDelegation": false, + "snapshotSpaceName": "rally", + "invalidSnapshots": [], + "branding": {}, + "discourseForum": {}, + "safeAddress": null +} diff --git a/rally/logo.png b/protocols/rally/logo.png similarity index 100% rename from rally/logo.png rename to protocols/rally/logo.png diff --git a/rally/overview.md b/protocols/rally/overview.md similarity index 100% rename from rally/overview.md rename to protocols/rally/overview.md diff --git a/protocols/rarible/contracts/token.json b/protocols/rarible/contracts/token.json new file mode 100644 index 0000000..66d4e64 --- /dev/null +++ b/protocols/rarible/contracts/token.json @@ -0,0 +1,482 @@ +[ + { + "inputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"constructor" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"owner", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"value", + "type":"uint256" + } + ], + "name":"Approval", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"previousOwner", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"newOwner", + "type":"address" + } + ], + "name":"OwnershipTransferred", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"Paused", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"from", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"value", + "type":"uint256" + } + ], + "name":"Transfer", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"Unpaused", + "type":"event" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"owner", + "type":"address" + }, + { + "internalType":"address", + "name":"spender", + "type":"address" + } + ], + "name":"allowance", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"value", + "type":"uint256" + } + ], + "name":"approve", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"balanceOf", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"decimals", + "outputs":[ + { + "internalType":"uint8", + "name":"", + "type":"uint8" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"subtractedValue", + "type":"uint256" + } + ], + "name":"decreaseAllowance", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"addedValue", + "type":"uint256" + } + ], + "name":"increaseAllowance", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"isOwner", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"mint", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"mintStopped", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"name", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"owner", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[], + "name":"pause", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"paused", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[], + "name":"renounceOwnership", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[], + "name":"stopMint", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"symbol", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"totalSupply", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "internalType":"uint256", + "name":"value", + "type":"uint256" + } + ], + "name":"transfer", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"from", + "type":"address" + }, + { + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "internalType":"uint256", + "name":"value", + "type":"uint256" + } + ], + "name":"transferFrom", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"newOwner", + "type":"address" + } + ], + "name":"transferOwnership", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[], + "name":"unpause", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + } +] diff --git a/yamv2/events.json b/protocols/rarible/events.json similarity index 100% rename from yamv2/events.json rename to protocols/rarible/events.json diff --git a/rarible/header.png b/protocols/rarible/header.png similarity index 100% rename from rarible/header.png rename to protocols/rarible/header.png diff --git a/protocols/rarible/index.json b/protocols/rarible/index.json new file mode 100644 index 0000000..901a5d8 --- /dev/null +++ b/protocols/rarible/index.json @@ -0,0 +1,28 @@ +{ + "name": "Rarible", + "description": "Rarible is the premiere NFT marketplace to mint, buy, and sell digital collectibles.", + "path": "rarible", + "folder": "rarible", + "type": "snapshot", + "suffix": "RARI", + "coinGeckoPriceString": "rarible", + "tokenContractAddress": "0xFca59Cd816aB1eaD66534D82bc21E7515cE441CF", + "isEnabled": true, + "hasOnchain": false, + "isHybrid": false, + "hasDelegation": false, + "snapshotSpaceName": "rarible", + "invalidSnapshots": [ + "QmSgtwCz33ub4BXYZCfdZHAdWSNAPhaTZUU94VJzGYFCXi", + "QmNg7ZNi8xb7kBBMHPxvSHUYUcm28UeAkfkjAeRejG5LGy", + "QmaV43F4RRX2GYc42dwV7esTvVmp6Mb4pi5uZfKjgFxcn3", + "QmXUVjiANVc7cYdioyMvk4T9wandAFUfmdHAQov5Xhfra1", + "QmYjtVqeL7adETmmLqeefsasFRk4WZk4eZZjWJAgfsRxdz" + ], + "branding": {}, + "discourseForum": { + "url": "https://gov.rarible.com", + "categoryId": "7" + }, + "safeAddress": null +} diff --git a/rarible/logo.png b/protocols/rarible/logo.png similarity index 100% rename from rarible/logo.png rename to protocols/rarible/logo.png diff --git a/rarible/overview.md b/protocols/rarible/overview.md similarity index 100% rename from rarible/overview.md rename to protocols/rarible/overview.md diff --git a/rarible/Gov Weekly/Week 9 2021 03-05-21.md b/protocols/rarible/resources/Gov Weekly/Week 9 2021 03-05-21.md similarity index 100% rename from rarible/Gov Weekly/Week 9 2021 03-05-21.md rename to protocols/rarible/resources/Gov Weekly/Week 9 2021 03-05-21.md diff --git a/rarible/calls/Call.md b/protocols/rarible/resources/calls/Call.md similarity index 100% rename from rarible/calls/Call.md rename to protocols/rarible/resources/calls/Call.md diff --git a/protocols/synthetix/contracts/governance.json b/protocols/synthetix/contracts/governance.json new file mode 100644 index 0000000..cd80934 --- /dev/null +++ b/protocols/synthetix/contracts/governance.json @@ -0,0 +1,423 @@ +[ + { + "inputs":[ + { + "internalType":"string", + "name":"_name", + "type":"string" + }, + { + "internalType":"string", + "name":"_symbol", + "type":"string" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"constructor" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"uint256", + "name":"tokenId", + "type":"uint256" + } + ], + "name":"Burn", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"uint256", + "name":"tokenId", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"address", + "name":"to", + "type":"address" + } + ], + "name":"Mint", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"previousOwner", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"newOwner", + "type":"address" + } + ], + "name":"OwnershipTransferred", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"tokenId", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"string", + "name":"tokenURI", + "type":"string" + } + ], + "name":"TokenURISet", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"from", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "indexed":true, + "internalType":"uint256", + "name":"tokenId", + "type":"uint256" + } + ], + "name":"Transferred", + "type":"event" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"owner", + "type":"address" + } + ], + "name":"balanceOf", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"tokenId", + "type":"uint256" + } + ], + "name":"burn", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"isOwner", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "internalType":"uint256", + "name":"tokenId", + "type":"uint256" + } + ], + "name":"mint", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "internalType":"uint256", + "name":"tokenId", + "type":"uint256" + }, + { + "internalType":"string", + "name":"uri", + "type":"string" + } + ], + "name":"mintWithTokenURI", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"name", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"owner", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "name":"ownerOf", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[], + "name":"renounceOwnership", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"tokenId", + "type":"uint256" + }, + { + "internalType":"string", + "name":"uri", + "type":"string" + } + ], + "name":"setTokenURI", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"symbol", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"tokenOwned", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"tokenId", + "type":"uint256" + } + ], + "name":"tokenURI", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "name":"tokens", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"totalSupply", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"from", + "type":"address" + }, + { + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "internalType":"uint256", + "name":"tokenId", + "type":"uint256" + } + ], + "name":"transferFrom", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"newOwner", + "type":"address" + } + ], + "name":"transferOwnership", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + } +] diff --git a/protocols/synthetix/contracts/token.json b/protocols/synthetix/contracts/token.json new file mode 100644 index 0000000..76fc2b9 --- /dev/null +++ b/protocols/synthetix/contracts/token.json @@ -0,0 +1,415 @@ +[ + { + "constant":true, + "inputs":[], + "name":"name", + "outputs":[ + { + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"spender", + "type":"address" + }, + { + "name":"value", + "type":"uint256" + } + ], + "name":"approve", + "outputs":[ + { + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"_owner", + "type":"address" + } + ], + "name":"nominateNewOwner", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"totalSupply", + "outputs":[ + { + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"from", + "type":"address" + }, + { + "name":"to", + "type":"address" + }, + { + "name":"value", + "type":"uint256" + } + ], + "name":"transferFrom", + "outputs":[ + { + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"decimals", + "outputs":[ + { + "name":"", + "type":"uint8" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"nominatedOwner", + "outputs":[ + { + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "name":"owner", + "type":"address" + } + ], + "name":"balanceOf", + "outputs":[ + { + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"_target", + "type":"address" + } + ], + "name":"setTarget", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[], + "name":"acceptOwnership", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"owner", + "outputs":[ + { + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"callData", + "type":"bytes" + }, + { + "name":"numTopics", + "type":"uint256" + }, + { + "name":"topic1", + "type":"bytes32" + }, + { + "name":"topic2", + "type":"bytes32" + }, + { + "name":"topic3", + "type":"bytes32" + }, + { + "name":"topic4", + "type":"bytes32" + } + ], + "name":"_emit", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"useDELEGATECALL", + "outputs":[ + { + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"symbol", + "outputs":[ + { + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"to", + "type":"address" + }, + { + "name":"value", + "type":"uint256" + } + ], + "name":"transfer", + "outputs":[ + { + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"value", + "type":"bool" + } + ], + "name":"setUseDELEGATECALL", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"target", + "outputs":[ + { + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "name":"owner", + "type":"address" + }, + { + "name":"spender", + "type":"address" + } + ], + "name":"allowance", + "outputs":[ + { + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "inputs":[ + { + "name":"_owner", + "type":"address" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"constructor" + }, + { + "payable":true, + "stateMutability":"payable", + "type":"fallback" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "name":"from", + "type":"address" + }, + { + "indexed":true, + "name":"to", + "type":"address" + }, + { + "indexed":false, + "name":"value", + "type":"uint256" + } + ], + "name":"Transfer", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "name":"owner", + "type":"address" + }, + { + "indexed":true, + "name":"spender", + "type":"address" + }, + { + "indexed":false, + "name":"value", + "type":"uint256" + } + ], + "name":"Approval", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "name":"newTarget", + "type":"address" + } + ], + "name":"TargetUpdated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "name":"newOwner", + "type":"address" + } + ], + "name":"OwnerNominated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "name":"oldOwner", + "type":"address" + }, + { + "indexed":false, + "name":"newOwner", + "type":"address" + } + ], + "name":"OwnerChanged", + "type":"event" + } +] diff --git a/yearn/events.json b/protocols/synthetix/events.json similarity index 100% rename from yearn/events.json rename to protocols/synthetix/events.json diff --git a/synthetix/header.png b/protocols/synthetix/header.png similarity index 100% rename from synthetix/header.png rename to protocols/synthetix/header.png diff --git a/protocols/synthetix/index.json b/protocols/synthetix/index.json new file mode 100644 index 0000000..a4ec227 --- /dev/null +++ b/protocols/synthetix/index.json @@ -0,0 +1,19 @@ +{ + "name": "Synthetix", + "description": "Synthetix is a decentralised synthetic asset issuance protocol built on Ethereum.", + "path": "snxgov.eth", + "folder": "synthetix", + "type": "snapshot", + "suffix": "SC-NFT", + "coinGeckoPriceString": "havven", + "tokenContractAddress": "0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F", + "isEnabled": true, + "hasOnchain": false, + "isHybrid": false, + "hasDelegation": false, + "snapshotSpaceName": "snxgov.eth", + "invalidSnapshots": [], + "branding": {}, + "discourseForum": {}, + "safeAddress": "0x438679ECE13EDB95aDD18Ed02dDbf5e2418FF730" +} diff --git a/synthetix/logo.png b/protocols/synthetix/logo.png similarity index 100% rename from synthetix/logo.png rename to protocols/synthetix/logo.png diff --git a/synthetix/overview.md b/protocols/synthetix/overview.md similarity index 100% rename from synthetix/overview.md rename to protocols/synthetix/overview.md diff --git a/synthetix/Gov Weekly/Update Week 11 2021 18-03-21.md b/protocols/synthetix/resources/Gov Weekly/Update Week 11 2021 18-03-21.md similarity index 100% rename from synthetix/Gov Weekly/Update Week 11 2021 18-03-21.md rename to protocols/synthetix/resources/Gov Weekly/Update Week 11 2021 18-03-21.md diff --git a/synthetix/Gov Weekly/Update Week 12 2021 03-25-21.md b/protocols/synthetix/resources/Gov Weekly/Update Week 12 2021 03-25-21.md similarity index 100% rename from synthetix/Gov Weekly/Update Week 12 2021 03-25-21.md rename to protocols/synthetix/resources/Gov Weekly/Update Week 12 2021 03-25-21.md diff --git a/synthetix/Gov Weekly/Update Week 13 2021 01-04-21.md b/protocols/synthetix/resources/Gov Weekly/Update Week 13 2021 01-04-21.md similarity index 100% rename from synthetix/Gov Weekly/Update Week 13 2021 01-04-21.md rename to protocols/synthetix/resources/Gov Weekly/Update Week 13 2021 01-04-21.md diff --git a/synthetix/Gov Weekly/Update Week 14 2021 08-04-21.md b/protocols/synthetix/resources/Gov Weekly/Update Week 14 2021 08-04-21.md similarity index 100% rename from synthetix/Gov Weekly/Update Week 14 2021 08-04-21.md rename to protocols/synthetix/resources/Gov Weekly/Update Week 14 2021 08-04-21.md diff --git a/synthetix/Gov Weekly/Update Week 8 2021 02-25-21.md b/protocols/synthetix/resources/Gov Weekly/Update Week 8 2021 02-25-21.md similarity index 100% rename from synthetix/Gov Weekly/Update Week 8 2021 02-25-21.md rename to protocols/synthetix/resources/Gov Weekly/Update Week 8 2021 02-25-21.md diff --git a/synthetix/Gov Weekly/Update Week 9 2021 03-05-21.md b/protocols/synthetix/resources/Gov Weekly/Update Week 9 2021 03-05-21.md similarity index 100% rename from synthetix/Gov Weekly/Update Week 9 2021 03-05-21.md rename to protocols/synthetix/resources/Gov Weekly/Update Week 9 2021 03-05-21.md diff --git a/synthetix/calls/November 2020 - Synthetix Community Governance Call.md b/protocols/synthetix/resources/calls/November 2020 - Synthetix Community Governance Call.md similarity index 100% rename from synthetix/calls/November 2020 - Synthetix Community Governance Call.md rename to protocols/synthetix/resources/calls/November 2020 - Synthetix Community Governance Call.md diff --git a/protocols/uniswap/contracts/governance.json b/protocols/uniswap/contracts/governance.json new file mode 100644 index 0000000..70f9609 --- /dev/null +++ b/protocols/uniswap/contracts/governance.json @@ -0,0 +1,644 @@ +[ + { + "inputs":[ + { + "internalType":"address", + "name":"timelock_", + "type":"address" + }, + { + "internalType":"address", + "name":"uni_", + "type":"address" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"constructor" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"id", + "type":"uint256" + } + ], + "name":"ProposalCanceled", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"id", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"address", + "name":"proposer", + "type":"address" + }, + { + "indexed":false, + "internalType":"address[]", + "name":"targets", + "type":"address[]" + }, + { + "indexed":false, + "internalType":"uint256[]", + "name":"values", + "type":"uint256[]" + }, + { + "indexed":false, + "internalType":"string[]", + "name":"signatures", + "type":"string[]" + }, + { + "indexed":false, + "internalType":"bytes[]", + "name":"calldatas", + "type":"bytes[]" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"startBlock", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"endBlock", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"string", + "name":"description", + "type":"string" + } + ], + "name":"ProposalCreated", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"id", + "type":"uint256" + } + ], + "name":"ProposalExecuted", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"uint256", + "name":"id", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"eta", + "type":"uint256" + } + ], + "name":"ProposalQueued", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"address", + "name":"voter", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"bool", + "name":"support", + "type":"bool" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"votes", + "type":"uint256" + } + ], + "name":"VoteCast", + "type":"event" + }, + { + "constant":true, + "inputs":[], + "name":"BALLOT_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"DOMAIN_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"cancel", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + }, + { + "internalType":"bool", + "name":"support", + "type":"bool" + } + ], + "name":"castVote", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + }, + { + "internalType":"bool", + "name":"support", + "type":"bool" + }, + { + "internalType":"uint8", + "name":"v", + "type":"uint8" + }, + { + "internalType":"bytes32", + "name":"r", + "type":"bytes32" + }, + { + "internalType":"bytes32", + "name":"s", + "type":"bytes32" + } + ], + "name":"castVoteBySig", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"execute", + "outputs":[], + "payable":true, + "stateMutability":"payable", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"getActions", + "outputs":[ + { + "internalType":"address[]", + "name":"targets", + "type":"address[]" + }, + { + "internalType":"uint256[]", + "name":"values", + "type":"uint256[]" + }, + { + "internalType":"string[]", + "name":"signatures", + "type":"string[]" + }, + { + "internalType":"bytes[]", + "name":"calldatas", + "type":"bytes[]" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + }, + { + "internalType":"address", + "name":"voter", + "type":"address" + } + ], + "name":"getReceipt", + "outputs":[ + { + "components":[ + { + "internalType":"bool", + "name":"hasVoted", + "type":"bool" + }, + { + "internalType":"bool", + "name":"support", + "type":"bool" + }, + { + "internalType":"uint96", + "name":"votes", + "type":"uint96" + } + ], + "internalType":"struct GovernorAlpha.Receipt", + "name":"", + "type":"tuple" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"latestProposalIds", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"name", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"proposalCount", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"proposalMaxOperations", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"proposalThreshold", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "name":"proposals", + "outputs":[ + { + "internalType":"uint256", + "name":"id", + "type":"uint256" + }, + { + "internalType":"address", + "name":"proposer", + "type":"address" + }, + { + "internalType":"uint256", + "name":"eta", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"startBlock", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"endBlock", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"forVotes", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"againstVotes", + "type":"uint256" + }, + { + "internalType":"bool", + "name":"canceled", + "type":"bool" + }, + { + "internalType":"bool", + "name":"executed", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address[]", + "name":"targets", + "type":"address[]" + }, + { + "internalType":"uint256[]", + "name":"values", + "type":"uint256[]" + }, + { + "internalType":"string[]", + "name":"signatures", + "type":"string[]" + }, + { + "internalType":"bytes[]", + "name":"calldatas", + "type":"bytes[]" + }, + { + "internalType":"string", + "name":"description", + "type":"string" + } + ], + "name":"propose", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"queue", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"quorumVotes", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"uint256", + "name":"proposalId", + "type":"uint256" + } + ], + "name":"state", + "outputs":[ + { + "internalType":"enum GovernorAlpha.ProposalState", + "name":"", + "type":"uint8" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"timelock", + "outputs":[ + { + "internalType":"contract TimelockInterface", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"uni", + "outputs":[ + { + "internalType":"contract UniInterface", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"votingDelay", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"votingPeriod", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"pure", + "type":"function" + } +] diff --git a/protocols/uniswap/contracts/token.json b/protocols/uniswap/contracts/token.json new file mode 100644 index 0000000..3df379b --- /dev/null +++ b/protocols/uniswap/contracts/token.json @@ -0,0 +1,714 @@ +[ + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"address", + "name":"minter_", + "type":"address" + }, + { + "internalType":"uint256", + "name":"mintingAllowedAfter_", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"constructor" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"owner", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"Approval", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"delegator", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"fromDelegate", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"toDelegate", + "type":"address" + } + ], + "name":"DelegateChanged", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"delegate", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"previousBalance", + "type":"uint256" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"newBalance", + "type":"uint256" + } + ], + "name":"DelegateVotesChanged", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "internalType":"address", + "name":"minter", + "type":"address" + }, + { + "indexed":false, + "internalType":"address", + "name":"newMinter", + "type":"address" + } + ], + "name":"MinterChanged", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "internalType":"address", + "name":"from", + "type":"address" + }, + { + "indexed":true, + "internalType":"address", + "name":"to", + "type":"address" + }, + { + "indexed":false, + "internalType":"uint256", + "name":"amount", + "type":"uint256" + } + ], + "name":"Transfer", + "type":"event" + }, + { + "constant":true, + "inputs":[], + "name":"DELEGATION_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"DOMAIN_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"PERMIT_TYPEHASH", + "outputs":[ + { + "internalType":"bytes32", + "name":"", + "type":"bytes32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"address", + "name":"spender", + "type":"address" + } + ], + "name":"allowance", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + } + ], + "name":"approve", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"balanceOf", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + }, + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "name":"checkpoints", + "outputs":[ + { + "internalType":"uint32", + "name":"fromBlock", + "type":"uint32" + }, + { + "internalType":"uint96", + "name":"votes", + "type":"uint96" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"decimals", + "outputs":[ + { + "internalType":"uint8", + "name":"", + "type":"uint8" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"delegatee", + "type":"address" + } + ], + "name":"delegate", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"delegatee", + "type":"address" + }, + { + "internalType":"uint256", + "name":"nonce", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"expiry", + "type":"uint256" + }, + { + "internalType":"uint8", + "name":"v", + "type":"uint8" + }, + { + "internalType":"bytes32", + "name":"r", + "type":"bytes32" + }, + { + "internalType":"bytes32", + "name":"s", + "type":"bytes32" + } + ], + "name":"delegateBySig", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"delegates", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"getCurrentVotes", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + }, + { + "internalType":"uint256", + "name":"blockNumber", + "type":"uint256" + } + ], + "name":"getPriorVotes", + "outputs":[ + { + "internalType":"uint96", + "name":"", + "type":"uint96" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"minimumTimeBetweenMints", + "outputs":[ + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"dst", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + } + ], + "name":"mint", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"mintCap", + "outputs":[ + { + "internalType":"uint8", + "name":"", + "type":"uint8" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"minter", + "outputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"mintingAllowedAfter", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"name", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"nonces", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[ + { + "internalType":"address", + "name":"", + "type":"address" + } + ], + "name":"numCheckpoints", + "outputs":[ + { + "internalType":"uint32", + "name":"", + "type":"uint32" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"owner", + "type":"address" + }, + { + "internalType":"address", + "name":"spender", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + }, + { + "internalType":"uint256", + "name":"deadline", + "type":"uint256" + }, + { + "internalType":"uint8", + "name":"v", + "type":"uint8" + }, + { + "internalType":"bytes32", + "name":"r", + "type":"bytes32" + }, + { + "internalType":"bytes32", + "name":"s", + "type":"bytes32" + } + ], + "name":"permit", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"minter_", + "type":"address" + } + ], + "name":"setMinter", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"symbol", + "outputs":[ + { + "internalType":"string", + "name":"", + "type":"string" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":true, + "inputs":[], + "name":"totalSupply", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "payable":false, + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"dst", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + } + ], + "name":"transfer", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "internalType":"address", + "name":"src", + "type":"address" + }, + { + "internalType":"address", + "name":"dst", + "type":"address" + }, + { + "internalType":"uint256", + "name":"rawAmount", + "type":"uint256" + } + ], + "name":"transferFrom", + "outputs":[ + { + "internalType":"bool", + "name":"", + "type":"bool" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + } +] diff --git a/protocols/uniswap/events.json b/protocols/uniswap/events.json new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/protocols/uniswap/events.json @@ -0,0 +1 @@ +[] diff --git a/uniswap/header.png b/protocols/uniswap/header.png similarity index 100% rename from uniswap/header.png rename to protocols/uniswap/header.png diff --git a/protocols/uniswap/index.json b/protocols/uniswap/index.json new file mode 100644 index 0000000..d085949 --- /dev/null +++ b/protocols/uniswap/index.json @@ -0,0 +1,28 @@ +{ + "name": "Uniswap", + "description": "Uniswap is a decentralized protocol for automated liquidity provision on Ethereum.", + "path": "uniswap", + "folder": "uniswap", + "type": "compoundish", + "suffix": "UNI", + "coinGeckoPriceString": "uniswap", + "tokenContractAddress": "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", + "governanceContractAddress": "0x5e4be8Bc9637f0EAA1A755019e06A68ce081D58F", + "isEnabled": true, + "hasOnchain": true, + "isHybrid": true, + "hasDelegation": true, + "snapshotSpaceName": "uniswap", + "invalidSnapshots": [ + "QmNWZDogjnEMoi8hDFrK7MNmWeAeXnGJjmf5c8nTHfj9K7", + "QmUPcp66S7CqhTFZeszUG7azrZzNNtGx2uqTvaWGqMfLCB", + "QmeNU8EeLygjwkwBmPMVhY1fhohWFtzJx9ee8sePkhmrJz", + "QmXGfbsH7Qt19zzuDDmX1WxnehfEi9K9zNGsQAGuBgyXE3", + "QmTgW3QTYZhfW5Zu7j1Xewy8NQgh2Ga618BkPAPAfmzGcN", + "QmQJuW88TbKzMLtEhWC7HkSrUWdF5FVsdsLvhfAogkzyqn", + "QmU5sggJNTQmSQtxecdsAJxXn9fgSwYz1dXpSpDcgwAqqy" + ], + "branding": {}, + "discourseForum": {}, + "safeAddress": null +} diff --git a/uniswap/logo.png b/protocols/uniswap/logo.png similarity index 100% rename from uniswap/logo.png rename to protocols/uniswap/logo.png diff --git a/uniswap/overview.md b/protocols/uniswap/overview.md similarity index 100% rename from uniswap/overview.md rename to protocols/uniswap/overview.md diff --git a/uniswap/Gov Weekly/Update Week 12 2021 24-03-21.md b/protocols/uniswap/resources/Gov Weekly/Update Week 12 2021 24-03-21.md similarity index 100% rename from uniswap/Gov Weekly/Update Week 12 2021 24-03-21.md rename to protocols/uniswap/resources/Gov Weekly/Update Week 12 2021 24-03-21.md diff --git a/uniswap/Gov Weekly/Update Week 13 2021 01-04-21.md b/protocols/uniswap/resources/Gov Weekly/Update Week 13 2021 01-04-21.md similarity index 100% rename from uniswap/Gov Weekly/Update Week 13 2021 01-04-21.md rename to protocols/uniswap/resources/Gov Weekly/Update Week 13 2021 01-04-21.md diff --git a/uniswap/Gov Weekly/Update Week 14 2021 08-04-21.md b/protocols/uniswap/resources/Gov Weekly/Update Week 14 2021 08-04-21.md similarity index 100% rename from uniswap/Gov Weekly/Update Week 14 2021 08-04-21.md rename to protocols/uniswap/resources/Gov Weekly/Update Week 14 2021 08-04-21.md diff --git a/uniswap/Gov Weekly/Update Week 8 2021 02-22-21.md b/protocols/uniswap/resources/Gov Weekly/Update Week 8 2021 02-22-21.md similarity index 100% rename from uniswap/Gov Weekly/Update Week 8 2021 02-22-21.md rename to protocols/uniswap/resources/Gov Weekly/Update Week 8 2021 02-22-21.md diff --git a/uniswap/Gov Weekly/Update Week 9 2021 03-05-21.md b/protocols/uniswap/resources/Gov Weekly/Update Week 9 2021 03-05-21.md similarity index 100% rename from uniswap/Gov Weekly/Update Week 9 2021 03-05-21.md rename to protocols/uniswap/resources/Gov Weekly/Update Week 9 2021 03-05-21.md diff --git a/uniswap/calls/Community Call - Thursday 12 Nov 17:00 UTC.md b/protocols/uniswap/resources/calls/Community Call - Thursday 12 Nov 17:00 UTC.md similarity index 100% rename from uniswap/calls/Community Call - Thursday 12 Nov 17:00 UTC.md rename to protocols/uniswap/resources/calls/Community Call - Thursday 12 Nov 17:00 UTC.md diff --git a/protocols/yup.eth/contracts/token.json b/protocols/yup.eth/contracts/token.json new file mode 100644 index 0000000..9f96d81 --- /dev/null +++ b/protocols/yup.eth/contracts/token.json @@ -0,0 +1,148 @@ +[ + { + "constant":false, + "inputs":[ + { + "name":"newImplementation", + "type":"address" + } + ], + "name":"upgradeTo", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"newImplementation", + "type":"address" + }, + { + "name":"data", + "type":"bytes" + } + ], + "name":"upgradeToAndCall", + "outputs":[], + "payable":true, + "stateMutability":"payable", + "type":"function" + }, + { + "inputs":[ + { + "internalType":"address", + "name":"account", + "type":"address" + } + ], + "name":"balanceOf", + "outputs":[ + { + "internalType":"uint256", + "name":"", + "type":"uint256" + } + ], + "stateMutability":"view", + "type":"function" + }, + { + "constant":false, + "inputs":[], + "name":"implementation", + "outputs":[ + { + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[ + { + "name":"newAdmin", + "type":"address" + } + ], + "name":"changeAdmin", + "outputs":[], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "constant":false, + "inputs":[], + "name":"admin", + "outputs":[ + { + "name":"", + "type":"address" + } + ], + "payable":false, + "stateMutability":"nonpayable", + "type":"function" + }, + { + "inputs":[ + { + "name":"_logic", + "type":"address" + }, + { + "name":"_admin", + "type":"address" + }, + { + "name":"_data", + "type":"bytes" + } + ], + "payable":true, + "stateMutability":"payable", + "type":"constructor" + }, + { + "payable":true, + "stateMutability":"payable", + "type":"fallback" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":false, + "name":"previousAdmin", + "type":"address" + }, + { + "indexed":false, + "name":"newAdmin", + "type":"address" + } + ], + "name":"AdminChanged", + "type":"event" + }, + { + "anonymous":false, + "inputs":[ + { + "indexed":true, + "name":"implementation", + "type":"address" + } + ], + "name":"Upgraded", + "type":"event" + } +] diff --git a/yup/events.json b/protocols/yup.eth/events.json similarity index 100% rename from yup/events.json rename to protocols/yup.eth/events.json diff --git a/yup/header.png b/protocols/yup.eth/header.png similarity index 100% rename from yup/header.png rename to protocols/yup.eth/header.png diff --git a/protocols/yup.eth/index.json b/protocols/yup.eth/index.json new file mode 100644 index 0000000..6b5fb60 --- /dev/null +++ b/protocols/yup.eth/index.json @@ -0,0 +1,20 @@ +{ + + "name": "Yup", + "description": "Your opinion matters. Curate the web. Earn & influence.", + "path": "yup.eth", + "folder": "yup.eth", + "type": "snapshot", + "suffix": "YUP", + "coinGeckoPriceString": "yup", + "tokenContractAddress": "0x69bBC3F8787d573F1BBDd0a5f40C7bA0Aee9BCC9", + "isEnabled": true, + "hasOnchain": false, + "isHybrid": false, + "hasDelegation": false, + "snapshotSpaceName": "yup.eth", + "invalidSnapshots": [], + "branding": {}, + "discourseForum": {}, + "safeAddress": "0xbd5224f66D5ce49a8Afefc14a76248D158D14c6F" +} diff --git a/yup/logo.png b/protocols/yup.eth/logo.png similarity index 100% rename from yup/logo.png rename to protocols/yup.eth/logo.png diff --git a/yup/overview.md b/protocols/yup.eth/overview.md similarity index 100% rename from yup/overview.md rename to protocols/yup.eth/overview.md diff --git a/yup/Meeting & Events/Community Meeting Feb 18 18-02-21.md b/protocols/yup.eth/resources/Meeting & Events/Community Meeting Feb 18 18-02-21.md similarity index 100% rename from yup/Meeting & Events/Community Meeting Feb 18 18-02-21.md rename to protocols/yup.eth/resources/Meeting & Events/Community Meeting Feb 18 18-02-21.md diff --git a/yup/Meeting & Events/Community Meeting Feb 25 25-02-21.md b/protocols/yup.eth/resources/Meeting & Events/Community Meeting Feb 25 25-02-21.md similarity index 100% rename from yup/Meeting & Events/Community Meeting Feb 25 25-02-21.md rename to protocols/yup.eth/resources/Meeting & Events/Community Meeting Feb 25 25-02-21.md diff --git a/rally/events.json b/rally/events.json deleted file mode 100644 index e69de29..0000000 diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index 8ae8466..0000000 --- a/rollup.config.js +++ /dev/null @@ -1,9 +0,0 @@ -import typescript from '@rollup/plugin-typescript'; - -export default { - input: './index.ts', - output: { - dir: 'dist', format: 'cjs' - }, - plugins: [typescript()] -}; \ No newline at end of file diff --git a/scripts/build.ts b/scripts/build.ts new file mode 100644 index 0000000..e8917cc --- /dev/null +++ b/scripts/build.ts @@ -0,0 +1,16 @@ +import fs from "fs"; +import mkdirp from "mkdirp"; + +const protocols = fs.readdirSync("./protocols"); + +const protocolInfo = protocols.map((protocol) => + fs.readFileSync(`./protocols/${protocol}/index.json`, "utf8") +); + +mkdirp.sync("./dist"); +fs.copyFileSync("./index.d.ts", "./dist/index.d.ts"); +fs.copyFileSync("./types.ts", "./dist/types.ts"); +fs.writeFileSync( + "./dist/index.ts", + `export default [${protocolInfo.toString()}];` +); diff --git a/scripts/validate.ts b/scripts/validate.ts new file mode 100644 index 0000000..6aed92a --- /dev/null +++ b/scripts/validate.ts @@ -0,0 +1,30 @@ +import { validator } from "io-ts-validator"; +import { ProtocolIo } from "../types"; +import protocols from "../dist"; + +const errors = []; + +for (const protocol of protocols) { + try { + validator(ProtocolIo).decodeSync(protocol); + } catch (e) { + errors.push({ + protocol: protocol.name, + message: e, + }); + } +} + +const errorMessage = errors.reduce( + (message, error) => + ` + ${message}\n + Error validating protocol: ${error.protocol}\n + ${error.message} + `, + "" +); + +if (errorMessage) { + throw new Error(errorMessage); +} diff --git a/tsconfig.json b/tsconfig.json index 9adf4aa..0848307 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,70 +1,14 @@ { "compilerOptions": { - /* Visit https://aka.ms/tsconfig.json to read more about this file */ - - /* Basic Options */ - // "incremental": true, /* Enable incremental compilation */ - "target": "es5", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ - // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - // "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "dist", /* Redirect output structure to the directory. */ - // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true, /* Enable all strict type-checking options. */ - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ - - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - - /* Advanced Options */ - "skipLibCheck": true, /* Skip type checking of declaration files. */ - "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + "target": "es5", + "module": "commonjs", + "outDir": "dist", + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, + "resolveJsonModule": true } } diff --git a/types.ts b/types.ts new file mode 100644 index 0000000..a3ab233 --- /dev/null +++ b/types.ts @@ -0,0 +1,36 @@ +import * as t from "io-ts"; + +export const ProtocolIo = t.type({ + name: t.string, + description: t.string, + path: t.string, + folder: t.string, + type: t.union([t.literal("snapshot"), t.literal("compoundish")]), + suffix: t.string, + coinGeckoPriceString: t.string, + tokenContractAddress: t.string, + governanceContractAddress: t.union([t.string, t.undefined]), + isEnabled: t.boolean, + hasOnchain: t.boolean, + isHybrid: t.boolean, + hasDelegation: t.boolean, + snapshotSpaceName: t.union([t.string, t.undefined]), + invalidSnapshots: t.union([t.array(t.string), t.undefined]), + branding: t.union([ + t.partial({ + primaryColor: t.string, + accentColor: t.string, + }), + t.undefined, + ]), + discourseForum: t.union([ + t.partial({ + url: t.string, + categoryId: t.string, + }), + t.undefined, + ]), + safeAddress: t.union([t.string, t.null]), +}); + +export type Protocol = t.TypeOf; diff --git a/yarn.lock b/yarn.lock index 07c635e..749a780 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,69 +2,87 @@ # yarn lockfile v1 -"@rollup/plugin-typescript@^8.1.1": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-8.1.1.tgz#cadd6c381a92cc7e8148cc8b1eeba146020635d0" - integrity sha512-DPFy0SV8/GgHFL31yPFVo0G1T3yzwdw6R9KisBfO2zCYbDHUqDChSWr1KmtpGz/TmutpoGJjIvu80p9HzCEF0A== - dependencies: - "@rollup/pluginutils" "^3.1.0" - resolve "^1.17.0" - -"@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -estree-walker@^1.0.1: +"@types/mkdirp@^1.0.1": version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-1.0.1.tgz#0930b948914a78587de35458b86c907b6e98bbf6" + integrity sha512-HkGSK7CGAXncr8Qn/0VqNtExEE+PHMWb+qlR1faHMao7ng6P3tAaoWWBMdva0gL5h4zprjIO89GJOLXsMcDm1Q== + dependencies: + "@types/node" "*" -function-bind@^1.1.1: +"@types/node@*", "@types/node@^14.14.37": + version "14.14.37" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" + integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +buffer-from@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +fp-ts@^2.9.5: + version "2.9.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-2.9.5.tgz#6690cd8b76b84214a38fc77cbbbd04a38f86ea90" + integrity sha512-MiHrA5teO6t8zKArE3DdMPT/Db6v2GUt5yfWnhBTrrsVfeCJUUnV6sgFvjGNBKDmEMqVwRFkEePL7wPwqrLKKA== + +io-ts-validator@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/io-ts-validator/-/io-ts-validator-0.0.5.tgz#6d2184a7fc04c0293a4df80f913c18f8eea6801e" + integrity sha512-5ZToFVK3/j4QR1jlcJjZquqolzSoElP4gCJQZR0xDOackGk42CNN9PRAYwFYG3Dj8F/Zk0lH6xrw19xvlr1QCQ== + +io-ts@^2.2.16: + version "2.2.16" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-2.2.16.tgz#597dffa03db1913fc318c9c6df6931cb4ed808b2" + integrity sha512-y5TTSa6VP6le0hhmIyN0dqEXkrZeJLeC5KApJq6VLci3UEKF80lZ+KuoUs02RhBxNWlrqSNxzfI7otLX1Euv8Q== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +source-map-support@^0.5.17: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== dependencies: - function-bind "^1.1.1" + buffer-from "^1.0.0" + source-map "^0.6.0" -is-core-module@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +ts-node@^9.1.1: + version "9.1.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d" + integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg== dependencies: - has "^1.0.3" - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -picomatch@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -resolve@^1.17.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.19.0.tgz#1af5bf630409734a067cae29318aac7fa29a267c" - integrity sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg== - dependencies: - is-core-module "^2.1.0" - path-parse "^1.0.6" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.17" + yn "3.1.1" tslib@^2.1.0: version "2.1.0" @@ -75,3 +93,8 @@ typescript@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.1.3.tgz#519d582bd94cba0cf8934c7d8e8467e473f53bb7" integrity sha512-B3ZIOf1IKeH2ixgHhj6la6xdwR9QrLC5d1VKeCSY4tvkqhF2eqd9O7txNlS0PO3GrBAFIdr3L1ndNwteUbZLYg== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==