@@ -97,6 +97,15 @@ struct TokenBridgeTransferWithPayload {
97
97
bytes payload;
98
98
}
99
99
100
+ struct TokenBridgeTransferWithPayloadEssentials {
101
+ //uint8 payloadId; //see PAYLOAD_ID_TRANSFER_WITH_PAYLOAD
102
+ uint256 normalizedAmount;
103
+ bytes32 tokenAddress;
104
+ uint16 tokenChainId;
105
+ bytes32 fromAddress;
106
+ bytes payload;
107
+ }
108
+
100
109
struct TokenBridgeAttestMeta {
101
110
//uint8 payloadId; //see PAYLOAD_ID_ATTEST_META
102
111
bytes32 tokenAddress;
@@ -372,6 +381,95 @@ library TokenBridgeMessageLib {
372
381
) = decodeTransferWithPayloadMem (encoded, offset, length);
373
382
}
374
383
384
+ // TransferWithPayloadEssentials
385
+
386
+ function decodeTransferWithPayloadEssentialsCd (
387
+ bytes calldata encoded
388
+ ) internal pure returns (
389
+ uint256 normalizedAmount ,
390
+ bytes32 tokenAddress ,
391
+ uint16 tokenChainId ,
392
+ bytes32 fromAddress ,
393
+ bytes calldata payload
394
+ ) { unchecked {
395
+ uint offset = 0 ;
396
+ (normalizedAmount, tokenAddress, tokenChainId, offset) =
397
+ _decodeTransferCommonHeaderEssentialsCdUnchecked (encoded, PAYLOAD_ID_TRANSFER_WITH_PAYLOAD);
398
+
399
+ offset += COMMON_TRANSFER_TO_ADDRESS_SIZE + COMMON_TRANSFER_TO_CHAIN_ID_SIZE;
400
+ (fromAddress, offset) = encoded.asBytes32CdUnchecked (offset);
401
+
402
+ offset.checkBound (encoded.length ); //check for underflow
403
+ (payload, ) = encoded.sliceCdUnchecked (offset, encoded.length - offset);
404
+ }}
405
+
406
+ function decodeTransferWithPayloadEssentialsStructCd (
407
+ bytes calldata encoded
408
+ ) internal pure returns (TokenBridgeTransferWithPayloadEssentials memory twp ) {
409
+ ( twp.normalizedAmount,
410
+ twp.tokenAddress,
411
+ twp.tokenChainId,
412
+ twp.fromAddress,
413
+ twp.payload
414
+ ) = decodeTransferWithPayloadEssentialsCd (encoded);
415
+ }
416
+
417
+ function decodeTransferWithPayloadEssentialsMem (
418
+ bytes memory encoded
419
+ ) internal pure returns (
420
+ uint256 normalizedAmount ,
421
+ bytes32 tokenAddress ,
422
+ uint16 tokenChainId ,
423
+ bytes32 fromAddress ,
424
+ bytes memory payload
425
+ ) {
426
+ (normalizedAmount, tokenAddress, tokenChainId, fromAddress, payload, ) =
427
+ decodeTransferWithPayloadEssentialsMem (encoded, 0 , encoded.length );
428
+ }
429
+
430
+ function decodeTransferWithPayloadEssentialsStructMem (
431
+ bytes memory encoded
432
+ ) internal pure returns (TokenBridgeTransferWithPayloadEssentials memory twp ) {
433
+ (twp, ) = decodeTransferWithPayloadEssentialsStructMem (encoded, 0 , encoded.length );
434
+ }
435
+
436
+ function decodeTransferWithPayloadEssentialsMem (
437
+ bytes memory encoded ,
438
+ uint offset ,
439
+ uint length
440
+ ) internal pure returns (
441
+ uint256 normalizedAmount ,
442
+ bytes32 tokenAddress ,
443
+ uint16 tokenChainId ,
444
+ bytes32 fromAddress ,
445
+ bytes memory payload ,
446
+ uint newOffset
447
+ ) { unchecked {
448
+ (normalizedAmount, tokenAddress, tokenChainId, offset) =
449
+ _decodeTransferCommonHeaderEssentialsMemUnchecked (encoded, offset, PAYLOAD_ID_TRANSFER_WITH_PAYLOAD);
450
+
451
+ offset += COMMON_TRANSFER_TO_ADDRESS_SIZE + COMMON_TRANSFER_TO_CHAIN_ID_SIZE;
452
+ (fromAddress, offset) = encoded.asBytes32MemUnchecked (offset);
453
+
454
+ offset.checkBound (length); //check for underflow
455
+ (payload, newOffset) = encoded.sliceMemUnchecked (offset, length - offset);
456
+
457
+ }}
458
+
459
+ function decodeTransferWithPayloadEssentialsStructMem (
460
+ bytes memory encoded ,
461
+ uint offset ,
462
+ uint length
463
+ ) internal pure returns (TokenBridgeTransferWithPayloadEssentials memory twp , uint newOffset ) {
464
+ ( twp.normalizedAmount,
465
+ twp.tokenAddress,
466
+ twp.tokenChainId,
467
+ twp.fromAddress,
468
+ twp.payload,
469
+ newOffset
470
+ ) = decodeTransferWithPayloadEssentialsMem (encoded, offset, length);
471
+ }
472
+
375
473
// AttestMeta
376
474
377
475
function decodeAttestMetaCd (
@@ -554,15 +652,13 @@ library TokenBridgeMessageLib {
554
652
555
653
// ------------ Private ------------
556
654
557
- function _decodeTransferCommonHeaderCdUnchecked (
655
+ function _decodeTransferCommonHeaderEssentialsCdUnchecked (
558
656
bytes calldata encoded ,
559
657
uint8 expectedPayloadId
560
658
) private pure returns (
561
659
uint256 normalizedAmount ,
562
660
bytes32 tokenAddress ,
563
661
uint16 tokenChainId ,
564
- bytes32 toAddress ,
565
- uint16 toChainId ,
566
662
uint newOffset
567
663
) {
568
664
uint8 payloadId;
@@ -572,21 +668,17 @@ library TokenBridgeMessageLib {
572
668
(normalizedAmount, offset) = encoded.asUint256CdUnchecked (offset);
573
669
(tokenAddress, offset) = encoded.asBytes32CdUnchecked (offset);
574
670
(tokenChainId, offset) = encoded.asUint16CdUnchecked (offset);
575
- (toAddress, offset) = encoded.asBytes32CdUnchecked (offset);
576
- (toChainId, offset) = encoded.asUint16CdUnchecked (offset);
577
671
newOffset = offset;
578
672
}
579
673
580
- function _decodeTransferCommonHeaderMemUnchecked (
674
+ function _decodeTransferCommonHeaderEssentialsMemUnchecked (
581
675
bytes memory encoded ,
582
676
uint offset ,
583
677
uint8 expectedPayloadId
584
678
) private pure returns (
585
679
uint256 normalizedAmount ,
586
680
bytes32 tokenAddress ,
587
681
uint16 tokenChainId ,
588
- bytes32 toAddress ,
589
- uint16 toChainId ,
590
682
uint newOffset
591
683
) {
592
684
uint8 payloadId;
@@ -595,8 +687,52 @@ library TokenBridgeMessageLib {
595
687
(normalizedAmount, offset) = encoded.asUint256MemUnchecked (offset);
596
688
(tokenAddress, offset) = encoded.asBytes32MemUnchecked (offset);
597
689
(tokenChainId, offset) = encoded.asUint16MemUnchecked (offset);
598
- (toAddress, offset) = encoded.asBytes32MemUnchecked (offset);
599
- (toChainId, offset) = encoded.asUint16MemUnchecked (offset);
690
+ newOffset = offset;
691
+ }
692
+
693
+ function _decodeTransferCommonHeaderCdUnchecked (
694
+ bytes calldata encoded ,
695
+ uint8 expectedPayloadId
696
+ ) private pure returns (
697
+ uint256 normalizedAmount ,
698
+ bytes32 tokenAddress ,
699
+ uint16 tokenChainId ,
700
+ bytes32 toAddress ,
701
+ uint16 toChainId ,
702
+ uint newOffset
703
+ ) {
704
+ uint offset;
705
+ (
706
+ normalizedAmount,
707
+ tokenAddress,
708
+ tokenChainId,
709
+ offset
710
+ ) = _decodeTransferCommonHeaderEssentialsCdUnchecked (encoded, expectedPayloadId);
711
+ (toAddress, offset) = encoded.asBytes32CdUnchecked (offset);
712
+ (toChainId, offset) = encoded.asUint16CdUnchecked (offset);
713
+ newOffset = offset;
714
+ }
715
+
716
+ function _decodeTransferCommonHeaderMemUnchecked (
717
+ bytes memory encoded ,
718
+ uint offset ,
719
+ uint8 expectedPayloadId
720
+ ) private pure returns (
721
+ uint256 normalizedAmount ,
722
+ bytes32 tokenAddress ,
723
+ uint16 tokenChainId ,
724
+ bytes32 toAddress ,
725
+ uint16 toChainId ,
726
+ uint newOffset
727
+ ) {
728
+ (
729
+ normalizedAmount,
730
+ tokenAddress,
731
+ tokenChainId,
732
+ offset
733
+ ) = _decodeTransferCommonHeaderEssentialsMemUnchecked (encoded, offset, expectedPayloadId);
734
+ (toAddress, offset) = encoded.asBytes32MemUnchecked (offset);
735
+ (toChainId, offset) = encoded.asUint16MemUnchecked (offset);
600
736
newOffset = offset;
601
737
}
602
738
}
0 commit comments