From b1dcb591729a382fc10617a409fae6557ac2f4fa Mon Sep 17 00:00:00 2001 From: D <51912515+adaki2004@users.noreply.github.com> Date: Thu, 25 May 2023 06:55:36 +0200 Subject: [PATCH] feat(protocol): Scale up damping factor and flatten curve (#13809) Co-authored-by: adaki2004 Co-authored-by: David --- packages/protocol/contracts/L1/TaikoConfig.sol | 2 +- packages/protocol/contracts/L1/TaikoData.sol | 2 +- packages/protocol/script/DeployOnL1.s.sol | 2 +- .../script/DetermineNewProofTimeIssued.s.sol | 4 ++-- packages/protocol/test/LibLn.sol | 2 +- packages/protocol/test/TaikoL1.sim.sol | 18 +++++++++--------- packages/protocol/test/TaikoL1TestBase.t.sol | 2 +- .../contract-documentation/L1/TaikoData.md | 2 +- 8 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/protocol/contracts/L1/TaikoConfig.sol b/packages/protocol/contracts/L1/TaikoConfig.sol index 86778a24df..90efaf0962 100644 --- a/packages/protocol/contracts/L1/TaikoConfig.sol +++ b/packages/protocol/contracts/L1/TaikoConfig.sol @@ -41,7 +41,7 @@ library TaikoConfig { ethDepositGas: 21000, ethDepositMaxFee: 1 ether / 10, txListCacheExpiry: 0, - adjustmentQuotient: 16, + adjustmentQuotient: 32000, relaySignalRoot: false }); } diff --git a/packages/protocol/contracts/L1/TaikoData.sol b/packages/protocol/contracts/L1/TaikoData.sol index 44928070fe..93955b3873 100644 --- a/packages/protocol/contracts/L1/TaikoData.sol +++ b/packages/protocol/contracts/L1/TaikoData.sol @@ -27,7 +27,7 @@ library TaikoData { uint64 maxEthDepositsPerBlock; uint96 maxEthDepositAmount; uint96 minEthDepositAmount; - uint8 adjustmentQuotient; + uint16 adjustmentQuotient; bool relaySignalRoot; } diff --git a/packages/protocol/script/DeployOnL1.s.sol b/packages/protocol/script/DeployOnL1.s.sol index 1453df45ad..e1f4d24083 100644 --- a/packages/protocol/script/DeployOnL1.s.sol +++ b/packages/protocol/script/DeployOnL1.s.sol @@ -122,7 +122,7 @@ contract DeployOnL1 is Script { uint64 initProofTimeIssued = LibLn.calcInitProofTimeIssued( feeBase, uint16(INITIAL_PROOF_TIME_TARGET), - uint8(taikoL1.getConfig().adjustmentQuotient) + uint16(taikoL1.getConfig().adjustmentQuotient) ); address taikoL1Proxy = deployProxy( diff --git a/packages/protocol/script/DetermineNewProofTimeIssued.s.sol b/packages/protocol/script/DetermineNewProofTimeIssued.s.sol index b498096b9e..2c5f35d17c 100644 --- a/packages/protocol/script/DetermineNewProofTimeIssued.s.sol +++ b/packages/protocol/script/DetermineNewProofTimeIssued.s.sol @@ -5,8 +5,8 @@ import "forge-std/Script.sol"; import "forge-std/console2.sol"; import {LibLn} from "../test/LibLn.sol"; -uint16 constant DESIRED_PROOF_TIME_TARGET = 500; -uint8 constant ADJUSTMENT_QUOTIENT = 16; +uint16 constant DESIRED_PROOF_TIME_TARGET = 160; +uint16 constant ADJUSTMENT_QUOTIENT = 32000; contract DetermineProofTimeIssued is Script { function run() public view { diff --git a/packages/protocol/test/LibLn.sol b/packages/protocol/test/LibLn.sol index 2bb67091c3..cc1ad45fdd 100644 --- a/packages/protocol/test/LibLn.sol +++ b/packages/protocol/test/LibLn.sol @@ -202,7 +202,7 @@ library LibLn { function calcInitProofTimeIssued( uint64 basefee, uint16 proofTimeTarget, - uint8 adjustmentQuotient + uint16 adjustmentQuotient ) public pure returns (uint64 initProofTimeIssued) { uint256 scale = uint256(proofTimeTarget) * adjustmentQuotient; // ln_pub() expects 1e18 fixed format diff --git a/packages/protocol/test/TaikoL1.sim.sol b/packages/protocol/test/TaikoL1.sim.sol index 086458aa13..9576037b44 100644 --- a/packages/protocol/test/TaikoL1.sim.sol +++ b/packages/protocol/test/TaikoL1.sim.sol @@ -12,7 +12,7 @@ import {LibLn} from "./LibLn.sol"; /// @dev Tweak this if you iwhs to set - the config and the calculation of the proofTimeIssued /// @dev also originates from this -uint16 constant INITIAL_PROOF_TIME_TARGET = 375; //sec. Approx mainnet scenario +uint16 constant INITIAL_PROOF_TIME_TARGET = 70; //sec. Approx mainnet scenario /// @dev Warning: this test will take 7-10 minutes and require 1GB memory. /// `pnpm sim` @@ -24,7 +24,7 @@ contract TaikoL1_b is TaikoL1 { config.maxNumProposedBlocks = 1100; config.ringBufferSize = 1200; config.maxVerificationsPerTx = 10; - config.proofCooldownPeriod = 1 minutes; + config.proofCooldownPeriod = 5 minutes; config.realProofSkipSize = 0; } } @@ -50,12 +50,12 @@ contract TaikoL1Simulation is TaikoL1TestBase { // This means block proposals will be averaged out (long term if random function is random enough) to 18s // It is fine it simulates that we do not necessarily put Taiko block at every 12s, but on average around every x1.5 of ETH block // Meaninig we have less blocks / sec. (We should test what happens if quicker!) - uint256 nextBlockTime = 12 seconds; - uint256 minDiffToBlockPropTime = 12 seconds; + uint256 nextBlockTime = 8 seconds; + uint256 minDiffToBlockPropTime = 8 seconds; // This means block provings will be averaged out (long term if random function is random enough) to 200s - uint256 startBlockProposeTime = 1600 seconds; - uint256 upperDevToBlockProveTime = 800 seconds; + uint256 startBlockProposeTime = 100 seconds; + uint256 upperDevToBlockProveTime = 40 seconds; uint256 secondsToSimulate = blocksToSimulate * 18; //Because of the expected average blocktimestamp - we can tweak it obv. ////////////////////////////////////////// // TUNABLE PARAMS END // @@ -96,12 +96,12 @@ contract TaikoL1Simulation is TaikoL1TestBase { } // A real world scenario - function xtestGeneratingManyRandomBlocksNonConsecutive() external { + function testGeneratingManyRandomBlocksNonConsecutive() external { uint256 time = block.timestamp; assertEq(time, 1); - depositTaikoToken(Alice, 1e6 * 1e8, 10000 ether); + depositTaikoToken(Alice, 1e9 * 1e8, 10000 ether); TaikoData.BlockMetadata[] memory metas = new TaikoData.BlockMetadata[]( blocksToSimulate @@ -434,7 +434,7 @@ contract TaikoL1Simulation is TaikoL1TestBase { } // 90% slow proofs (around 30 mins or so) and 10% (around 1-5 mins ) - function test_90percent_quick_10percent_slow() external { + function xtest_90percent_quick_10percent_slow() external { uint256 time = block.timestamp; uint256 startBlockProposeTime_quick = 60 seconds; // For the 10% where it is 'quick' uint256 upperDevToBlockProveTime_quick = 240 seconds; // For the 10% where it is quick diff --git a/packages/protocol/test/TaikoL1TestBase.t.sol b/packages/protocol/test/TaikoL1TestBase.t.sol index 73dfe75b2c..e228918880 100644 --- a/packages/protocol/test/TaikoL1TestBase.t.sol +++ b/packages/protocol/test/TaikoL1TestBase.t.sol @@ -50,7 +50,7 @@ abstract contract TaikoL1TestBase is Test { // Calculation shall be done in derived contracts - based on testnet or mainnet expected proof time uint64 public initProofTimeIssued; uint16 proofTimeTarget; - uint8 public constant ADJUSTMENT_QUOTIENT = 16; + uint16 public constant ADJUSTMENT_QUOTIENT = 32000; function deployTaikoL1() internal virtual returns (TaikoL1 taikoL1); diff --git a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoData.md b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoData.md index 6f0c1cd120..cc9f5141bb 100644 --- a/packages/website/pages/docs/reference/contract-documentation/L1/TaikoData.md +++ b/packages/website/pages/docs/reference/contract-documentation/L1/TaikoData.md @@ -25,7 +25,7 @@ struct Config { uint64 maxEthDepositsPerBlock; uint96 maxEthDepositAmount; uint96 minEthDepositAmount; - uint8 adjustmentQuotient; + uint16 adjustmentQuotient; bool relaySignalRoot; } ```