Skip to content

Commit 2842949

Browse files
authored
Merge branch 'dev' into feat/court-features
2 parents 65f84cf + 0e96a87 commit 2842949

File tree

170 files changed

+20364
-8904
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

170 files changed

+20364
-8904
lines changed

.github/workflows/contracts-testing.yml

Lines changed: 121 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -15,73 +15,129 @@ on:
1515
pull_request:
1616
branches:
1717
- "*"
18-
19-
permissions: # added using https://github.com/step-security/secure-workflows
18+
19+
permissions: # added using https://github.com/step-security/secure-workflows
2020
contents: read
2121

2222
jobs:
23-
contracts-testing:
23+
# *********************************************************************************** #
24+
# ******************************* Hardhat Tests ************************************* #
25+
# *********************************************************************************** #
26+
hardhat-tests:
2427
runs-on: ubuntu-latest
2528
steps:
26-
- name: Harden Runner
27-
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
28-
with:
29-
disable-sudo: false
30-
egress-policy: block
31-
allowed-endpoints: >
32-
binaries.soliditylang.org:443
33-
classic.yarnpkg.com:443
34-
github.com:443
35-
nightly.yarnpkg.com:443
36-
nodejs.org:443
37-
objects.githubusercontent.com:443
38-
registry.yarnpkg.com:443
39-
registry.npmjs.org:443
40-
54.185.253.63:443
41-
42-
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
43-
with:
44-
submodules: recursive
45-
46-
- name: Set up corepack (for yarn)
47-
run: |
48-
corepack enable
49-
corepack prepare [email protected] --activate
50-
yarn set version 4.9.2
51-
52-
- name: Setup Node.js environment
53-
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
54-
with:
55-
node-version: 20.x
56-
cache: yarn
57-
58-
- name: Cache node modules
59-
uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
60-
env:
61-
cache-name: cache-node-modules
62-
with:
63-
path: |
64-
~/.npm
65-
**/node_modules
66-
key: ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}
67-
restore-keys: |
68-
${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}-
69-
70-
- name: Install contracts dependencies
71-
run: yarn workspace @kleros/kleros-v2-contracts install
72-
73-
- name: Install Foundry
74-
uses: foundry-rs/foundry-toolchain@de808b1eea699e761c404bda44ba8f21aba30b2c # v1.3.1
75-
76-
- name: Install lcov
77-
run: sudo apt-get install -y lcov
78-
79-
- name: Run Hardhat and Foundry tests with coverage
80-
run: yarn coverage
81-
working-directory: contracts
82-
83-
- name: Upload a build artifact
84-
uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
85-
with:
86-
name: code-coverage-report
87-
path: contracts/coverage
29+
- name: Harden Runner
30+
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
31+
with:
32+
disable-sudo: false
33+
egress-policy: block
34+
allowed-endpoints: >
35+
binaries.soliditylang.org:443
36+
classic.yarnpkg.com:443
37+
github.com:443
38+
nightly.yarnpkg.com:443
39+
nodejs.org:443
40+
objects.githubusercontent.com:443
41+
registry.yarnpkg.com:443
42+
registry.npmjs.org:443
43+
54.185.253.63:443
44+
45+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
46+
with:
47+
submodules: recursive
48+
49+
- name: Set up corepack (for yarn)
50+
run: |
51+
corepack enable
52+
corepack prepare [email protected] --activate
53+
yarn set version 4.9.2
54+
55+
- name: Setup Node.js environment
56+
uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
57+
with:
58+
node-version: 20.x
59+
cache: yarn
60+
61+
- name: Cache node modules
62+
uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
63+
env:
64+
cache-name: cache-node-modules
65+
with:
66+
path: |
67+
~/.npm
68+
**/node_modules
69+
key: ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}
70+
restore-keys: |
71+
${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}-
72+
73+
- name: Install contracts dependencies
74+
run: yarn workspace @kleros/kleros-v2-contracts install
75+
76+
- name: Run Hardhat tests
77+
run: yarn test
78+
working-directory: contracts
79+
80+
# *********************************************************************************** #
81+
# ******************************* Foundry Tests ************************************* #
82+
# *********************************************************************************** #
83+
# COMPILATION FAILS 🤬
84+
# foundry-tests:
85+
# runs-on: ubuntu-latest
86+
# steps:
87+
# - name: Harden Runner
88+
# uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
89+
# with:
90+
# disable-sudo: false
91+
# egress-policy: block
92+
# allowed-endpoints: >
93+
# binaries.soliditylang.org:443
94+
# classic.yarnpkg.com:443
95+
# github.com:443
96+
# nightly.yarnpkg.com:443
97+
# nodejs.org:443
98+
# objects.githubusercontent.com:443
99+
# registry.yarnpkg.com:443
100+
# registry.npmjs.org:443
101+
# 54.185.253.63:443
102+
103+
# - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
104+
# with:
105+
# submodules: recursive
106+
107+
# - name: Set up corepack (for yarn)
108+
# run: |
109+
# corepack enable
110+
# corepack prepare [email protected] --activate
111+
# yarn set version 4.9.2
112+
113+
# - name: Setup Node.js environment
114+
# uses: actions/setup-node@1d0ff469b7ec7b3cb9d8673fde0c81c44821de2a # v4.2.0
115+
# with:
116+
# node-version: 20.x
117+
# cache: yarn
118+
119+
# - name: Cache node modules
120+
# uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1
121+
# env:
122+
# cache-name: cache-node-modules
123+
# with:
124+
# path: |
125+
# ~/.npm
126+
# **/node_modules
127+
# key: ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json', '**/yarn.lock') }}
128+
# restore-keys: |
129+
# ${{ runner.os }}-build-${{ secrets.CACHE_VERSION }}-${{ env.cache-name }}-
130+
131+
# # - name: Install contracts dependencies
132+
# # run: yarn workspace @kleros/kleros-v2-contracts install
133+
134+
# - name: Install Foundry
135+
# uses: foundry-rs/foundry-toolchain@82dee4ba654bd2146511f85f0d013af94670c4de # v1.4.0
136+
137+
# - name: Run Foundry tests
138+
# run: forge test --config-path ./foundry.toml
139+
# working-directory: contracts
140+
141+
# - name: Run snapshot
142+
# run: NO_COLOR=1 forge snapshot >> $GITHUB_STEP_SUMMARY
143+
# working-directory: contracts

