Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat(subgraph): Add fields to ease dashboard tracking. #585

Merged
merged 43 commits into from
Apr 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
6b98c40
fix(subgraph): active jurors counting error
alcercu Feb 17, 2023
e5012c1
feat(contracts): add degreeOfCoherency and round to TokenAndETHShift …
alcercu Feb 21, 2023
66ff9dc
feat(subgraph/WIP): add degreeOfCoherency and penalty tracking
alcercu Feb 21, 2023
d38feb9
fix(subgraph): remove unused import
alcercu Feb 24, 2023
eedc033
fix(subgraph): active jurors counting error
alcercu Feb 17, 2023
1ea2fa2
fix(subgraph): remove unused import
alcercu Feb 24, 2023
e432f67
fix(subgraph): penalty entity errors
alcercu Feb 24, 2023
834d588
chore: extra governance setters
jaybuidl Feb 28, 2023
62f9cdc
chore: redeployed the arbitrator, todo: redeploy the gateways
jaybuidl Feb 28, 2023
aabfb18
chore(subgraph): udpate contract addresses and event signature
alcercu Mar 1, 2023
2d97a60
fix(subgraph): use updatePenalty correctly and fix init bug
alcercu Mar 1, 2023
f339eb2
docs: improve readme "getting started" section
kemuru Mar 7, 2023
c0fc038
docs: add compile contracts section
kemuru Mar 8, 2023
d0a4e22
docs: move section to web
kemuru Mar 9, 2023
a2b411a
docs: remove headline
kemuru Mar 9, 2023
720f3fa
docs: fix readme link
kemuru Mar 9, 2023
cd77bf9
feat: add executeDisputeWorkflow script
kemuru Mar 14, 2023
88f8827
chore: remove unnecessary /
kemuru Mar 14, 2023
4fcc9d6
chore: remove redundant code
kemuru Mar 15, 2023
eada6c0
feat: add more scripts, add guide, add commands
kemuru Mar 17, 2023
70ba4c4
refactor: simplify a few things,fix hash undefine
kemuru Mar 17, 2023
4ba5380
refactor: abstract more parameters
kemuru Mar 17, 2023
e694306
chore: deployed an arbitrable on Arbitrum Goerli
jaybuidl Mar 20, 2023
5bec912
feat: script works in hardhat, arbitrumGoerli
kemuru Mar 22, 2023
fb38a04
docs: clarification of castVote in README
kemuru Mar 22, 2023
abbdf56
fix: make params mandatory
kemuru Mar 23, 2023
8285bbe
refactor: modularization of utils
kemuru Mar 23, 2023
965d62a
chore: just removing 1 unnecessary line
kemuru Mar 23, 2023
b70f10e
feat: support on localhost, added createCourt task
kemuru Mar 25, 2023
a6864ce
feat: added simulate:all task, added a prefix for all the simuation t…
jaybuidl Mar 30, 2023
5ff3925
feat: submit-evidence, better naming, fix todo-s
kemuru Mar 31, 2023
a322fe1
feat: dev tooling to run entire stack locally, removal of depcheck
jaybuidl Apr 8, 2023
5b6d1c7
docs: comment
jaybuidl Apr 10, 2023
4b74643
feat: simplification of the tmux script
jaybuidl Apr 10, 2023
476134b
fix: fundAppeal not working locally
kemuru Apr 10, 2023
f14c2b4
Merge branch 'master' into feat(subgraph)/add-fields
jaybuidl Apr 13, 2023
5b28e52
chore: critical security patch CVE-2022-29078 and minor version bumps
jaybuidl Apr 13, 2023
428e955
fix: missing yarn plugin
jaybuidl Apr 13, 2023
be01800
fix: [email protected] is broken, rolling back
jaybuidl Apr 13, 2023
2c86f14
fix: failing test, removed unnecessary/outdated deps like ethers-waffle
jaybuidl Apr 13, 2023
0e0fd99
fix: incorrect nvm node version for Netlify
jaybuidl Apr 13, 2023
3e3ee32
fix: crash when account env var is not defined
jaybuidl Apr 13, 2023
d23bbf8
fix: parcel failed to resolve 'process' due to parcel-bundler/parcel#…
jaybuidl Apr 13, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

yarn lint-staged \
&& yarn depcheck
yarn lint-staged
2 changes: 1 addition & 1 deletion .nvmrc
Original file line number Diff line number Diff line change
@@ -1 +1 @@
lts/fermium
16
541 changes: 541 additions & 0 deletions .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs

