chore: add `downtimeProduct` configuration parameter (#138)
* add `downtimeProduct` configuration parameter * formatting
This commit is contained in:
parent
1d36256230
commit
ed428767b3
|
@ -24,4 +24,8 @@ struct ProofConfig {
|
||||||
uint256 timeout; // mark proofs as missing before the timeout (in seconds)
|
uint256 timeout; // mark proofs as missing before the timeout (in seconds)
|
||||||
uint8 downtime; // ignore this much recent blocks for proof requirements
|
uint8 downtime; // ignore this much recent blocks for proof requirements
|
||||||
string zkeyHash; // hash of the zkey file which is linked to the verifier
|
string zkeyHash; // hash of the zkey file which is linked to the verifier
|
||||||
|
// Ensures the pointer does not remain in downtime for many consecutive
|
||||||
|
// periods. For each period increase, move the pointer `pointerProduct`
|
||||||
|
// blocks. Should be a prime number to ensure there are no cycles.
|
||||||
|
uint8 downtimeProduct;
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ contract FuzzMarketplace is Marketplace {
|
||||||
Marketplace(
|
Marketplace(
|
||||||
MarketplaceConfig(
|
MarketplaceConfig(
|
||||||
CollateralConfig(10, 5, 3, 10),
|
CollateralConfig(10, 5, 3, 10),
|
||||||
ProofConfig(10, 5, 64, "")
|
ProofConfig(10, 5, 64, "", 67)
|
||||||
),
|
),
|
||||||
new TestToken(),
|
new TestToken(),
|
||||||
new TestVerifier()
|
new TestVerifier()
|
||||||
|
|
|
@ -69,10 +69,8 @@ abstract contract Proofs is Periods {
|
||||||
*/
|
*/
|
||||||
function _getPointer(SlotId id, Period period) internal view returns (uint8) {
|
function _getPointer(SlotId id, Period period) internal view returns (uint8) {
|
||||||
uint256 blockNumber = block.number % 256;
|
uint256 blockNumber = block.number % 256;
|
||||||
// To ensure the pointer does not remain in downtime for many consecutive
|
uint256 periodNumber = (Period.unwrap(period) * _config.downtimeProduct) %
|
||||||
// periods, for each period increase, move the pointer 67 blocks. We've
|
256;
|
||||||
// chosen a prime number to ensure that we don't get cycles.
|
|
||||||
uint256 periodNumber = (Period.unwrap(period) * 67) % 256;
|
|
||||||
uint256 idOffset = uint256(SlotId.unwrap(id)) % 256;
|
uint256 idOffset = uint256(SlotId.unwrap(id)) % 256;
|
||||||
uint256 pointer = (blockNumber + periodNumber + idOffset) % 256;
|
uint256 pointer = (blockNumber + periodNumber + idOffset) % 256;
|
||||||
return uint8(pointer);
|
return uint8(pointer);
|
||||||
|
|
|
@ -14,6 +14,7 @@ const CONFIGURATION = {
|
||||||
// `downtime` needs to be larger than `period` when running hardhat
|
// `downtime` needs to be larger than `period` when running hardhat
|
||||||
// in automine mode, because it can produce a block every second
|
// in automine mode, because it can produce a block every second
|
||||||
downtime: 64,
|
downtime: 64,
|
||||||
|
downtimeProduct: 67
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@ describe("Proofs", function () {
|
||||||
const timeout = 5
|
const timeout = 5
|
||||||
const downtime = 64
|
const downtime = 64
|
||||||
const probability = 4 // require a proof roughly once every 4 periods
|
const probability = 4 // require a proof roughly once every 4 periods
|
||||||
|
const downtimeProduct = 67
|
||||||
const { periodOf, periodEnd } = periodic(period)
|
const { periodOf, periodEnd } = periodic(period)
|
||||||
|
|
||||||
let proofs
|
let proofs
|
||||||
|
@ -33,7 +34,7 @@ describe("Proofs", function () {
|
||||||
await deployments.fixture(["Verifier"])
|
await deployments.fixture(["Verifier"])
|
||||||
const verifier = await deployments.get("Groth16Verifier")
|
const verifier = await deployments.get("Groth16Verifier")
|
||||||
proofs = await Proofs.deploy(
|
proofs = await Proofs.deploy(
|
||||||
{ period, timeout, downtime, zkeyHash: "" },
|
{ period, timeout, downtime, zkeyHash: "", downtimeProduct },
|
||||||
verifier.address
|
verifier.address
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
|
@ -14,6 +14,7 @@ const exampleConfiguration = () => ({
|
||||||
timeout: 5,
|
timeout: 5,
|
||||||
downtime: 64,
|
downtime: 64,
|
||||||
zkeyHash: "",
|
zkeyHash: "",
|
||||||
|
downtimeProduct: 67,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue