Skip to content

Commit

Permalink
Merge branch 'main' into set_p2p_node
Browse files Browse the repository at this point in the history
  • Loading branch information
davidtaikocha authored Feb 13, 2025
2 parents fdd905c + c420ba2 commit b9841e2
Show file tree
Hide file tree
Showing 83 changed files with 5,143 additions and 1,153 deletions.
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"packages/fork-diff": "0.6.1",
"packages/guardian-prover-health-check": "0.1.0",
"packages/guardian-prover-health-check-ui": "0.2.0",
"packages/protocol": "2.1.0",
"packages/protocol": "2.0.0",
"packages/relayer": "0.12.0",
"packages/snaefell-ui": "1.1.0",
"packages/supplementary-contracts": "1.0.0",
Expand Down
194 changes: 0 additions & 194 deletions packages/protocol/CHANGELOG.md

Large diffs are not rendered by default.

56 changes: 30 additions & 26 deletions packages/protocol/contracts/layer1/based/TaikoInbox.sol
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,31 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, IProposeBatch, I
using LibMath for uint256;
using SafeERC20 for IERC20;

address public immutable inboxWrapper;
address public immutable verifier;
address public immutable bondToken;
ISignalService public immutable signalService;

State public state; // storage layout much match Ontake fork
uint256[50] private __gap;

// External functions ------------------------------------------------------------------------

constructor(address _resolver) EssentialContract(_resolver) { }
constructor(
address _inboxWrapper,
address _verifier,
address _bondToken,
address _signalService
)
nonZeroAddr(_verifier)
nonZeroAddr(_signalService)
EssentialContract(address(0))
{
inboxWrapper = _inboxWrapper;
verifier = _verifier;
bondToken = _bondToken;
signalService = ISignalService(_signalService);
}

