Skip to content

Commit

Permalink
refactor(protocol): avoid memory copy in _getInstance (#13215)
Browse files Browse the repository at this point in the history
  • Loading branch information
dantaik committed Feb 26, 2023
1 parent 9804099 commit 72f9c1d
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 26 deletions.
21 changes: 8 additions & 13 deletions packages/protocol/contracts/L1/libs/LibProving.sol
Original file line number Diff line number Diff line change
Expand Up @@ -454,21 +454,16 @@ library LibProving {

function _getInstance(
Evidence memory evidence
) internal pure returns (bytes32 instance) {
bytes[] memory headerRLPItemsList = LibBlockHeader
.getBlockHeaderRLPItemsList(evidence.header);
bytes[] memory instanceRLPItemsList = new bytes[](
headerRLPItemsList.length + 2
) internal pure returns (bytes32) {
bytes[] memory list = LibBlockHeader.getBlockHeaderRLPItemsList(
evidence.header,
2
);

for (uint256 i; i < headerRLPItemsList.length; ++i) {
instanceRLPItemsList[i] = headerRLPItemsList[i];
}
instanceRLPItemsList[headerRLPItemsList.length] = LibRLPWriter
.writeAddress(evidence.prover);
instanceRLPItemsList[headerRLPItemsList.length + 1] = LibRLPWriter
.writeHash(evidence.meta.txListHash);
uint256 len = list.length;
list[len - 2] = LibRLPWriter.writeAddress(evidence.prover);
list[len - 1] = LibRLPWriter.writeHash(evidence.meta.txListHash);

instance = keccak256(LibRLPWriter.writeList(instanceRLPItemsList));
return keccak256(LibRLPWriter.writeList(list));
}
}
9 changes: 5 additions & 4 deletions packages/protocol/contracts/libs/LibBlockHeader.sol
Original file line number Diff line number Diff line change
Expand Up @@ -35,20 +35,21 @@ library LibBlockHeader {
BlockHeader memory header
) internal pure returns (bytes32) {
bytes memory rlpHeader = LibRLPWriter.writeList(
getBlockHeaderRLPItemsList(header)
getBlockHeaderRLPItemsList(header, 0)
);
return keccak256(rlpHeader);
}

function getBlockHeaderRLPItemsList(
BlockHeader memory header
BlockHeader memory header,
uint256 extraCapacity
) internal pure returns (bytes[] memory list) {
if (header.baseFeePerGas == 0) {
// non-EIP11559 transaction
list = new bytes[](15);
list = new bytes[](15 + extraCapacity);
} else {
// EIP1159 transaction
list = new bytes[](16);
list = new bytes[](16 + extraCapacity);
}
list[0] = LibRLPWriter.writeHash(header.parentHash);
list[1] = LibRLPWriter.writeHash(header.ommersHash);
Expand Down
25 changes: 16 additions & 9 deletions packages/protocol/contracts/test/libs/TestLibProving.sol
Original file line number Diff line number Diff line change
Expand Up @@ -224,14 +224,6 @@ library TestLibProving {

if (!skipZKPVerification) {
for (uint256 i; i < config.zkProofsPerBlock; ++i) {
bytes32 instance = keccak256(
abi.encode(
blockHash,
evidence.prover,
evidence.meta.txListHash
)
);

if (
!proofVerifier.verifyZKP({
verifierId: string(
Expand All @@ -243,7 +235,7 @@ library TestLibProving {
)
),
zkproof: evidence.proofs[i],
instance: instance
instance: _getInstance(evidence)
})
) revert L1_ZKP();
}
Expand Down Expand Up @@ -438,4 +430,19 @@ library TestLibProving {
BlockHeader memory header,
TaikoData.BlockMetadata memory meta
) private pure {}

function _getInstance(
Evidence memory evidence
) internal pure returns (bytes32) {
bytes[] memory list = LibBlockHeader.getBlockHeaderRLPItemsList(
evidence.header,
2
);

uint256 len = list.length;
list[len - 2] = LibRLPWriter.writeAddress(evidence.prover);
list[len - 1] = LibRLPWriter.writeHash(evidence.meta.txListHash);

return keccak256(LibRLPWriter.writeList(list));
}
}

0 comments on commit 72f9c1d

Please sign in to comment.