Skip to content

Commit

Permalink
Code optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
alistair-singh committed Nov 27, 2023
1 parent 8db1e49 commit 1c7b049
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 49 deletions.
7 changes: 2 additions & 5 deletions contracts/src/BeefyClient.sol
Original file line number Diff line number Diff line change
Expand Up @@ -539,13 +539,10 @@ contract BeefyClient {
}

function encodeCommitmentPayload(PayloadItem[] calldata items) internal pure returns (bytes memory) {
bytes memory payload = ScaleCodec.checkedEncodeCompactU32(uint32(items.length));
bytes memory payload = ScaleCodec.checkedEncodeCompactU32(items.length);
for (uint256 i = 0; i < items.length; i++) {
payload = bytes.concat(
payload,
items[i].payloadID,
ScaleCodec.checkedEncodeCompactU32(uint32(items[i].data.length)),
items[i].data
payload, items[i].payloadID, ScaleCodec.checkedEncodeCompactU32(items[i].data.length), items[i].data
);
}

Expand Down
50 changes: 8 additions & 42 deletions contracts/src/Verification.sol
Original file line number Diff line number Diff line change
Expand Up @@ -149,27 +149,16 @@ library Verification {
accum = bytes.concat(accum, encodeDigestItem(digestItems[i]));
}
// Encode number of digest items, followed by encoded digest items
return bytes.concat(ScaleCodec.checkedEncodeCompactU32(uint32(digestItems.length)), accum);
return bytes.concat(ScaleCodec.checkedEncodeCompactU32(digestItems.length), accum);
}

function encodeDigestItem(DigestItem calldata digestItem) internal pure returns (bytes memory) {
if (digestItem.kind == DIGEST_ITEM_PRERUNTIME) {
if (
digestItem.kind == DIGEST_ITEM_PRERUNTIME || digestItem.kind == DIGEST_ITEM_CONSENSUS
|| digestItem.kind == DIGEST_ITEM_SEAL
) {
return bytes.concat(
bytes1(uint8(DIGEST_ITEM_PRERUNTIME)),
digestItem.consensusEngineID,
ScaleCodec.checkedEncodeCompactU32(digestItem.data.length),
digestItem.data
);
} else if (digestItem.kind == DIGEST_ITEM_CONSENSUS) {
return bytes.concat(
bytes1(uint8(DIGEST_ITEM_CONSENSUS)),
digestItem.consensusEngineID,
ScaleCodec.checkedEncodeCompactU32(digestItem.data.length),
digestItem.data
);
} else if (digestItem.kind == DIGEST_ITEM_SEAL) {
return bytes.concat(
bytes1(uint8(DIGEST_ITEM_SEAL)),
bytes1(uint8(digestItem.kind)),
digestItem.consensusEngineID,
ScaleCodec.checkedEncodeCompactU32(digestItem.data.length),
digestItem.data
Expand All @@ -193,30 +182,8 @@ library Verification {
pure
returns (bytes32)
{
// Encode Parachain header
bytes memory encodedHeader = bytes.concat(
// H256
header.parentHash,
// Compact unsigned int
ScaleCodec.checkedEncodeCompactU32(uint32(header.number)),
// H256
header.stateRoot,
// H256
header.extrinsicsRoot,
// Vec<DigestItem>
encodeDigestItems(header.digestItems)
);

// Hash of encoded parachain header merkle leaf
return keccak256(
bytes.concat(
// u32
encodedParaID,
// Vec<u8>
ScaleCodec.checkedEncodeCompactU32(encodedHeader.length),
encodedHeader
)
);
return keccak256(createParachainHeader(encodedParaID, header));
}

function createParachainHeader(bytes4 encodedParaID, ParachainHeader calldata header)
Expand All @@ -234,15 +201,14 @@ library Verification {
// H256
header.extrinsicsRoot,
// Vec<DigestItem>
ScaleCodec.checkedEncodeCompactU32(header.digestItems.length),
encodeDigestItems(header.digestItems)
);

return bytes.concat(
// u32
encodedParaID,
// length of encoded header
ScaleCodec.checkedEncodeCompactU32(uint32(encodedHeader.length)),
ScaleCodec.checkedEncodeCompactU32(encodedHeader.length),
encodedHeader
);
}
Expand Down
2 changes: 1 addition & 1 deletion contracts/src/utils/Math.sol
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ library Math {
*/
function saturatingSub(uint256 a, uint256 b) internal pure returns (uint256) {
unchecked {
if (b > a) {
if (b >= a) {
return 0;
}
return a - b;
Expand Down
Loading

0 comments on commit 1c7b049

Please sign in to comment.