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 immutables and add verifiers in ComposeVerifier #18937

Merged
merged 7 commits into from
Feb 14, 2025
Merged
Show file tree
Hide file tree
Changes from all 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
Original file line number Diff line number Diff line change
Expand Up @@ -9,25 +9,22 @@ import "../../verifiers/compose/ComposeVerifier.sol";
contract DevnetVerifier is ComposeVerifier {
uint256[50] private __gap;

address public immutable opVerifier;
address public immutable sgxVerifier;
address public immutable risc0Verifier;
address public immutable sp1Verifier;

constructor(
address _resolver,
address _taikoInbox,
address _opVerifier,
address _sgxVerifier,
address _risc0Verifier,
address _sp1Verifier
)
EssentialContract(_resolver)
{
opVerifier = _opVerifier;
sgxVerifier = _sgxVerifier;
risc0Verifier = _risc0Verifier;
sp1Verifier = _sp1Verifier;
}
ComposeVerifier(
_taikoInbox,
_opVerifier,
_sgxVerifier,
address(0),
_risc0Verifier,
_sp1Verifier
)
{ }

function areVerifiersSufficient(address[] memory _verifiers)
internal
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,14 @@ import "./ComposeVerifier.sol";
contract AnyTwoVerifier is ComposeVerifier {
uint256[50] private __gap;

address public immutable sgxVerifier;
address public immutable risc0Verifier;
address public immutable sp1Verifier;

constructor(
address _taikoInbox,
address _sgxVerifier,
address _risc0Verifier,
address _sp1Verifier
)
EssentialContract(address(0))
{
sgxVerifier = _sgxVerifier;
risc0Verifier = _risc0Verifier;
sp1Verifier = _sp1Verifier;
}
ComposeVerifier(_taikoInbox, address(0), _sgxVerifier, address(0), _risc0Verifier, _sp1Verifier)
{ }

function areVerifiersSufficient(address[] memory _verifiers)
internal
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,14 @@ import "./ComposeVerifier.sol";
contract AnyVerifier is ComposeVerifier {
uint256[50] private __gap;

address public immutable sgxVerifier;
address public immutable risc0Verifier;
address public immutable sp1Verifier;

constructor(
address _resolver,
address _taikoInbox,
address _sgxVerifier,
address _risc0Verifier,
address _sp1Verifier
)
EssentialContract(_resolver)
{
sgxVerifier = _sgxVerifier;
risc0Verifier = _risc0Verifier;
sp1Verifier = _sp1Verifier;
}
ComposeVerifier(_taikoInbox, address(0), _sgxVerifier, address(0), _risc0Verifier, _sp1Verifier)
{ }

function areVerifiersSufficient(address[] memory _verifiers)
internal
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,31 @@ abstract contract ComposeVerifier is EssentialContract, IVerifier {
bytes proof;
}

address public immutable taikoInbox;
address public immutable opVerifier;
address public immutable sgxVerifier;
address public immutable tdxVerifier;
address public immutable risc0Verifier;
address public immutable sp1Verifier;

constructor(
address _taikoInbox,
address _opVerifier,
address _sgxVerifier,
address _tdxVerifier,
address _risc0Verifier,
address _sp1Verifier
)
EssentialContract(address(0))
{
taikoInbox = _taikoInbox;
opVerifier = _opVerifier;
sgxVerifier = _sgxVerifier;
tdxVerifier = _tdxVerifier;
risc0Verifier = _risc0Verifier;
sp1Verifier = _sp1Verifier;
}

error CV_INVALID_SUB_VERIFIER();
error CV_INVALID_SUB_VERIFIER_ORDER();
error CV_VERIFIERS_INSUFFICIENT();
Expand All @@ -35,7 +60,7 @@ abstract contract ComposeVerifier is EssentialContract, IVerifier {
bytes calldata _proof
)
external
onlyFromNamed(LibStrings.B_TAIKO)
onlyFrom(taikoInbox)
{
SubProof[] memory subProofs = abi.decode(_proof, (SubProof[]));
uint256 size = subProofs.length;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,22 +9,14 @@ import "./ComposeVerifier.sol";
contract SgxAndZkVerifier is ComposeVerifier {
uint256[50] private __gap;

address public immutable sgxVerifier;
address public immutable risc0Verifier;
address public immutable sp1Verifier;

constructor(
address _resolver,
address _taikoInbox,
address _sgxVerifier,
address _risc0Verifier,
address _sp1Verifier
)
EssentialContract(_resolver)
{
sgxVerifier = _sgxVerifier;
risc0Verifier = _risc0Verifier;
sp1Verifier = _sp1Verifier;
}
ComposeVerifier(_taikoInbox, address(0), _sgxVerifier, address(0), _risc0Verifier, _sp1Verifier)
{ }

function areVerifiersSufficient(address[] memory _verifiers)
internal
Expand Down
10 changes: 3 additions & 7 deletions packages/protocol/script/layer1/based/DeployProtocolOnL1.s.sol
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import "src/layer1/automata-attestation/lib/PEMCertChainLib.sol";
import "src/layer1/automata-attestation/utils/SigVerifyLib.sol";
import "src/layer1/devnet/DevnetInbox.sol";
import "src/layer1/devnet/verifiers/OpVerifier.sol";
import "src/layer1/devnet/verifiers/DevnetVerifier.sol";
import "src/layer1/mainnet/MainnetInbox.sol";
import "src/layer1/based/TaikoInbox.sol";
import "src/layer1/fork-router/PacayaForkRouter.sol";
Expand All @@ -35,6 +34,7 @@ import "src/layer1/verifiers/Risc0Verifier.sol";
import "src/layer1/verifiers/SP1Verifier.sol";
import "src/layer1/verifiers/SgxVerifier.sol";
import "src/layer1/verifiers/compose/ComposeVerifier.sol";
import "src/layer1/devnet/verifiers/DevnetVerifier.sol";
import "test/shared/helpers/FreeMintERC20Token.sol";
import "test/shared/helpers/FreeMintERC20Token_With50PctgMintAndTransferFailure.sol";
import "test/shared/DeployCapability.sol";
Expand Down Expand Up @@ -317,9 +317,7 @@ contract DeployProtocolOnL1 is DeployCapability {
address proofVerifier = deployProxy({
name: "proof_verifier",
impl: address(
new DevnetVerifier(
address(rollupResolver), address(0), address(0), address(0), address(0)
)
new DevnetVerifier(taikoInboxAddr, address(0), address(0), address(0), address(0))
),
data: abi.encodeCall(ComposeVerifier.init, (address(0))),
registerTo: rollupResolver
Expand All @@ -332,9 +330,7 @@ contract DeployProtocolOnL1 is DeployCapability {

UUPSUpgradeable(proofVerifier).upgradeTo({
newImplementation: address(
new DevnetVerifier(
address(rollupResolver), opVerifier, sgxVerifier, risc0Verifier, sp1Verifier
)
new DevnetVerifier(taikoInboxAddr, opVerifier, sgxVerifier, risc0Verifier, sp1Verifier)
)
});
ComposeVerifier(proofVerifier).transferOwnership(owner);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ import "src/layer1/verifiers/SgxVerifier.sol";
import "src/layer1/verifiers/Risc0Verifier.sol";
import "src/layer1/verifiers/SP1Verifier.sol";
import "src/layer1/devnet/verifiers/OpVerifier.sol";
import "src/layer1/devnet/verifiers/DevnetVerifier.sol";
import "src/layer1/fork-router/PacayaForkRouter.sol";
import "src/layer1/verifiers/compose/ComposeVerifier.sol";
import "src/layer1/devnet/verifiers/DevnetVerifier.sol";
import "src/layer1/devnet/DevnetInbox.sol";

contract UpgradeDevnetPacayaL1 is DeployCapability {
Expand Down Expand Up @@ -128,9 +128,7 @@ contract UpgradeDevnetPacayaL1 is DeployCapability {
address proofVerifier = address(
new ERC1967Proxy(
address(
new DevnetVerifier(
address(rollupResolver), address(0), address(0), address(0), address(0)
)
new DevnetVerifier(taikoInbox, address(0), address(0), address(0), address(0))
),
abi.encodeCall(ComposeVerifier.init, (address(0)))
)
Expand All @@ -154,9 +152,7 @@ contract UpgradeDevnetPacayaL1 is DeployCapability {

UUPSUpgradeable(proofVerifier).upgradeTo(
address(
new DevnetVerifier(
address(rollupResolver), opVerifier, sgxVerifier, risc0Verifier, sp1Verifier
)
new DevnetVerifier(taikoInbox, opVerifier, sgxVerifier, risc0Verifier, sp1Verifier)
)
);
}
Expand Down
Loading