contracts/CHANGELOG.md

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,55 @@ The format is based on [Common Changelog](https://common-changelog.org/).
88

99
### Changed
1010

11+
- **Breaking:** Rename `KlerosCore.TokenAndETHShift` into `KlerosCore.JurorRewardPenalty` ([#2136](https://github.com/kleros/kleros-v2/issues/2136))
12+
- **Breaking:** Add event parameter `KlerosCore.TokenAndETHShift._degreeOfCoherencyFee` and renamed the other parameters to `_degreeOfCoherencyPnk`, `_amountPnk`, `_amountFee` ([#2097](https://github.com/kleros/kleros-v2/issues/2097))
13+
- **Breaking:** Move state variable `DisputeKitClassicBase.nbVotes` to the `Round` struct ([#2097](https://github.com/kleros/kleros-v2/issues/2097))
1114
- **Breaking:** Stake the juror's PNK rewards instead of transferring them out ([#2099](https://github.com/kleros/kleros-v2/issues/2099))
1215
- **Breaking:** Replace `require()` with `revert()` and custom errors outside KlerosCore for consistency and smaller bytecode ([#2084](https://github.com/kleros/kleros-v2/issues/2084))
1316
- **Breaking:** Rename the interface from `RNG` to `IRNG` ([#2054](https://github.com/kleros/kleros-v2/issues/2054))
14-
- **Breaking:** Remove the `_block` parameter from `IRNG.requestRandomness()` and `IRNG.receiveRandomness()`, not needed for the primary VRF-based RNG ([#2054](https://github.com/kleros/kleros-v2/issues/2054))
1517
- **Breaking:** Rename `governor` to `owner` in order to comply with the lightweight ownership standard [ERC-5313](https://eipsinsight.com/ercs/erc-5313) ([#2112](https://github.com/kleros/kleros-v2/issues/2112))
18+
- **Breaking:** Apply the penalties to the stakes in the Sortition Tree ([#2107](https://github.com/kleros/kleros-v2/issues/2107))
19+
- **Breaking:** Make `SortitionModule.getJurorBalance().stakedInCourt` include the penalties ([#2107](https://github.com/kleros/kleros-v2/issues/2107))
20+
- Make `IDisputeKit.draw()` and `ISortitionModule.draw()` return the court ID from which the juror was drawn ([#2107](https://github.com/kleros/kleros-v2/issues/2107))
21+
- Rename `SortitionModule.setJurorInactive()` to `SortitionModule.forcedUnstakeAllCourts()` ([#2107](https://github.com/kleros/kleros-v2/issues/2107))
1622
- Make the primary VRF-based RNG fall back to `BlockhashRNG` if the VRF request is not fulfilled within a timeout ([#2054](https://github.com/kleros/kleros-v2/issues/2054))
1723
- Authenticate the calls to the RNGs to prevent 3rd parties from depleting the Chainlink VRF subscription funds ([#2054](https://github.com/kleros/kleros-v2/issues/2054))
1824
- Use `block.timestamp` rather than `block.number` for `BlockhashRNG` for better reliability on Arbitrum as block production is sporadic depending on network conditions. ([#2054](https://github.com/kleros/kleros-v2/issues/2054))
25+
- Replace the `bytes32 _key` parameter in `SortitionTrees.createTree()` and `SortitionTrees.draw()` by `uint96 courtID` ([#2113](https://github.com/kleros/kleros-v2/issues/2113))
26+
- Extract the sortition sum trees logic into a library `SortitionTrees` ([#2113](https://github.com/kleros/kleros-v2/issues/2113))
27+
- Make `IDisputeKit.getDegreeOfCoherenceReward()` multi-dimensional so different calculations may be applied to PNK rewards, fee rewards and PNK penalties (future-proofing) ([#2090](https://github.com/kleros/kleros-v2/issues/2090))
28+
- Consolidate the constant `ALPHA_DIVISOR` with `ONE_BASIS_POINTS` ([#2090](https://github.com/kleros/kleros-v2/issues/2090))
1929
- Set the Hardhat Solidity version to v0.8.30 and enable the IR pipeline ([#2069](https://github.com/kleros/kleros-v2/issues/2069))
2030
- Set the Foundry Solidity version to v0.8.30 and enable the IR pipeline ([#2073](https://github.com/kleros/kleros-v2/issues/2073))
2131
- Widen the allowed solc version to any v0.8.x for the interfaces only ([#2083](https://github.com/kleros/kleros-v2/issues/2083))
22-
- Make `IDisputeKit.getDegreeOfCoherenceReward()` multi-dimensional so different calculations may be applied to PNK rewards, fee rewards and PNK penalties (future-proofing) ([#2090](https://github.com/kleros/kleros-v2/issues/2090))
23-
- Consolidate the constant `ALPHA_DIVISOR` with `ONE_BASIS_POINTS` ([#2090](https://github.com/kleros/kleros-v2/issues/2090))
2432
- Bump `hardhat` to v2.26.2 ([#2069](https://github.com/kleros/kleros-v2/issues/2069))
2533
- Bump `@kleros/vea-contracts` to v0.7.0 ([#2073](https://github.com/kleros/kleros-v2/issues/2073))
2634

2735
### Added
2836

37+
- **Breaking:** Add storage gap arrays to `KlerosCore` structs `Round`, `Dispute` and `Court` ([#2097](https://github.com/kleros/kleros-v2/issues/2097))
38+
- **Breaking:** Add storage gap arrays to `DisputeKitClassicBase` state variables and to the structs `Round`, `Dispute` and `Vote` ([#2097](https://github.com/kleros/kleros-v2/issues/2097))
39+
- **Breaking:** Add a new field `drawnJurorFromCourtIDs` to the `Round` struct in `KlerosCoreBase` and `KlerosCoreUniversity` ([#2107](https://github.com/kleros/kleros-v2/issues/2107))
40+
- **Breaking:** Add a new state variable `jumpDisputeKitID` to the `DisputeKitClassicBase` contract ([#2114](https://github.com/kleros/kleros-v2/issues/2114))
41+
- **Breaking:** Add a parameter `_recoveryCommit` to the event `DisputeKitShutter.CommitCastShutter` ([#2100](https://github.com/kleros/kleros-v2/issues/2100))
42+
- **Breaking:** Add a storage variable `recoveryCommitments` to `DisputeKitShutter` ([#2100](https://github.com/kleros/kleros-v2/issues/2100))
43+
- Allow the Shutter commitment to be recovered by the juror using only the salt and the choice, without having to provide the justification ([#2100](https://github.com/kleros/kleros-v2/issues/2100))
2944
- Allow the dispute kits to force an early court jump and to override the number of votes after an appeal (future-proofing) ([#2110](https://github.com/kleros/kleros-v2/issues/2110))
45+
- Allow the dispute kits to specify which new dispute kit to use when a court jump occurs ([#2114](https://github.com/kleros/kleros-v2/issues/2114))
46+
- Allow stake changes to by-pass delayed stakes when initiated by the SortitionModule by setting the `_noDelay` parameter to `true` in `SortitionModule.validateStake()` ([#2107](https://github.com/kleros/kleros-v2/issues/2107))
47+
48+
### Removed
49+
50+
- **Breaking:** Remove unused event parameters `IArbitrableV2.DisputeRequest._templateUri` ([#2097](https://github.com/kleros/kleros-v2/issues/2097))
51+
- **Breaking:** Remove deprecated `SortitionModule` state variables `alreadyTransferred`, `randomNumberRequestBlock`, `rngLookahead` and `latestDelayedStakeIndex` ([#2097](https://github.com/kleros/kleros-v2/issues/2097))
52+
- **Breaking:** Remove struct variable `DisputeKitClassicBase.Round.nbVotes` ([#2097](https://github.com/kleros/kleros-v2/issues/2097))
53+
- **Breaking:** Remove the `_block` parameter from `IRNG.requestRandomness()` and `IRNG.receiveRandomness()`, not needed for the primary VRF-based RNG ([#2054](https://github.com/kleros/kleros-v2/issues/2054))
3054

3155
### Fixed
3256

3357
- Do not pass to Voting period if all the commits are cast because it breaks the current Shutter auto-reveal process. ([#2085](https://github.com/kleros/kleros-v2/issues/2085))
58+
- Do not emit the `KlerosCore.TokenAndETHShift` event if the both the PNK and fee amounts are zero ([#2135](https://github.com/kleros/kleros-v2/issues/2135))
59+
- Do not make PNK or ETH transfers if the amounts are zero ([#2135](https://github.com/kleros/kleros-v2/issues/2135))
3460

3561
## [0.12.0] - 2025-08-05
3662

contracts/README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ Refresh the list of deployed contracts by running `./scripts/generateDeployments
7474
- [WrappedPinakionV2](https://gnosis-chiado.blockscout.com/address/0xD75E27A56AaF9eE7F8d9A472a8C2EF2f65a764dd)
7575
- [xKlerosLiquidV2](https://gnosis-chiado.blockscout.com/address/0x34E520dc1d2Db660113b64724e14CEdCD01Ee879)
7676

77-
### Devnet
77+
### V2 Devnet (unstable)
7878

7979
#### Arbitrum Sepolia
8080

@@ -84,25 +84,26 @@ Refresh the list of deployed contracts by running `./scripts/generateDeployments
8484
- [DAI](https://sepolia.arbiscan.io/address/0x593e89704D285B0c3fbF157c7CF2537456CE64b5)
8585
- [DAIFaucet](https://sepolia.arbiscan.io/address/0xB5b39A1bcD2D7097A8824B3cC18Ebd2dFb0D9B5E)
8686
- [DisputeKitClassic: proxy](https://sepolia.arbiscan.io/address/0xeEEbbbff8f377dCFc7d4F7876C531db0d22720e1), [implementation](https://sepolia.arbiscan.io/address/0xc4cC0274E55a9818f8cF42640B1De61d269425ad)
87-
- [DisputeKitClassicUniversity: proxy](https://sepolia.arbiscan.io/address/0xd6E96b7c993763B5CDDa1139C7387B82A7c8B8B5), [implementation](https://sepolia.arbiscan.io/address/0x87e863b94d2CB79A8aB53bD87Dc4A10E11C0918B)
87+
- [DisputeKitClassicUniversity: proxy](https://sepolia.arbiscan.io/address/0x82F2089442979A6b56c80274D144575980092F91), [implementation](https://sepolia.arbiscan.io/address/0x602ADa1cE706404BFb5417e497cdDae934436081)
8888
- [DisputeKitGated: proxy](https://sepolia.arbiscan.io/address/0x677dA30B4b27D129354DdA1e219Bcc86802132d1), [implementation](https://sepolia.arbiscan.io/address/0xA27EedcEA916BC1ab91720cE70c56666E854F55e)
8989
- [DisputeKitGatedShutter: proxy](https://sepolia.arbiscan.io/address/0xd86b84eb36Cd48f3f384b4490F255b494385F429), [implementation](https://sepolia.arbiscan.io/address/0x56199F9E5C0ef9251A251a41597A971141199EDF)
9090
- [DisputeKitShutter: proxy](https://sepolia.arbiscan.io/address/0xfE0a958bc744Bb9E224E1822625B53134ac5CB69), [implementation](https://sepolia.arbiscan.io/address/0x6582CE0FdB29B5673E6650e34728C784BafB2139)
9191
- [DisputeResolver](https://sepolia.arbiscan.io/address/0x71f8537e925C753Fe88DA7e69Ae423f9f3a9A292)
9292
- [DisputeResolverRuler](https://sepolia.arbiscan.io/address/0xAEB1bbaE58125BA5F32349c69e4274d15dfD6EC3)
93-
- [DisputeResolverUniversity](https://sepolia.arbiscan.io/address/0x2Aa1a94307E772BeE42E9EfbD137b1053F1fCfd4)
93+
- [DisputeResolverUniversity](https://sepolia.arbiscan.io/address/0x8a7902Ef9a5308C7DF0A68A28EEDd6D83436993D)
9494
- [DisputeTemplateRegistry: proxy](https://sepolia.arbiscan.io/address/0xc852F94f90E3B06Da6eCfB61d76561ECfb94613f), [implementation](https://sepolia.arbiscan.io/address/0xBc9B5643C9B1C478DAe1b950e886CC50D8d868b1)
95+
- [DisputeTemplateRegistryUniversity: proxy](https://sepolia.arbiscan.io/address/0x75A5D16e9A699162506E4d79D68CF646e6600ba1), [implementation](https://sepolia.arbiscan.io/address/0xC3f638389635bF33E019c845FdaF2ed9bca3DF67)
9596
- [EvidenceModule: proxy](https://sepolia.arbiscan.io/address/0xA1F72e0445fc395A393247F5B8c958Ec9b7C0B49), [implementation](https://sepolia.arbiscan.io/address/0x450Aa35da0ad8B282C5d910254055651417C2200)
9697
- [KlerosCore: proxy](https://sepolia.arbiscan.io/address/0x1Bd44c4a4511DbFa7DC1d5BC201635596E7200f9), [implementation](https://sepolia.arbiscan.io/address/0xaBf1AA1D08F98ED800938B1B086d0904c5BF4f0E)
9798
- [KlerosCoreRuler: proxy](https://sepolia.arbiscan.io/address/0x0630e4248a17b506809009F5D88E2f5bEE584c83), [implementation](https://sepolia.arbiscan.io/address/0xb8bF3A32730cEc3B0a8516b87246ceE24ca2eaCF)
9899
- [KlerosCoreSnapshotProxy](https://sepolia.arbiscan.io/address/0xF924ac62b20901914c101Fa089Da1FB6A0585138)
99-
- [KlerosCoreUniversity: proxy](https://sepolia.arbiscan.io/address/0x5AB37F38778Bc175852fA353056591D91c744ce6), [implementation](https://sepolia.arbiscan.io/address/0xF74DaBfC5F5dbdBD07636637204d9C35326D2906)
100+
- [KlerosCoreUniversity: proxy](https://sepolia.arbiscan.io/address/0xA34dBBD0E5e1d09bd683455f9dbC393797BC558f), [implementation](https://sepolia.arbiscan.io/address/0xb75b0cc01af4aD0D65D50082ae0717004D479Aa0)
100101
- [KlerosV2NeoEarlyUser](https://sepolia.arbiscan.io/address/0x0d60Ff8bbCF49Bc5352328E7E28e141834d7750F)
101102
- [PinakionV2](https://sepolia.arbiscan.io/address/0x34B944D42cAcfC8266955D07A80181D2054aa225)
102103
- [PNKFaucet](https://sepolia.arbiscan.io/address/0x7EFE468003Ad6A858b5350CDE0A67bBED58739dD)
103104
- [PolicyRegistry: proxy](https://sepolia.arbiscan.io/address/0xd8681dBF525ecBda2F799BFddB96840065075e8A), [implementation](https://sepolia.arbiscan.io/address/0x472846F88D1356bb483a88f97B55026654Fc5deD)
104105
- [SortitionModule: proxy](https://sepolia.arbiscan.io/address/0x6F24A90fBBeabB2B4343Bb9c1eD8ee6AcAa50663), [implementation](https://sepolia.arbiscan.io/address/0x8a26445989c944C58503275ad87Ab4d7b17d4F1e)
105-
- [SortitionModuleUniversity: proxy](https://sepolia.arbiscan.io/address/0x4B2c2d048921f694cCE3AEa35698c6B1f5fcbb79), [implementation](https://sepolia.arbiscan.io/address/0x5CAD621D69E0535422aCFaCC0017bC32beC7A486)
106+
- [SortitionModuleUniversity: proxy](https://sepolia.arbiscan.io/address/0x9f55804177e7E44E558616cD7d06B865788214cA), [implementation](https://sepolia.arbiscan.io/address/0x270e3D63d3d275604df0a1Bd312E1255DCd96936)
106107
- [TransactionBatcher](https://sepolia.arbiscan.io/address/0x35f93986950804ac1F93519BF68C2a7Dd776db0E)
107108
- [WETH](https://sepolia.arbiscan.io/address/0x3829A2486d53ee984a0ca2D76552715726b77138)
108109
- [WETHFaucet](https://sepolia.arbiscan.io/address/0x6F8C10E0030aDf5B8030a5E282F026ADdB6525fd)

contracts/audit/METRICS.html

Lines changed: 413 additions & 419 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)