@@ -436,23 +436,28 @@ library VaaLib {
436
436
) = decodeVaaBodyMemUnchecked (encodedVaa, 0 , encodedVaa.length );
437
437
}
438
438
439
- function decodeEmitterChainIdCdUnchecked (
439
+ // Convinience decoding function for token bridge Vaas
440
+ function decodeEmitterChainAndPayloadCdUnchecked (
440
441
bytes calldata encodedVaa
441
- ) internal pure returns (uint16 emitterChainId ) {
442
+ ) internal pure returns (uint16 emitterChainId , bytes calldata payload ) { unchecked {
442
443
checkVaaVersionCd (encodedVaa);
443
444
uint envelopeOffset = skipVaaHeaderCd (encodedVaa);
444
445
uint offset = envelopeOffset + ENVELOPE_EMITTER_CHAIN_ID_OFFSET;
445
- (emitterChainId, ) = encodedVaa.asUint16CdUnchecked (offset);
446
- }
446
+ (emitterChainId, offset) = encodedVaa.asUint16CdUnchecked (offset);
447
+ offset += ENVELOPE_EMITTER_ADDRESS_SIZE + ENVELOPE_SEQUENCE_SIZE + ENVELOPE_CONSISTENCY_LEVEL_SIZE;
448
+ payload = decodeVaaPayloadCd (encodedVaa, offset);
449
+ }}
447
450
448
- function decodeEmitterChainIdMemUnchecked (
451
+ function decodeEmitterChainAndPayloadMemUnchecked (
449
452
bytes memory encodedVaa
450
- ) internal pure returns (uint16 emitterChainId ) {
453
+ ) internal pure returns (uint16 emitterChainId , bytes memory payload ) { unchecked {
451
454
checkVaaVersionMemUnchecked (encodedVaa, 0 );
452
455
uint envelopeOffset = skipVaaHeaderMemUnchecked (encodedVaa, 0 );
453
456
uint offset = envelopeOffset + ENVELOPE_EMITTER_CHAIN_ID_OFFSET;
454
- (emitterChainId, ) = encodedVaa.asUint16MemUnchecked (offset);
455
- }
457
+ (emitterChainId, offset) = encodedVaa.asUint16MemUnchecked (offset);
458
+ offset += ENVELOPE_EMITTER_ADDRESS_SIZE + ENVELOPE_SEQUENCE_SIZE + ENVELOPE_CONSISTENCY_LEVEL_SIZE;
459
+ (payload, ) = decodeVaaPayloadMemUnchecked (encodedVaa, offset, encodedVaa.length );
460
+ }}
456
461
457
462
// ------------ Advanced Decoding Functions ------------
458
463
@@ -868,11 +873,11 @@ library VaaLib {
868
873
bytes memory encoded ,
869
874
uint payloadOffset ,
870
875
uint vaaLength
871
- ) internal pure returns (bytes memory payload , uint newOffset ) {
876
+ ) internal pure returns (bytes memory payload , uint newOffset ) { unchecked {
872
877
//check to avoid underflow in following subtraction
873
878
payloadOffset.checkBound (vaaLength);
874
879
(payload, newOffset) = encoded.sliceMemUnchecked (payloadOffset, vaaLength - payloadOffset);
875
- }
880
+ }}
876
881
877
882
// ------------ Encoding ------------
878
883
@@ -1013,11 +1018,11 @@ library VaaLib {
1013
1018
function _decodeRemainderCd (
1014
1019
bytes calldata encodedVaa ,
1015
1020
uint offset
1016
- ) private pure returns (bytes calldata remainder ) {
1021
+ ) private pure returns (bytes calldata remainder ) { unchecked {
1017
1022
//check to avoid underflow in following subtraction
1018
1023
offset.checkBound (encodedVaa.length );
1019
1024
(remainder, ) = encodedVaa.sliceCdUnchecked (offset, encodedVaa.length - offset);
1020
- }
1025
+ }}
1021
1026
}
1022
1027
1023
1028
using VaaLib for VaaHeader global ;
0 commit comments