Skip to content

Commit 507ab3e

Browse files
authored
fix(evm): modify the offset on decode_bytes_32 (#415)
1 parent 722e370 commit 507ab3e

2 files changed

Lines changed: 38 additions & 1 deletion

File tree

packages/evm/src/decoder.cairo

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,9 @@ fn decode_bytes(ref ctx: EVMCalldata) -> Span<felt252> {
287287
/// A `Span<felt252>` containing 32 bytes split into 31 bytes and the MSB.
288288
#[inline(always)]
289289
fn decode_bytes_32(ref ctx: EVMCalldata) -> Span<felt252> {
290-
let (_, value) = ctx.calldata.read_u256(ctx.offset);
290+
let (new_offset, value) = ctx.calldata.read_u256(ctx.offset);
291+
292+
ctx.offset = new_offset;
291293

292294
let mut ba: ByteArray = Default::default();
293295
ba.append_u256(value);

packages/evm/tests/decoder_tests.cairo

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -907,3 +907,38 @@ fn test_decode_transfer_from() {
907907
assert!(*decoded.at(2) == expected_to.into());
908908
assert!(*decoded.at(3) == expected_amount.into());
909909
}
910+
911+
#[test]
912+
fn test_decode_multiple_bytes32() {
913+
let mut data: ByteArray = Default::default();
914+
915+
data.append_u256(0x1111111111111111111111111111111111111111111111111111111111111111);
916+
data.append_u256(0x2222222222222222222222222222222222222222222222222222222222222222);
917+
data.append_u256(0x3333333333333333333333333333333333333333333333333333333333333333);
918+
data.append_u256(0x4444444444444444444444444444444444444444444444444444444444444444);
919+
920+
let mut calldata = cd(data);
921+
922+
let decoded = calldata
923+
.decode(
924+
array![EVMTypes::Bytes32, EVMTypes::Bytes32, EVMTypes::Bytes32, EVMTypes::Bytes32]
925+
.span(),
926+
);
927+
928+
assert!(*decoded.at(0) == 1);
929+
assert!(*decoded.at(1) == 0x11111111111111111111111111111111111111111111111111111111111111);
930+
assert!(*decoded.at(2) == 0x11);
931+
assert!(*decoded.at(3) == 1);
932+
assert!(*decoded.at(4) == 1);
933+
assert!(*decoded.at(5) == 0x22222222222222222222222222222222222222222222222222222222222222);
934+
assert!(*decoded.at(6) == 0x22);
935+
assert!(*decoded.at(7) == 1);
936+
assert!(*decoded.at(8) == 1);
937+
assert!(*decoded.at(9) == 0x33333333333333333333333333333333333333333333333333333333333333);
938+
assert!(*decoded.at(10) == 0x33);
939+
assert!(*decoded.at(11) == 1);
940+
assert!(*decoded.at(12) == 1);
941+
assert!(*decoded.at(13) == 0x44444444444444444444444444444444444444444444444444444444444444);
942+
assert!(*decoded.at(14) == 0x44);
943+
assert!(*decoded.at(15) == 1);
944+
}

0 commit comments

Comments
 (0)