Skip to content

Commit

Permalink
feat(protocol): Use taikoL2's address as the treasury address in circ…
Browse files Browse the repository at this point in the history
…uits (#15350)

Co-authored-by: David <david@taiko.xyz>
  • Loading branch information
dantaik and davidtaikocha committed Dec 8, 2023
1 parent d50b276 commit 161f4c6
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 11 deletions.
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
15 changes: 15 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 @@ -138,6 +142,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

0 comments on commit 161f4c6

Please sign in to comment.