Skip to content

Commit cd178db

Browse files
committed
perf(f02): fold _decodeAmounts's empty-payload check into assembly
Assisted-by: Claude:claude-sonnet-4-6
1 parent 285f610 commit cd178db

1 file changed

Lines changed: 7 additions & 9 deletions

File tree

src/lib/FVMRewards.sol

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -475,18 +475,16 @@ library FVMRewards {
475475
/// bytes length, then the CBOR payload at 0x80.
476476
function _decodeAmounts() private pure returns (uint256[] memory amounts) {
477477
uint256 payloadLen;
478-
assembly ("memory-safe") {
479-
payloadLen := 0
480-
if gt(returndatasize(), 0x80) { payloadLen := sub(returndatasize(), 0x80) }
481-
}
482-
if (payloadLen == 0) return new uint256[](0);
483-
484478
uint256 scratch;
485479
assembly ("memory-safe") {
486-
scratch := mload(0x40)
487-
mstore(0x40, add(scratch, and(add(payloadLen, 31), not(31))))
488-
returndatacopy(scratch, 0x80, payloadLen)
480+
if gt(returndatasize(), 0x80) {
481+
payloadLen := sub(returndatasize(), 0x80)
482+
scratch := mload(0x40)
483+
mstore(0x40, add(scratch, and(add(payloadLen, 31), not(31))))
484+
returndatacopy(scratch, 0x80, payloadLen)
485+
}
489486
}
487+
if (payloadLen == 0) return amounts;
490488

491489
// ClaimReturn is a single-field tuple: the amounts array is wrapped in a 1-element array.
492490
(, uint256 cur) = _readHead(scratch);

0 commit comments

Comments
 (0)