function init(address _owner, bytes32 _genesisBlockHash) external initializer {
__Taiko_init(_owner, _genesisBlockHash);
Expand Down Expand Up @@ -70,15 +89,14 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, IProposeBatch, I
BatchParams memory params = abi.decode(_params, (BatchParams));

{
address wrapper = resolve(LibStrings.B_INBOX_WRAPPER, true);
if (wrapper == address(0)) {
if (inboxWrapper == address(0)) {
require(params.proposer == address(0), CustomProposerNotAllowed());
params.proposer = msg.sender;

// blob hashes are only accepted if the caller is trusted.
require(params.blobParams.blobHashes.length == 0, InvalidBlobParams());
} else {
require(msg.sender == wrapper, NotInboxWrapper());
require(msg.sender == inboxWrapper, NotInboxWrapper());
require(params.proposer != address(0), CustomProposerMissing());
}

Expand Down Expand Up @@ -292,7 +310,6 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, IProposeBatch, I
}
}

address verifier = resolve(LibStrings.B_PROOF_VERIFIER, false);
IVerifier(verifier).verifyProof(ctxs, _proof);

// Emit the event
Expand Down Expand Up @@ -396,9 +413,8 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, IProposeBatch, I

state.bondBalance[msg.sender] -= _amount;

address bond = bondToken();
if (bond != address(0)) {
IERC20(bond).safeTransfer(msg.sender, _amount);
if (bondToken != address(0)) {
IERC20(bondToken).safeTransfer(msg.sender, _amount);
} else {
LibAddress.sendEtherAndVerify(msg.sender, _amount);
}
Expand Down Expand Up @@ -506,11 +522,6 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, IProposeBatch, I
return state.stats2.paused;
}

/// @inheritdoc ITaikoInbox
function bondToken() public view returns (address) {
return resolve(LibStrings.B_BOND_TOKEN, true);
}

/// @inheritdoc ITaikoInbox
function getBatch(uint64 _batchId) public view returns (Batch memory batch_) {
Config memory config = pacayaConfig();
Expand Down Expand Up @@ -702,7 +713,7 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, IProposeBatch, I
emit Stats1Updated(stats1);

// Ask signal service to write cross chain signal
ISignalService(resolve(LibStrings.B_SIGNAL_SERVICE, false)).syncChainData(
signalService.syncChainData(
_config.chainId, LibStrings.H_STATE_ROOT, synced.blockId, synced.stateRoot
);
}
Expand Down Expand Up @@ -743,14 +754,12 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, IProposeBatch, I
private
returns (uint256 amountDeposited_)
{
address bond = bondToken();

if (bond != address(0)) {
if (bondToken != address(0)) {
require(msg.value == 0, MsgValueNotZero());

uint256 balance = IERC20(bond).balanceOf(address(this));
IERC20(bond).safeTransferFrom(_user, address(this), _amount);
amountDeposited_ = IERC20(bond).balanceOf(address(this)) - balance;
uint256 balance = IERC20(bondToken).balanceOf(address(this));
IERC20(bondToken).safeTransferFrom(_user, address(this), _amount);
amountDeposited_ = IERC20(bondToken).balanceOf(address(this)) - balance;
} else {
require(msg.value == _amount, EtherNotPaidAsBond());
amountDeposited_ = _amount;
Expand Down Expand Up @@ -793,7 +802,6 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, IProposeBatch, I
require(lastBlockTimestamp_ <= block.timestamp, TimestampTooLarge());

uint64 totalShift;
address signalService;

for (uint256 i; i < blocksLength; ++i) {
totalShift += _params.blocks[i].timeShift;
Expand All @@ -803,13 +811,9 @@ abstract contract TaikoInbox is EssentialContract, ITaikoInbox, IProposeBatch, I

require(numSignals <= _maxSignalsToReceive, TooManySignals());

if (signalService == address(0)) {
signalService = resolve(LibStrings.B_SIGNAL_SERVICE, false);
}

for (uint256 j; j < numSignals; ++j) {
require(
ISignalService(signalService).isSignalSent(_params.blocks[i].signalSlots[j]),
signalService.isSignalSent(_params.blocks[i].signalSlots[j]),
SignalNotSent()
);
}
Expand Down
9 changes: 8 additions & 1 deletion packages/protocol/contracts/layer1/devnet/DevnetInbox.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,14 @@ import "../based/TaikoInbox.sol";
/// @dev Labeled in address resolver as "taiko"
/// @custom:security-contact [email protected]
contract DevnetInbox is TaikoInbox {
constructor(address _resolver) TaikoInbox(_resolver) { }
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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,9 @@ import "../../verifiers/IVerifier.sol";
/// onchain.
/// @custom:security-contact [email protected]
contract OpVerifier is EssentialContract, IVerifier {
uint64 public immutable taikoChainId;

uint256[50] private __gap;

constructor(address _resolver, uint64 _taikoChainId) EssentialContract(_resolver) {
taikoChainId = _taikoChainId;
}
constructor(address _resolver) EssentialContract(_resolver) { }

/// @notice Initializes the contract.
/// @param _owner The owner of this contract. msg.sender will be used if this value is zero.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ contract ForcedInclusionStore is EssentialContract, IForcedInclusionStore {

uint8 public immutable inclusionDelay; // measured in the number of batches
uint64 public immutable feeInGwei;
ITaikoInbox public immutable inbox;
address public immutable inboxWrapper;

mapping(uint256 id => ForcedInclusion inclusion) public queue; // slot 1
uint64 public head; // slot 2
Expand All @@ -29,17 +31,21 @@ contract ForcedInclusionStore is EssentialContract, IForcedInclusionStore {
uint256[48] private __gap;

constructor(
address _resolver,
uint8 _inclusionDelay,
uint64 _feeInGwei
uint64 _feeInGwei,
address _inbox,
address _inboxWrapper
)
EssentialContract(_resolver)
nonZeroValue(_inclusionDelay)
nonZeroValue(_feeInGwei)
nonZeroAddr(_inbox)
nonZeroAddr(_inboxWrapper)
EssentialContract(address(0))
{
require(_inclusionDelay != 0, InvalidParams());
require(_feeInGwei != 0, InvalidParams());

inclusionDelay = _inclusionDelay;
feeInGwei = _feeInGwei;
inbox = ITaikoInbox(_inbox);
inboxWrapper = _inboxWrapper;
}

function init(address _owner) external initializer {
Expand Down Expand Up @@ -74,7 +80,7 @@ contract ForcedInclusionStore is EssentialContract, IForcedInclusionStore {

function consumeOldestForcedInclusion(address _feeRecipient)
external
onlyFromNamed(LibStrings.B_TAIKO_WRAPPER)
onlyFrom(inboxWrapper)
nonReentrant
returns (ForcedInclusion memory inclusion_)
{
Expand Down Expand Up @@ -121,6 +127,6 @@ contract ForcedInclusionStore is EssentialContract, IForcedInclusionStore {
}

function _nextBatchId() private view returns (uint64) {
return ITaikoInbox(resolve(LibStrings.B_TAIKO, false)).getStats2().numBatches;
return inbox.getStats2().numBatches;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,25 @@ contract TaikoWrapper is EssentialContract, IProposeBatch {
error OldestForcedInclusionDue();

uint16 public constant MIN_TXS_PER_FORCED_INCLUSION = 512;
IProposeBatch public immutable inbox;
IForcedInclusionStore public immutable forcedInclusionStore;
address public immutable preconfRouter;

uint256[50] private __gap;

constructor(address _resolver) EssentialContract(_resolver) { }
constructor(
address _inbox,
address _forcedInclusionStore,
address _preconfRouter
)
nonZeroAddr(_inbox)
nonZeroAddr(_forcedInclusionStore)
EssentialContract(address(0))
{
inbox = IProposeBatch(_inbox);
forcedInclusionStore = IForcedInclusionStore(_forcedInclusionStore);
preconfRouter = _preconfRouter;
}

function init(address _owner) external initializer {
__Essential_init(_owner);
Expand All @@ -61,20 +76,16 @@ contract TaikoWrapper is EssentialContract, IProposeBatch {
bytes calldata _txList
)
external
onlyFromNamed(LibStrings.B_PRECONF_ROUTER)
onlyFromOptional(preconfRouter)
nonReentrant
returns (ITaikoInbox.BatchInfo memory, ITaikoInbox.BatchMetadata memory)
{
ITaikoInbox inbox = ITaikoInbox(resolve(LibStrings.B_TAIKO, false));
IForcedInclusionStore store =
IForcedInclusionStore(resolve(LibStrings.B_FORCED_INCLUSION_STORE, false));

(bytes memory bytesX, bytes memory bytesY) = abi.decode(_params, (bytes, bytes));

if (bytesX.length == 0) {
require(!store.isOldestForcedInclusionDue(), OldestForcedInclusionDue());
require(!forcedInclusionStore.isOldestForcedInclusionDue(), OldestForcedInclusionDue());
} else {
_validateForcedInclusionParams(store, bytesX);
_validateForcedInclusionParams(forcedInclusionStore, bytesX);
inbox.proposeBatch(bytesX, "");
}

Expand All @@ -83,15 +94,15 @@ contract TaikoWrapper is EssentialContract, IProposeBatch {
}

function _validateForcedInclusionParams(
IForcedInclusionStore _store,
IForcedInclusionStore _forcedInclusionStore,
bytes memory _bytesX
)
internal
{
ITaikoInbox.BatchParams memory p = abi.decode(_bytesX, (ITaikoInbox.BatchParams));

IForcedInclusionStore.ForcedInclusion memory inclusion =
_store.consumeOldestForcedInclusion(p.proposer);
_forcedInclusionStore.consumeOldestForcedInclusion(p.proposer);

uint256 numBlocks = p.blocks.length;
require(numBlocks != 0, NoBlocks());
Expand Down
9 changes: 8 additions & 1 deletion packages/protocol/contracts/layer1/hekla/HeklaInbox.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,14 @@ import "../based/TaikoInbox.sol";
/// @dev Labeled in address resolver as "taiko"
/// @custom:security-contact [email protected]
contract HeklaInbox is TaikoInbox {
constructor(address _resolver) TaikoInbox(_resolver) { }
constructor(
address _wrapper,
address _verifier,
address _bondToken,
address _signalService
)
TaikoInbox(_wrapper, _verifier, _bondToken, _signalService)
{ }

function pacayaConfig() public pure override returns (ITaikoInbox.Config memory) {
return ITaikoInbox.Config({
Expand Down
9 changes: 8 additions & 1 deletion packages/protocol/contracts/layer1/mainnet/MainnetInbox.sol
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,14 @@ import "./libs/LibFasterReentryLock.sol";
/// @notice See the documentation in {TaikoL1}.
/// @custom:security-contact [email protected]
contract MainnetInbox is TaikoInbox {
constructor(address _resolver) TaikoInbox(_resolver) { }
constructor(
address _wrapper,
address _verifier,
address _bondToken,
address _signalService
)
TaikoInbox(_wrapper, _verifier, _bondToken, _signalService)
{ }

function pacayaConfig() public pure override returns (ITaikoInbox.Config memory) {
// All hard-coded configurations:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,13 @@ contract MainnetBridge is Bridge {
bytes32 private constant _CTX_SLOT =
0xe4ece82196de19aabe639620d7f716c433d1348f96ce727c9989a982dbadc2b9;

constructor(address _resolver) Bridge(_resolver) { }
constructor(
address _resolver,
address _signalService,
address _quotaManager
)
Bridge(_resolver, _signalService, _quotaManager)
{ }

function _storeReentryLock(uint8 _reentry) internal override {
LibFasterReentryLock.storeReentryLock(_reentry);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ contract RollupResolver is ResolverBase {
return 0xE3D777143Ea25A6E031d1e921F396750885f43aC;
}
if (_name == LibStrings.B_PROOF_VERIFIER) {
return address(0); // TODO(davil)
return address(0); // TODO(david)
}
return address(0);
}
Expand Down
Loading

0 comments on commit b9841e2

Please sign in to comment.