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)!: reserve 2 slots for TaikoData.Transition [wait for base PR to be merged first] #15711

Closed
Closed
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
1 change: 1 addition & 0 deletions packages/protocol/contracts/L1/TaikoData.sol
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ library TaikoData {
bytes32 blockHash;
bytes32 stateRoot;
bytes32 graffiti;
bytes32[2] __reserved;
}

/// @dev Struct representing state transition data.
Expand Down
10 changes: 4 additions & 6 deletions packages/protocol/test/L1/TaikoL1LibProvingWithTiers.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -786,12 +786,10 @@ contract TaikoL1LibProvingWithTiers is TaikoL1TestBase {

// Let's say the 10th block is unprovable so prove accordingly
if (blockId == 10) {
TaikoData.Transition memory tran = TaikoData.Transition({
parentHash: parentHash,
blockHash: blockHash,
stateRoot: stateRoot,
graffiti: 0x0
});
TaikoData.Transition memory tran;
tran.parentHash = parentHash;
tran.blockHash = blockHash;
tran.stateRoot = stateRoot;
Comment on lines -789 to +792
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would still use the normal struct initialization, otherwise if the struct does still change it will be tricky to track all the places it needs to be updated. (Generally it's even more gas efficient like that because I think now solidity zeros the memory first and then needs to still overwrite it anyway, but the difference is so small it doesn't really matter).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think in test the current approach is fine. And even if we use the "normal struct initialisation", we cannot prevent individual fields from being reassigned new values. We still have to know what shall be assigned and what shall not.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reassigning is a good thing I feel because it's a conscious decision. Compared to forgetting to set something to the correct updated value, that's not so good.

But for tests indeed not so important except a bit harder to maintain the code.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Closed this one to use #15716


TaikoData.TierProof memory proof;
proof.tier = LibTiers.TIER_GUARDIAN;
Expand Down
10 changes: 4 additions & 6 deletions packages/protocol/test/L1/TaikoL1TestBase.sol
Original file line number Diff line number Diff line change
Expand Up @@ -245,12 +245,10 @@ abstract contract TaikoL1TestBase is TaikoTest {
)
internal
{
TaikoData.Transition memory tran = TaikoData.Transition({
parentHash: parentHash,
blockHash: blockHash,
stateRoot: stateRoot,
graffiti: 0x0
});
TaikoData.Transition memory tran;
tran.parentHash = parentHash;
tran.blockHash = blockHash;
tran.stateRoot = stateRoot;

bytes32 instance =
pv.calcInstance(tran, prover, keccak256(abi.encode(meta)), meta.blobHash, 0);
Expand Down
14 changes: 2 additions & 12 deletions packages/protocol/test/verifiers/GuardianVerifier.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,7 @@ contract TestGuardianVerifier is TaikoL1TestBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32(0),
blockHash: bytes32(0),
stateRoot: bytes32(0),
graffiti: bytes32(0)
});
TaikoData.Transition memory transition;

// TierProof
TaikoData.TierProof memory proof = TaikoData.TierProof({ tier: 0, data: "" });
Expand All @@ -55,12 +50,7 @@ contract TestGuardianVerifier is TaikoL1TestBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32(0),
blockHash: bytes32(0),
stateRoot: bytes32(0),
graffiti: bytes32(0)
});
TaikoData.Transition memory transition;

// TierProof
TaikoData.TierProof memory proof = TaikoData.TierProof({ tier: 0, data: "" });
Expand Down
113 changes: 47 additions & 66 deletions packages/protocol/test/verifiers/PseZkVerifier.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,7 @@ contract TestPseZkVerifier is TaikoL1TestBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32(0),
blockHash: bytes32(0),
stateRoot: bytes32(0),
graffiti: bytes32(0)
});
TaikoData.Transition memory transition;

// TierProof
TaikoData.TierProof memory proof = TaikoData.TierProof({ tier: 0, data: "" });
Expand All @@ -73,12 +68,7 @@ contract TestPseZkVerifier is TaikoL1TestBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32(0),
blockHash: bytes32(0),
stateRoot: bytes32(0),
graffiti: bytes32(0)
});
TaikoData.Transition memory transition;

// TierProof
bytes1[48] memory point;
Expand Down Expand Up @@ -124,12 +114,11 @@ contract TestPseZkVerifier is TaikoL1TestBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("23"),
stateRoot: bytes32("34"),
graffiti: bytes32("1234")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("23");
transition.stateRoot = bytes32("34");
transition.graffiti = bytes32("1234");

// TierProof
bytes32 instance = pv.calcInstance(transition, ctx.prover, ctx.metaHash, ctx.blobHash, 0);
Expand Down Expand Up @@ -161,12 +150,11 @@ contract TestPseZkVerifier is TaikoL1TestBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("23"),
stateRoot: bytes32("34"),
graffiti: bytes32("1234")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("23");
transition.stateRoot = bytes32("34");
transition.graffiti = bytes32("1234");

// TierProof
TaikoData.TierProof memory proof =
Expand All @@ -190,12 +178,11 @@ contract TestPseZkVerifier is TaikoL1TestBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("23"),
stateRoot: bytes32("34"),
graffiti: bytes32("1234")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("23");
transition.stateRoot = bytes32("34");
transition.graffiti = bytes32("1234");

