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(taiko-client): changes based on the protocol forced inclusion feature #18909

Merged
merged 82 commits into from
Feb 19, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
91869d0
Update TaikoInbox.sol
dantaik Feb 6, 2025
b8e7eb1
Update ForkRouter.sol
dantaik Feb 6, 2025
1ebc3cb
feat(protocol): support delayed forced inclusion of txs (#18826)
dantaik Feb 6, 2025
aa1b637
fix
dantaik Feb 7, 2025
f15921e
Update TaikoWrapper.sol
dantaik Feb 7, 2025
2f88a5c
Update TaikoWrapper.sol
dantaik Feb 7, 2025
85ece24
Update TaikoWrapper.sol
dantaik Feb 7, 2025
4bf26db
Update ForcedInclusionStore.sol
dantaik Feb 7, 2025
5b90706
ITaikoProposerEntryPoint
dantaik Feb 7, 2025
8c1adfe
Merge branch 'main' into chore_protocol
dantaik Feb 7, 2025
2f3d5a6
rename
dantaik Feb 7, 2025
c7e4c35
Update PreconfRouter.sol
dantaik Feb 7, 2025
2f4a20e
Update TaikoWrapper.sol
dantaik Feb 7, 2025
a8d8ca2
Update TaikoWrapper.sol
dantaik Feb 7, 2025
0e71e12
Update TaikoInbox.sol
dantaik Feb 7, 2025
15a2de4
Merge branch 'main' into chore_protocol
dantaik Feb 10, 2025
60a0d2e
minor
dantaik Feb 10, 2025
e20ba24
minor
dantaik Feb 10, 2025
227ec08
Update IForcedInclusionStore.sol
dantaik Feb 10, 2025
1b3fc4e
fix
dantaik Feb 10, 2025
1998f9f
more
dantaik Feb 10, 2025
c82b3b6
fix
dantaik Feb 10, 2025
cb19f92
Update gen-layouts.sh
dantaik Feb 10, 2025
e0b5bd2
forge fmt & update contract layout tables
dantaik Feb 10, 2025
c4f042e
Merge branch 'main' into chore_protocol
dantaik Feb 10, 2025
cca8b8c
Merge branch 'main' into chore_protocol
dantaik Feb 10, 2025
0ea76f2
fix(protocol): fee recipient in taiko wrapper (#18907)
AnshuJalan Feb 10, 2025
9e8b988
Update TaikoWrapper.sol
dantaik Feb 10, 2025
4389bc9
rename
dantaik Feb 10, 2025
d59720d
Merge branch 'main' into chore_protocol
davidtaikocha Feb 10, 2025
aaa5a5c
feat(taiko-client): changes based on the protocol force inclusion fea…
davidtaikocha Feb 10, 2025
7c85902
Merge branch 'main' into chore_protocol_client
davidtaikocha Feb 11, 2025
a61b9db
chore: update deployment scripts
davidtaikocha Feb 11, 2025
7315699
feat: update bindings
davidtaikocha Feb 11, 2025
7490346
feat: update proposer
davidtaikocha Feb 11, 2025
1bdfeb1
Merge branch 'main' into chore_protocol_client
davidtaikocha Feb 11, 2025
d6a3dcf
feat: update tests
davidtaikocha Feb 11, 2025
8cc2cec
Merge branch 'main' into chore_protocol_client
davidtaikocha Feb 13, 2025
42e3e1b
Merge branch 'main' into chore_protocol_client
davidtaikocha Feb 13, 2025
afc292c
feat: update upgrade script
davidtaikocha Feb 14, 2025
fe51ab2
feat: update deployment script
davidtaikocha Feb 14, 2025
e891dc2
feat: update logs
davidtaikocha Feb 14, 2025
a90c1b4
Merge branch 'main' into chore_protocol_client
davidtaikocha Feb 14, 2025
aac3a16
test: improve tests
davidtaikocha Feb 14, 2025
6914ee3
feat: update deployment script
davidtaikocha Feb 14, 2025
2de6a42
Merge branch 'main' into chore_protocol_client
davidtaikocha Feb 14, 2025
7a04d8b
feat: update tx builder
davidtaikocha Feb 14, 2025
201be2f
feat: update scripts
davidtaikocha Feb 14, 2025
873fa3b
feat: update scripts
davidtaikocha Feb 14, 2025
7b76d64
test: update some tests
davidtaikocha Feb 14, 2025
53b8a85
feat: update tests
davidtaikocha Feb 15, 2025
14fc730
feat: update builder
davidtaikocha Feb 15, 2025
b29de4a
Merge branch 'main' into chore_protocol_client
davidtaikocha Feb 15, 2025
494b9c5
feat: update tests
davidtaikocha Feb 15, 2025
7cbb9c7
chore: update logs
davidtaikocha Feb 15, 2025
4510ff9
feat: update bindings
davidtaikocha Feb 15, 2025
bb57e1d
build
cyberhorsey Feb 17, 2025
3eede43
Merge branch 'chore_protocol_client' of github.com:taikoxyz/taiko-mon…
cyberhorsey Feb 17, 2025
4c3126b
merge main + bugfix for TaikoToken address instead of TaikoWrapper
cyberhorsey Feb 17, 2025
f03a8ce
stack too deep
cyberhorsey Feb 17, 2025
a6d4566
resolver
cyberhorsey Feb 17, 2025
bf5be07
add missing forced inclusion store address
cyberhorsey Feb 17, 2025
e9601e1
param
cyberhorsey Feb 17, 2025
b0ce6bf
Merge branch 'main' into chore_protocol_client
mask-pp Feb 18, 2025
50f7a35
Merge branch 'main' into chore_protocol_client
davidtaikocha Feb 18, 2025
7d838a2
Merge branch 'main' into chore_protocol_client
YoGhurt111 Feb 18, 2025
cadad73
Merge branch 'main' into chore_protocol_client
cyberhorsey Feb 18, 2025
5df4949
feat(protocol): update devnet configuration for preconfirmation (#18948)
cyberhorsey Feb 18, 2025
46ecf4a
upgrade script
cyberhorsey Feb 19, 2025
74d8b37
forge fmt & update contract layout tables
cyberhorsey Feb 19, 2025
6e96f4f
merge main, update bindings
cyberhorsey Feb 19, 2025
6571ee2
Merge branch 'chore_protocol_client' of github.com:taikoxyz/taiko-mon…
cyberhorsey Feb 19, 2025
332681c
remove repeat struct
mask-pp Feb 19, 2025
d28b79c
Merge branch 'main' into chore_protocol_client
mask-pp Feb 19, 2025
bb1ec13
Merge branch 'main' into chore_protocol_client
mask-pp Feb 19, 2025
a359914
fix lint
mask-pp Feb 19, 2025
2613a45
add TEST_ACCOUNT_PRIVATE_KEY in shell script
mask-pp Feb 19, 2025
1c4e3af
Merge branch 'main' into chore_protocol_client
davidtaikocha Feb 19, 2025
16dedce
feat: update bindings
davidtaikocha Feb 19, 2025
05dc5d2
Merge branch 'main' into chore_protocol_client
davidtaikocha Feb 19, 2025
6e07a99
Merge branch 'main' into chore_protocol_client
davidtaikocha Feb 19, 2025
2d9ebdc
fix: fix deplpoyment scripts
davidtaikocha Feb 19, 2025
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
2 changes: 1 addition & 1 deletion packages/protocol/contracts/layer1/devnet/DevnetInbox.sol
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ contract DevnetInbox is TaikoInbox {
/// @inheritdoc ITaikoInbox
function pacayaConfig() public pure override returns (ITaikoInbox.Config memory) {
return ITaikoInbox.Config({
chainId: 167_001,
chainId: 167,
maxUnverifiedBatches: 324_000,
batchRingBufferSize: 360_000,
maxBatchesToVerify: 16,
Expand Down
45 changes: 45 additions & 0 deletions packages/protocol/contracts/layer1/preconf/PreconfInbox.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

import "../based/TaikoInbox.sol";

/// @title PreconfInbox
/// @dev Labeled in address resolver as "taiko"
/// @custom:security-contact security@taiko.xyz
contract PreconfInbox is TaikoInbox {
constructor(
address _wrapper,
address _verifier,
address _bondToken,
address _signalService
)
TaikoInbox(_wrapper, _verifier, _bondToken, _signalService)
{ }

/// @inheritdoc ITaikoInbox
function pacayaConfig() public pure override returns (ITaikoInbox.Config memory) {
return ITaikoInbox.Config({
chainId: 167_010,
maxUnverifiedBatches: 324_000,
batchRingBufferSize: 360_000,
maxBatchesToVerify: 16,
blockMaxGasLimit: 240_000_000,
livenessBondBase: 125e18, // 125 Taiko token per batch
livenessBondPerBlock: 5e18, // 5 Taiko token per block
stateRootSyncInternal: 16,
maxAnchorHeightOffset: 64,
baseFeeConfig: LibSharedData.BaseFeeConfig({
adjustmentQuotient: 8,
sharingPctg: 75,
gasIssuancePerSecond: 5_000_000,
minGasExcess: 1_340_000_000,
maxGasIssuancePerBlock: 600_000_000
}),
provingWindow: 2 hours,
cooldownWindow: 0 hours,
maxSignalsToReceive: 16,
maxBlocksPerBatch: 768,
forkHeights: ITaikoInbox.ForkHeights({ ontake: 0, pacaya: 0, shasta: 0, unzen: 0 })
});
}
}
2 changes: 2 additions & 0 deletions packages/protocol/contracts/layer1/provers/ProverSetBase.sol
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ abstract contract ProverSetBase is EssentialContract, IERC1271 {
bondToken = _bondToken;
}

receive() external payable { }

/// @notice Initializes the contract.
function init(address _owner, address _admin) external nonZeroAddr(_admin) initializer {
__Essential_init(_owner);
Expand Down
8 changes: 6 additions & 2 deletions packages/protocol/contracts/shared/libs/LibNetwork.sol
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ library LibNetwork {
uint256 internal constant ETHEREUM_KOVAN = 42;
uint256 internal constant ETHEREUM_HOLESKY = 17_000;
uint256 internal constant ETHEREUM_SEPOLIA = 11_155_111;
uint256 internal constant ETHEREUM_HELDER = 7_014_190_335;

uint64 internal constant TAIKO_MAINNET = 167_000;
uint64 internal constant TAIKO_HEKLA = 167_009;
uint64 internal constant TAIKO_PRECONFS = 167_010;

uint256 internal constant ETHEREUM_BLOCK_TIME = 12 seconds;

Expand All @@ -22,7 +24,8 @@ library LibNetwork {
function isEthereumTestnet(uint256 _chainId) internal pure returns (bool) {
return _chainId == LibNetwork.ETHEREUM_ROPSTEN || _chainId == LibNetwork.ETHEREUM_RINKEBY
|| _chainId == LibNetwork.ETHEREUM_GOERLI || _chainId == LibNetwork.ETHEREUM_KOVAN
|| _chainId == LibNetwork.ETHEREUM_HOLESKY || _chainId == LibNetwork.ETHEREUM_SEPOLIA;
|| _chainId == LibNetwork.ETHEREUM_HOLESKY || _chainId == LibNetwork.ETHEREUM_SEPOLIA
|| _chainId == LibNetwork.ETHEREUM_HELDER;
}

/// @dev Checks if the chain ID represents an Ethereum testnet or the Etheruem mainnet.
Expand Down Expand Up @@ -54,6 +57,7 @@ library LibNetwork {
/// @return true if the chain supports Dencun hardfork, false otherwise.
function isDencunSupported(uint256 _chainId) internal pure returns (bool) {
return _chainId == LibNetwork.ETHEREUM_MAINNET || _chainId == LibNetwork.ETHEREUM_HOLESKY
|| _chainId == LibNetwork.ETHEREUM_SEPOLIA || isTaikoDevnet(_chainId);
|| _chainId == LibNetwork.ETHEREUM_SEPOLIA || _chainId == LibNetwork.ETHEREUM_HELDER
|| isTaikoDevnet(_chainId);
}
}
123 changes: 102 additions & 21 deletions packages/protocol/script/layer1/based/DeployProtocolOnL1.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import "src/layer1/mainnet/multirollup/MainnetERC721Vault.sol";
import "src/layer1/mainnet/multirollup/MainnetSignalService.sol";
import "src/layer1/preconf/impl/PreconfWhitelist.sol";
import "src/layer1/preconf/impl/PreconfRouter.sol";
import "src/layer1/preconf/PreconfInbox.sol";
import "src/layer1/provers/ProverSet.sol";
import "src/layer1/token/TaikoToken.sol";
import "src/layer1/verifiers/Risc0Verifier.sol";
Expand Down Expand Up @@ -65,7 +66,8 @@ contract DeployProtocolOnL1 is DeployCapability {
console2.log("sharedResolver: ", sharedResolver);
// ---------------------------------------------------------------
// Deploy rollup contracts
address rollupResolver = deployRollupContracts(sharedResolver, contractOwner);
(address rollupResolver, address proofVerifier) =
deployRollupContracts(sharedResolver, contractOwner);

// ---------------------------------------------------------------
// Signal service need to authorize the new rollup
Expand Down Expand Up @@ -114,7 +116,9 @@ contract DeployProtocolOnL1 is DeployCapability {
}

if (vm.envBool("DEPLOY_PRECONF_CONTRACTS")) {
deployPreconfContracts(contractOwner, sharedResolver, address(taikoInbox));
deployPreconfContracts(
contractOwner, rollupResolver, sharedResolver, address(taikoInbox), proofVerifier
);
}

if (DefaultResolver(sharedResolver).owner() == msg.sender) {
Expand All @@ -124,6 +128,8 @@ contract DeployProtocolOnL1 is DeployCapability {

DefaultResolver(rollupResolver).transferOwnership(contractOwner);
console2.log("** rollupResolver ownership transferred to:", contractOwner);

Ownable2StepUpgradeable(taikoInboxAddr).transferOwnership(contractOwner);
}

function deploySharedContracts(address owner) internal returns (address sharedResolver) {
Expand Down Expand Up @@ -236,7 +242,7 @@ contract DeployProtocolOnL1 is DeployCapability {
address owner
)
internal
returns (address rollupResolver)
returns (address rollupResolver, address proofVerifier)
{
addressNotNull(_sharedResolver, "sharedResolver");
addressNotNull(owner, "owner");
Expand All @@ -255,7 +261,7 @@ contract DeployProtocolOnL1 is DeployCapability {
copyRegister(rollupResolver, _sharedResolver, "bridge");

// Proof verifier
address proofVerifier = deployProxy({
proofVerifier = deployProxy({
name: "proof_verifier",
impl: address(
new DevnetVerifier(address(0), address(0), address(0), address(0), address(0))
Expand Down Expand Up @@ -299,14 +305,31 @@ contract DeployProtocolOnL1 is DeployCapability {
)
);
}
address newFork = address(
new DevnetInbox(
address(0),
proofVerifier,
IResolver(_sharedResolver).resolve(uint64(block.chainid), "bond_token", false),
IResolver(_sharedResolver).resolve(uint64(block.chainid), "signal_service", false)
)
);
address newFork;

if (vm.envBool("PRECONF_INBOX")) {
newFork = address(
new PreconfInbox(
address(0),
proofVerifier,
IResolver(_sharedResolver).resolve(uint64(block.chainid), "bond_token", false),
IResolver(_sharedResolver).resolve(
uint64(block.chainid), "signal_service", false
)
)
);
} else {
newFork = address(
new DevnetInbox(
address(0),
proofVerifier,
IResolver(_sharedResolver).resolve(uint64(block.chainid), "bond_token", false),
IResolver(_sharedResolver).resolve(
uint64(block.chainid), "signal_service", false
)
)
);
}
console2.log(" oldFork :", oldFork);
console2.log(" newFork :", newFork);

Expand All @@ -318,7 +341,7 @@ contract DeployProtocolOnL1 is DeployCapability {
});

TaikoInbox taikoInbox = TaikoInbox(payable(taikoInboxAddr));
taikoInbox.init(owner, vm.envBytes32("L2_GENESIS_HASH"));
taikoInbox.init(msg.sender, vm.envBytes32("L2_GENESIS_HASH"));
uint64 l2ChainId = taikoInbox.pacayaConfig().chainId;
require(l2ChainId != block.chainid, "same chainid");

Expand Down Expand Up @@ -430,17 +453,19 @@ contract DeployProtocolOnL1 is DeployCapability {

function deployPreconfContracts(
address owner,
address resolver,
address taikoInbox
address rollupResolver,
address sharedResolver,
address taikoInbox,
address verifier
)
private
returns (address whitelist, address router, address store, address taikoWrapper)
{
whitelist = deployProxy({
name: "preconf_whitelist",
impl: address(new PreconfWhitelist(resolver)),
impl: address(new PreconfWhitelist(rollupResolver)),
data: abi.encodeCall(PreconfWhitelist.init, (owner)),
registerTo: resolver
registerTo: rollupResolver
});

// Initializable a forced inclusion store with a fake address for TaikoWrapper at first,
Expand All @@ -456,16 +481,72 @@ contract DeployProtocolOnL1 is DeployCapability {
)
),
data: abi.encodeCall(ForcedInclusionStore.init, (address(0))),
registerTo: resolver
registerTo: rollupResolver
});

taikoWrapper = deployProxy({
name: "taiko_wrapper",
impl: address(new TaikoWrapper(taikoInbox, store, router)),
data: abi.encodeCall(TaikoWrapper.init, (owner)),
registerTo: resolver
data: abi.encodeCall(TaikoWrapper.init, (msg.sender)),
registerTo: rollupResolver
});

address oldFork = vm.envAddress("OLD_FORK_TAIKO_INBOX");
if (oldFork == address(0)) {
oldFork = address(
new DevnetInbox(
address(0),
verifier,
IResolver(sharedResolver).resolve(uint64(block.chainid), "bond_token", false),
IResolver(sharedResolver).resolve(
uint64(block.chainid), "signal_service", false
)
)
);
}

address newFork;

if (vm.envBool("PRECONF_INBOX")) {
newFork = address(
new PreconfInbox(
taikoWrapper,
verifier,
IResolver(sharedResolver).resolve(uint64(block.chainid), "bond_token", false),
IResolver(sharedResolver).resolve(
uint64(block.chainid), "signal_service", false
)
)
);
} else {
newFork = address(
new DevnetInbox(
taikoWrapper,
verifier,
IResolver(sharedResolver).resolve(uint64(block.chainid), "bond_token", false),
IResolver(sharedResolver).resolve(
uint64(block.chainid), "signal_service", false
)
)
);
}

UUPSUpgradeable(taikoInbox).upgradeTo({
newImplementation: address(
new PacayaForkRouter(
oldFork, // dont need old fork, we are using pacaya fork height 0 here
newFork
)
)
});

UUPSUpgradeable(taikoWrapper).upgradeTo({
newImplementation: address(new TaikoWrapper(taikoInbox, store, router))
});

Ownable2StepUpgradeable(taikoWrapper).transferOwnership(owner);
console2.log("** taiko_wrapper ownership transferred to:", owner);

UUPSUpgradeable(store).upgradeTo(
address(
new ForcedInclusionStore(
Expand All @@ -484,7 +565,7 @@ contract DeployProtocolOnL1 is DeployCapability {
name: "preconf_router",
impl: address(new PreconfRouter(taikoWrapper, whitelist)),
data: abi.encodeCall(PreconfRouter.init, (owner)),
registerTo: resolver
registerTo: rollupResolver
});

return (whitelist, router, store, taikoWrapper);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ L2_GENESIS_HASH=0xee1950562d42f0da28bd4550d88886bc90894c77c9c9eaefef775d4c8223f2
PAUSE_BRIDGE=true \
FOUNDRY_PROFILE="layer1" \
DEPLOY_PRECONF_CONTRACTS=true \
PRECONF_INBOX=false \
INCLUSION_WINDOW=24 \
INCLUSION_FEE_IN_GWEI=100 \
forge script ./script/layer1/based/DeployProtocolOnL1.s.sol:DeployProtocolOnL1 \
Expand Down
Loading
Loading