Large diffs are not rendered by default.

14 changes: 14 additions & 0 deletions .yarn/plugins/@yarnpkg/plugin-stage.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/* eslint-disable */
//prettier-ignore
module.exports = {
name: "@yarnpkg/plugin-stage",
factory: function (require) {
var plugin=(()=>{var N=Object.create,x=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var W=Object.getPrototypeOf,J=Object.prototype.hasOwnProperty;var K=t=>x(t,"__esModule",{value:!0});var Z=(t,e)=>{for(var s in e)x(t,s,{get:e[s],enumerable:!0})},q=(t,e,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of _(e))!J.call(t,a)&&a!=="default"&&x(t,a,{get:()=>e[a],enumerable:!(s=G(e,a))||s.enumerable});return t},w=t=>q(K(x(t!=null?N(W(t)):{},"default",t&&t.__esModule&&"default"in t?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var ot={};Z(ot,{default:()=>ct});var V=w(require("@yarnpkg/cli")),D=w(require("@yarnpkg/core")),y=w(require("@yarnpkg/fslib")),p=w(require("clipanion"));var l=w(require("@yarnpkg/core")),d=w(require("@yarnpkg/fslib"));var f=w(require("@yarnpkg/fslib")),i;(function(r){r[r.CREATE=0]="CREATE",r[r.DELETE=1]="DELETE",r[r.ADD=2]="ADD",r[r.REMOVE=3]="REMOVE",r[r.MODIFY=4]="MODIFY"})(i||(i={}));async function v(t,{marker:e}){do if(!f.xfs.existsSync(f.ppath.join(t,e)))t=f.ppath.dirname(t);else return t;while(t!=="/");return null}function L(t,{roots:e,names:s}){if(s.has(f.ppath.basename(t)))return!0;do if(!e.has(t))t=f.ppath.dirname(t);else return!0;while(t!=="/");return!1}function $(t){let e=[],s=[t];for(;s.length>0;){let a=s.pop(),n=f.xfs.readdirSync(a);for(let r of n){let m=f.ppath.resolve(a,r);f.xfs.lstatSync(m).isDirectory()?s.push(m):e.push(m)}}return e}function T(t,e){let s=0,a=0;for(let n of t)n!=="wip"&&(e.test(n)?s+=1:a+=1);return s>=a}function I(t){let e=T(t,/^(\w\(\w+\):\s*)?\w+s/),s=T(t,/^(\w\(\w+\):\s*)?[A-Z]/),a=T(t,/^\w\(\w+\):/);return{useThirdPerson:e,useUpperCase:s,useComponent:a}}function z(t){return t.useComponent?"chore(yarn): ":""}var Q=new Map([[0,"create"],[1,"delete"],[2,"add"],[3,"remove"],[4,"update"]]);function H(t,e){let s=z(t),a=[],n=e.slice().sort((r,m)=>r[0]-m[0]);for(;n.length>0;){let[r,m]=n.shift(),h=Q.get(r);t.useUpperCase&&a.length===0&&(h=`${h[0].toUpperCase()}${h.slice(1)}`),t.useThirdPerson&&(h+="s");let o=[m];for(;n.length>0&&n[0][0]===r;){let[,c]=n.shift();o.push(c)}o.sort();let g=o.shift();o.length===1?g+=" (and one other)":o.length>1&&(g+=` (and ${o.length} others)`),a.push(`${h} ${g}`)}return`${s}${a.join(", ")}`}var X="Commit generated via `yarn stage`",tt=11;async function j(t){let{code:e,stdout:s}=await l.execUtils.execvp("git",["log","-1","--pretty=format:%H"],{cwd:t});return e===0?s.trim():null}async function et(t,e){let s=[],a=e.filter(g=>d.ppath.basename(g.path)==="package.json");for(let{action:g,path:c}of a){let P=d.ppath.relative(t,c);if(g===i.MODIFY){let u=await j(t),{stdout:b}=await l.execUtils.execvp("git",["show",`${u}:${P}`],{cwd:t,strict:!0}),A=await l.Manifest.fromText(b),M=await l.Manifest.fromFile(c),F=new Map([...M.dependencies,...M.devDependencies]),R=new Map([...A.dependencies,...A.devDependencies]);for(let[C,U]of R){let S=l.structUtils.stringifyIdent(U),k=F.get(C);k?k.range!==U.range&&s.push([i.MODIFY,`${S} to ${k.range}`]):s.push([i.REMOVE,S])}for(let[C,U]of F)R.has(C)||s.push([i.ADD,l.structUtils.stringifyIdent(U)])}else if(g===i.CREATE){let u=await l.Manifest.fromFile(c);u.name?s.push([i.CREATE,l.structUtils.stringifyIdent(u.name)]):s.push([i.CREATE,"a package"])}else if(g===i.DELETE){let u=await j(t),{stdout:b}=await l.execUtils.execvp("git",["show",`${u}:${P}`],{cwd:t,strict:!0}),A=await l.Manifest.fromText(b);A.name?s.push([i.DELETE,l.structUtils.stringifyIdent(A.name)]):s.push([i.DELETE,"a package"])}else throw new Error("Assertion failed: Unsupported action type")}let{code:n,stdout:r}=await l.execUtils.execvp("git",["log",`-${tt}`,"--pretty=format:%s"],{cwd:t}),m=n===0?r.split(/\n/g).filter(g=>g!==""):[],h=I(m);return H(h,s)}var st={[i.CREATE]:[" A ","?? "],[i.MODIFY]:[" M "],[i.DELETE]:[" D "]},at={[i.CREATE]:["A "],[i.MODIFY]:["M "],[i.DELETE]:["D "]},Y={async findRoot(t){return await v(t,{marker:".git"})},async filterChanges(t,e,s,a){let{stdout:n}=await l.execUtils.execvp("git",["status","-s"],{cwd:t,strict:!0}),r=n.toString().split(/\n/g),m=(a==null?void 0:a.staged)?at:st;return[].concat(...r.map(o=>{if(o==="")return[];let g=o.slice(0,3),c=d.ppath.resolve(t,o.slice(3));if(!(a==null?void 0:a.staged)&&g==="?? "&&o.endsWith("/"))return $(c).map(P=>({action:i.CREATE,path:P}));{let u=[i.CREATE,i.MODIFY,i.DELETE].find(b=>m[b].includes(g));return u!==void 0?[{action:u,path:c}]:[]}})).filter(o=>L(o.path,{roots:e,names:s}))},async genCommitMessage(t,e){return await et(t,e)},async makeStage(t,e){let s=e.map(a=>d.npath.fromPortablePath(a.path));await l.execUtils.execvp("git",["add","--",...s],{cwd:t,strict:!0})},async makeCommit(t,e,s){let a=e.map(n=>d.npath.fromPortablePath(n.path));await l.execUtils.execvp("git",["add","-N","--",...a],{cwd:t,strict:!0}),await l.execUtils.execvp("git",["commit","-m",`${s}

${X}
`,"--",...a],{cwd:t,strict:!0})},async makeReset(t,e){let s=e.map(a=>d.npath.fromPortablePath(a.path));await l.execUtils.execvp("git",["reset","HEAD","--",...s],{cwd:t,strict:!0})}};var O={async findRoot(t){return await v(t,{marker:".hg"})},async filterChanges(t,e,s){return[]},async genCommitMessage(t,e){return""},async makeStage(t,e){},async makeCommit(t,e,s){},async makeReset(t,e){},async makeUpdate(t,e){}};var it=[Y,O],E=class extends V.BaseCommand{constructor(){super(...arguments);this.commit=p.Option.Boolean("-c,--commit",!1,{description:"Commit the staged files"});this.reset=p.Option.Boolean("-r,--reset",!1,{description:"Remove all files from the staging area"});this.dryRun=p.Option.Boolean("-n,--dry-run",!1,{description:"Print the commit message and the list of modified files without staging / committing"});this.update=p.Option.Boolean("-u,--update",!1,{hidden:!0})}async execute(){let e=await D.Configuration.find(this.context.cwd,this.context.plugins),{project:s}=await D.Project.find(e,this.context.cwd),{driver:a,root:n}=await nt(s.cwd),r=[e.get("cacheFolder"),e.get("globalFolder"),e.get("virtualFolder"),e.get("yarnPath")];await e.triggerHook(c=>c.populateYarnPaths,s,c=>{r.push(c)});let m=new Set;for(let c of r)for(let P of rt(n,c))m.add(P);let h=new Set([e.get("rcFilename"),e.get("lockfileFilename"),"package.json"]),o=await a.filterChanges(n,m,h),g=await a.genCommitMessage(n,o);if(this.dryRun)if(this.commit)this.context.stdout.write(`${g}
`);else for(let c of o)this.context.stdout.write(`${y.npath.fromPortablePath(c.path)}
`);else if(this.reset){let c=await a.filterChanges(n,m,h,{staged:!0});c.length===0?this.context.stdout.write("No staged changes found!"):await a.makeReset(n,c)}else o.length===0?this.context.stdout.write("No changes found!"):this.commit?await a.makeCommit(n,o,g):(await a.makeStage(n,o),this.context.stdout.write(g))}};E.paths=[["stage"]],E.usage=p.Command.Usage({description:"add all yarn files to your vcs",details:"\n This command will add to your staging area the files belonging to Yarn (typically any modified `package.json` and `.yarnrc.yml` files, but also linker-generated files, cache data, etc). It will take your ignore list into account, so the cache files won't be added if the cache is ignored in a `.gitignore` file (assuming you use Git).\n\n Running `--reset` will instead remove them from the staging area (the changes will still be there, but won't be committed until you stage them back).\n\n Since the staging area is a non-existent concept in Mercurial, Yarn will always create a new commit when running this command on Mercurial repositories. You can get this behavior when using Git by using the `--commit` flag which will directly create a commit.\n ",examples:[["Adds all modified project files to the staging area","yarn stage"],["Creates a new commit containing all modified project files","yarn stage --commit"]]});var B=E;async function nt(t){let e=null,s=null;for(let a of it)if((s=await a.findRoot(t))!==null){e=a;break}if(e===null||s===null)throw new p.UsageError("No stage driver has been found for your current project");return{driver:e,root:s}}function rt(t,e){let s=[];if(e===null)return s;for(;;){(e===t||e.startsWith(`${t}/`))&&s.push(e);let a;try{a=y.xfs.statSync(e)}catch(n){break}if(a.isSymbolicLink())e=y.ppath.resolve(y.ppath.dirname(e),y.xfs.readlinkSync(e));else break}return s}var lt={commands:[B]},ct=lt;return ot;})();
return plugin;
}
};
6 changes: 6 additions & 0 deletions .yarnrc.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
nodeLinker: node-modules

plugins:
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
spec: "@yarnpkg/plugin-interactive-tools"
- path: .yarn/plugins/@yarnpkg/plugin-stage.cjs
spec: "@yarnpkg/plugin-stage"

yarnPath: .yarn/releases/yarn-3.3.1.cjs
153 changes: 131 additions & 22 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,26 @@

---

## Deployments

##### ⛓️ [Contracts addresses](contracts/README.md#deployed-addresses)

##### 🗃️ [Subgraph endpoints](subgraph/README.md#deployments)

##### ⚖️ [Web frontend](https://app.netlify.com/sites/kleros-v2/deploys)

## Content

| Package | Description |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **[bots](/bots)** | Automation of the on-chain upkeep of the smart contracts. Anyone willing to spend some gas may run these bots and contribute to the upkeep operations. |
| **[bot-pinner](/bot-pinner)** | Replication and pinning of the IPFS content produced by the court, such as the pieces of evidence submitted in a case. |
| **[contracts](/contracts)** | Smart contracts of the arbitration protocol. |
| **[evidence-display](/evidence-display)** | display interface that should be used to render the evidence for arbitrators, as described by [ERC-1497: Evidence Standard](https://github.com/ethereum/EIPs/issues/1497). |
| **[dynamic-script](/dynamic-script)** | allows fetching the dynamic content for the arbitration, as described by [ERC-1497: Evidence Standard](https://github.com/ethereum/EIPs/issues/1497). |
| **[subgraph](/subgraph)** | The indexing layer. |
| **[web](/web)** | The court frontend intended for the jurors and parties in a dispute. |

## Toolchain:

- Solidity 0.8
Expand All @@ -39,19 +59,31 @@

## Contributing

### Pre-Requisites
### Prerequisites

- Install NodeJS 16:
- on Red Hat Linux: `dnf module install nodejs:16`
- on Red Hat Linux: `sudo dnf module install nodejs:16`
- on Ubuntu Linux: `sudo snap install node --classic`
- on MacOS via [brew](https://brew.sh/): `brew install node`
- on Windows via [Chocolatey](https://chocolatey.org/): `choco install nvs`
- Install Yarn v1.22: `npm install -g yarn`
- [Upgrade](https://yarnpkg.com/getting-started/install#updating-to-the-latest-versions) Yarn to v3: `yarn set version berry`
- Then [upgrade](https://yarnpkg.com/getting-started/install#updating-to-the-latest-versions) Yarn to v3: `yarn set version berry`
- Install Volta.sh: `curl https://get.volta.sh | bash`
- Install [Docker Desktop](https://www.docker.com/products/docker-desktop/) to run the local graph node.
- Shell utilities: [jq](https://stedolan.github.io/jq/), [yq](https://mikefarah.gitbook.io/yq/)
- on Red Hat Linux: `sudo dnf install jq yq`
- on Ubuntu Linux: `sudo snap install jq yq`
- on MacOS via [brew](https://brew.sh/): `brew install jq yq`

### Install the dependencies

### Optional Steps
```bash
$ yarn install

# Foundry libraries
$ git submodule update --init --recursive -j 4
```

#### [Hardhat CLI auto-completion](https://hardhat.org/guides/shorthand.html)
### [Hardhat CLI auto-completion](https://hardhat.org/guides/shorthand.html) (optional)

```bash
$ npm i -g hardhat-shorthand
Expand All @@ -60,32 +92,109 @@ $ hardhat-completion install
✔ Which Shell do you use ? · bash
✔ We will install completion to ~/.bashrc, is it ok ? (y/N) · true

$ . ~/.bashrc
$ exec bash
```

### Getting Started
### Full Stack Local Deployment

#### Install the dependencies
Run the commands below from the top-level folder. Alternatively, it is possible to `cd` into the relevant package first and then call yarn without `workspace @kleros/xxxx`.

#### Shortcut using tmux

If you have **[tmux](https://github.com/tmux/tmux/wiki)** installed, you can get started quickly with a single command.

```bash
$ npm install -g depcheck
$ yarn local-stack
```

# sets up yarn version
$ yarn prepare
![terminal](/docs/local-stack-2.png)

$ yarn install
#### Shell 1 - Local RPC with Contracts Deployed

```bash
$ yarn workspace @kleros/kleros-v2-contracts start-local
...
Started HTTP and WebSocket JSON-RPC server at http://127.0.0.1:8545/

```

⏳ Wait until deployment is complete.

#### Shell 2 - Local Graph Node

```bash
$ yarn workspace @kleros/kleros-v2-subgraph start-local-indexer
...
graph-node-graph-node-1 | INFO Successfully connected to IPFS node at: http://ipfs:5001/
graph-node-graph-node-1 | INFO Pool successfully connected to Postgres, pool: main, shard: primary, component: Store
...
graph-node-graph-node-1 | INFO Connected to Ethereum, capabilities: archive, traces, network_version: 31337, provider: mainnet-rpc-0
```

⏳ Wait until the graph service is ready.

#### Shell 3 - Subgraph Rebuild and Local Deploy

:warning: This step modifies `subgraph.yaml` and creates a backup file. See further down on how to restore it.

```bash
$ yarn workspace @kleros/kleros-v2-subgraph rebuild-deploy-local
...
✔ Upload subgraph to IPFS

Build completed: QmZVaZQ9qcXPia9YnFEKk7D1dEDHbfyDiJi1sqJ6E1NydB

Deployed to http://localhost:8000/subgraphs/name/kleros/kleros-v2-core-local/graphql

Subgraph endpoints:
Queries (HTTP): http://localhost:8000/subgraphs/name/kleros/kleros-v2-core-local
```

#### Shell 4 - Frontend Pointing to the Local Subgraph

```bash
$ yarn workspace @kleros/kleros-v2-web start-local

Server running at http://localhost:1234
✨ Built in 2.35s
```

## Repo Structure
### Redeploying

```bash
# Contracts
$ yarn workspace @kleros/kleros-v2-contracts deploy-local

# Subgraph
$ yarn workspace @kleros/kleros-v2-subgraph rebuild-deploy-local

```

### Simulating Arbitration Activity

```bash
$ yarn workspace @kleros/kleros-v2-contracts simulate-local

```

### Stopping

Just press `Ctrl + c` in each terminal.

#### Docker containers and data removal

`yarn workspace @kleros/kleros-v2-subgraph stop-local-indexer`

#### Restoring subgraph.yaml

##### From a backup file

Every versions were saved as `subgraph.yaml.bak.<timestamp>`.

Each directory at the root of this repository contains code for each individual part that enables this integration:
##### Based on the ArbitrumGoerli deployment artifacts

- **`bots/`**: service to automate some steps of the flow which otherwise would required manual intervention from users.
- **Notice:** while this is a centralized service, it exists only for convenience. Anyone can fulfill the role of the bots if they wish to do so.
- **`contracts/`**: Smart contracts running the arbitration system [Learn more](contracts/README.md).
- **`dynamic-script/`**: allows fetching the dynamic content for the arbitration, as described by [ERC-1497: Evidence Standard](https://github.com/ethereum/EIPs/issues/1497).
- **`evidence-display/`**: display interface that should be used to render the evidence for arbitrators, as described by [ERC-1497: Evidence Standard](https://github.com/ethereum/EIPs/issues/1497).
`yarn workspace @kleros/kleros-v2-subgraph update`

## Deployment
##### Based on the last commit

See [contracts/README.md](contracts/README.md#deployed-addresses).
`git restore subgraph.yaml`
2 changes: 1 addition & 1 deletion bot-pinner/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,6 @@
"node": ">=16.13.0"
},
"devDependencies": {
"@dappnode/dappnodesdk": "^0.2.71"
"@dappnode/dappnodesdk": "^0.2.83"
}
}
7 changes: 7 additions & 0 deletions contracts/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,10 @@ GNOSISSCAN_API_KEY=ABC123ABC123ABC123ABC123ABC123ABC1
# Optionally for debugging
# TENDERLY_USERNAME=your_username
# TENDERLY_PROJECT=your_project

# Used by the "hardhat.config.ts" file and important to set them for the "scripts/simulations" tasks
ARB_GOERLI_PRIVATE_KEY_WALLET_1=
ARB_GOERLI_PRIVATE_KEY_WALLET_2=
ARB_GOERLI_PRIVATE_KEY_WALLET_3=
ARB_GOERLI_PRIVATE_KEY_WALLET_4=
ARB_GOERLI_PRIVATE_KEY_WALLET_5=
1 change: 1 addition & 0 deletions contracts/.npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
sign-git-tag=true
2 changes: 2 additions & 0 deletions contracts/.yarnrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
nodeLinker: node-modules

9 changes: 5 additions & 4 deletions contracts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,16 @@ Refresh the list of deployed contracts by running `./scripts/generateDeployments
#### Arbitrum Goerli

- [PNK](https://goerli.arbiscan.io/token/0x4DEeeFD054434bf6721eF39Aa18EfB3fd0D12610/token-transfers)
- [ArbitrableExampleEthFee](https://goerli.arbiscan.io/address/0x1fF31be1924f55804350ADe4945f3B3a6a2e15d2)
- [BlockHashRNG](https://goerli.arbiscan.io/address/0x68eE49dfD9d76f3386257a3D0e0A85c0A5519bBD)
- [DisputeKitClassic](https://goerli.arbiscan.io/address/0x86734488ABF0E1AD40bc4DE4F820e808f39Bea09)
- [DisputeResolver](https://goerli.arbiscan.io/address/0xDe3eCeB73C453E56F5661ad029a41341CF592b9A)
- [DisputeKitClassic](https://goerli.arbiscan.io/address/0x0b24767Ae86Da2F5B442B2A524d3D9809CD0B5B2)
- [DisputeResolver](https://goerli.arbiscan.io/address/0x311eB7f0fcA3037DF4F02f2F3470d295228F474D)
- [FastBridgeSender](https://goerli.arbiscan.io/address/0x4d18b9792e0D8F5aF696E71dBEDff8fcBEed6e8C)
- [HomeGatewayToEthereum](https://goerli.arbiscan.io/address/0xed12799915180a257985631fbD2ead261eD838cf)
- [HomeGatewayToGnosis](https://goerli.arbiscan.io/address/0x12613A66F1E5A2086374e103F66BF0eddA5d1478)
- [KlerosCore](https://goerli.arbiscan.io/address/0x3eED6aaCa43f4Bb98C591e4A0d2C4a124efF9C24)
- [KlerosCore](https://goerli.arbiscan.io/address/0xD08Ab99480d02bf9C092828043f611BcDFEA917b)
- [PolicyRegistry](https://goerli.arbiscan.io/address/0xC5655728387Ce5E2aAA22138114E5777370aBDae)
- [RandomizerRNG](https://goerli.arbiscan.io/address/0xa2d1A3CDF0becEdb724e5A34De7022B6FF5e4787)
- [RandomizerRNG](https://goerli.arbiscan.io/address/0x5145bde18F44513CfBa4906F07105b47674b0c94)
- [SortitionSumTreeFactoryV2](https://goerli.arbiscan.io/address/0x678E676fd0048da8c35d5B03fabB53a7beBf73A6)

## Getting Started
Expand Down
Loading