// TierProof
bytes32 instance = pv.calcInstance(transition, ctx.prover, ctx.metaHash, ctx.blobHash, 0);
Expand Down Expand Up @@ -228,12 +215,11 @@ contract TestPseZkVerifier is TaikoL1TestBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("23"),
stateRoot: bytes32("34"),
graffiti: bytes32("1234")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("23");
transition.stateRoot = bytes32("34");
transition.graffiti = bytes32("1234");

// TierProof
bytes32 instance = pv.calcInstance(transition, ctx.prover, ctx.metaHash, ctx.blobHash, 0);
Expand Down Expand Up @@ -265,12 +251,11 @@ contract TestPseZkVerifier is TaikoL1TestBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("23"),
stateRoot: bytes32("34"),
graffiti: bytes32("1234")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("23");
transition.stateRoot = bytes32("34");
transition.graffiti = bytes32("1234");

// TierProof
bytes memory zkp = abi.encodePacked("invalid");
Expand Down Expand Up @@ -299,12 +284,11 @@ contract TestPseZkVerifier is TaikoL1TestBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("23"),
stateRoot: bytes32("34"),
graffiti: bytes32("1234")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("23");
transition.stateRoot = bytes32("34");
transition.graffiti = bytes32("1234");

// TierProof
bytes32 instance = pv.calcInstance(transition, ctx.prover, ctx.metaHash, ctx.blobHash, 0);
Expand Down Expand Up @@ -340,12 +324,11 @@ contract TestPseZkVerifier is TaikoL1TestBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("23"),
stateRoot: bytes32("34"),
graffiti: bytes32("1234")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("23");
transition.stateRoot = bytes32("34");
transition.graffiti = bytes32("1234");

// TierProof
bytes32 instance = pv.calcInstance(transition, ctx.prover, ctx.metaHash, ctx.blobHash, 0);
Expand Down Expand Up @@ -381,12 +364,11 @@ contract TestPseZkVerifier is TaikoL1TestBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("23"),
stateRoot: bytes32("34"),
graffiti: bytes32("1234")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("23");
transition.stateRoot = bytes32("34");
transition.graffiti = bytes32("1234");

// TierProof
bytes32 instance = pv.calcInstance(transition, ctx.prover, ctx.metaHash, ctx.blobHash, 0);
Expand Down Expand Up @@ -419,12 +401,11 @@ contract TestPseZkVerifier is TaikoL1TestBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("23"),
stateRoot: bytes32("34"),
graffiti: bytes32("1234")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("23");
transition.stateRoot = bytes32("34");
transition.graffiti = bytes32("1234");

// TierProof
bytes32 instance = pv.calcInstance(transition, ctx.prover, ctx.metaHash, ctx.blobHash, 0);
Expand Down
66 changes: 30 additions & 36 deletions packages/protocol/test/verifiers/SgxVerifier.t.sol
Original file line number Diff line number Diff line change
Expand Up @@ -191,12 +191,11 @@ contract TestSgxVerifier is TaikoL1TestBase, AttestationBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("34"),
stateRoot: bytes32("56"),
graffiti: bytes32("78")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("34");
transition.stateRoot = bytes32("56");
transition.graffiti = bytes32("78");

// TierProof
address newInstance = address(0x33);
Expand Down Expand Up @@ -239,12 +238,11 @@ contract TestSgxVerifier is TaikoL1TestBase, AttestationBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("34"),
stateRoot: bytes32("56"),
graffiti: bytes32("78")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("34");
transition.stateRoot = bytes32("56");
transition.graffiti = bytes32("78");

// TierProof
TaikoData.TierProof memory proof = TaikoData.TierProof({ tier: 0, data: "" });
Expand All @@ -270,12 +268,11 @@ contract TestSgxVerifier is TaikoL1TestBase, AttestationBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("34"),
stateRoot: bytes32("56"),
graffiti: bytes32("78")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("34");
transition.stateRoot = bytes32("56");
transition.graffiti = bytes32("78");

// TierProof
TaikoData.TierProof memory proof = TaikoData.TierProof({
Expand Down Expand Up @@ -303,12 +300,11 @@ contract TestSgxVerifier is TaikoL1TestBase, AttestationBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("34"),
stateRoot: bytes32("56"),
graffiti: bytes32("78")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("34");
transition.stateRoot = bytes32("56");
transition.graffiti = bytes32("78");

// TierProof
uint32 id = 0;
Expand Down Expand Up @@ -341,12 +337,11 @@ contract TestSgxVerifier is TaikoL1TestBase, AttestationBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("34"),
stateRoot: bytes32("56"),
graffiti: bytes32("78")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("34");
transition.stateRoot = bytes32("56");
transition.graffiti = bytes32("78");

// TierProof
address newInstance = address(0x33);
Expand Down Expand Up @@ -380,12 +375,11 @@ contract TestSgxVerifier is TaikoL1TestBase, AttestationBase {
});

// Transition
TaikoData.Transition memory transition = TaikoData.Transition({
parentHash: bytes32("12"),
blockHash: bytes32("34"),
stateRoot: bytes32("56"),
graffiti: bytes32("78")
});
TaikoData.Transition memory transition;
transition.parentHash = bytes32("12");
transition.blockHash = bytes32("34");
transition.stateRoot = bytes32("56");
transition.graffiti = bytes32("78");

// TierProof
uint32 id = 0;
Expand Down
Loading