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(protocol): Use taikoL2's address as the treasury address in circuits #15350

Merged
merged 6 commits into from
Dec 8, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
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/L1/TaikoL1.sol
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ contract TaikoL1 is
/// @return Config struct containing configuration parameters.
function getConfig() public view virtual returns (TaikoData.Config memory) {
// All hard-coded configurations:
// - treasury: 0xdf09A0afD09a63fb04ab3573922437e1e637dE8b
// - treasury: the actual TaikoL2 address.
// - blockMaxTxs: 150 (limited by the PSE zkEVM circuits)
// - anchorGasLimit: 250_000 (based on internal devnet, its ~220_000
// after 256 L2 blocks)
Expand Down
17 changes: 17 additions & 0 deletions packages/protocol/contracts/L2/TaikoL2.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,11 @@

pragma solidity 0.8.20;

import "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol";

import "../common/EssentialContract.sol";
import "../common/ICrossChainSync.sol";
import "../libs/LibAddress.sol";
import "../libs/LibMath.sol";
import "../signal/ISignalService.sol";
import "./Lib1559Math.sol";
Expand All @@ -20,6 +23,7 @@ import "./TaikoL2Signer.sol";
/// communication, manage EIP-1559 parameters for gas pricing, and store
/// verified L1 block information.
contract TaikoL2 is EssentialContract, TaikoL2Signer, ICrossChainSync {
using LibAddress for address;
using LibMath for uint256;

struct Config {
Expand Down Expand Up @@ -50,6 +54,8 @@ contract TaikoL2 is EssentialContract, TaikoL2Signer, ICrossChainSync {
error L2_PUBLIC_INPUT_HASH_MISMATCH();
error L2_TOO_LATE();

receive() external payable { }

/// @notice Initializes the TaikoL2 contract.
/// @param _signalService Address of the {ISignalService} contract.
/// @param _gasExcess The initial gasExcess.
Expand Down Expand Up @@ -138,6 +144,17 @@ contract TaikoL2 is EssentialContract, TaikoL2Signer, ICrossChainSync {
emit Anchored(blockhash(parentId), gasExcess);
}

/// @notice Withdraw token or Ether from this address
function withdraw(address token, address to) external onlyOwner {
if (to == address(0)) revert L2_INVALID_PARAM();
if (token == address(0)) {
to.sendEther(address(this).balance);
} else {
IERC20 t = IERC20(token);
t.transfer(to, t.balanceOf(address(this)));
}
}

/// @inheritdoc ICrossChainSync
function getSyncedSnippet(uint64 blockId)
public
Expand Down
24 changes: 14 additions & 10 deletions packages/protocol/test/L2/TaikoL2.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -46,22 +46,26 @@ contract TestTaikoL2 is TaikoTest {
uint32 gasTarget = 60_000_000;

L2 = TaikoL2EIP1559Configurable(
deployProxy({
name: "taiko_l2",
impl: address(new TaikoL2EIP1559Configurable()),
data: bytes.concat(TaikoL2.init.selector, abi.encode(address(ss), gasExcess))
})
payable(
deployProxy({
name: "taiko_l2",
impl: address(new TaikoL2EIP1559Configurable()),
data: bytes.concat(TaikoL2.init.selector, abi.encode(address(ss), gasExcess))
})
)
);

L2.setConfigAndExcess(TaikoL2.Config(gasTarget, quotient), gasExcess);

gasExcess = 195_420_300_100;
L2skip = SkipBasefeeCheckL2(
deployProxy({
name: "taiko_l2",
impl: address(new SkipBasefeeCheckL2()),
data: bytes.concat(TaikoL2.init.selector, abi.encode(address(ss), gasExcess))
})
payable(
deployProxy({
name: "taiko_l2",
impl: address(new SkipBasefeeCheckL2()),
data: bytes.concat(TaikoL2.init.selector, abi.encode(address(ss), gasExcess))
})
)
);

L2skip.setConfigAndExcess(TaikoL2.Config(gasTarget, quotient), gasExcess);
Expand Down
Loading