@hyperlane-xyz/core 5.12.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (304) hide show
  1. package/contracts/PackageVersioned.sol +1 -1
  2. package/contracts/hooks/aggregation/StaticAggregationHook.sol +25 -0
  3. package/contracts/hooks/warp-route/RateLimitedHook.sol +54 -17
  4. package/contracts/token/HypERC20.sol +7 -2
  5. package/contracts/token/HypERC20Collateral.sol +7 -2
  6. package/contracts/token/HypNative.sol +6 -2
  7. package/contracts/token/extensions/FastHypERC20.sol +2 -1
  8. package/contracts/token/extensions/FastHypERC20Collateral.sol +2 -1
  9. package/contracts/token/extensions/HypERC4626.sol +2 -1
  10. package/contracts/token/extensions/HypERC4626Collateral.sol +2 -1
  11. package/contracts/token/extensions/HypERC4626OwnerCollateral.sol +2 -1
  12. package/contracts/token/extensions/HypFiatToken.sol +2 -1
  13. package/contracts/token/extensions/HypXERC20.sol +2 -1
  14. package/contracts/token/extensions/HypXERC20Lockbox.sol +8 -1
  15. package/contracts/token/libs/FastTokenRouter.sol +2 -1
  16. package/contracts/token/libs/FungibleTokenRouter.sol +32 -0
  17. package/contracts/token/libs/TokenRouter.sol +31 -3
  18. package/dist/buildArtifact.js +1 -1
  19. package/dist/buildArtifact.json +1 -1
  20. package/dist/contracts/hooks/warp-route/RateLimitedHook.d.ts +46 -31
  21. package/dist/contracts/hooks/warp-route/RateLimitedHook.d.ts.map +1 -1
  22. package/dist/contracts/token/HypERC20.d.ts +16 -1
  23. package/dist/contracts/token/HypERC20.d.ts.map +1 -1
  24. package/dist/contracts/token/HypERC20Collateral.d.ts +16 -1
  25. package/dist/contracts/token/HypERC20Collateral.d.ts.map +1 -1
  26. package/dist/contracts/token/HypNative.d.ts +16 -1
  27. package/dist/contracts/token/HypNative.d.ts.map +1 -1
  28. package/dist/contracts/token/extensions/FastHypERC20.d.ts +16 -1
  29. package/dist/contracts/token/extensions/FastHypERC20.d.ts.map +1 -1
  30. package/dist/contracts/token/extensions/FastHypERC20Collateral.d.ts +16 -1
  31. package/dist/contracts/token/extensions/FastHypERC20Collateral.d.ts.map +1 -1
  32. package/dist/contracts/token/extensions/HypERC4626.d.ts +16 -1
  33. package/dist/contracts/token/extensions/HypERC4626.d.ts.map +1 -1
  34. package/dist/contracts/token/extensions/HypERC4626Collateral.d.ts +16 -1
  35. package/dist/contracts/token/extensions/HypERC4626Collateral.d.ts.map +1 -1
  36. package/dist/contracts/token/extensions/HypERC4626OwnerCollateral.d.ts +16 -1
  37. package/dist/contracts/token/extensions/HypERC4626OwnerCollateral.d.ts.map +1 -1
  38. package/dist/contracts/token/extensions/HypFiatToken.d.ts +16 -1
  39. package/dist/contracts/token/extensions/HypFiatToken.d.ts.map +1 -1
  40. package/dist/contracts/token/extensions/HypXERC20.d.ts +16 -1
  41. package/dist/contracts/token/extensions/HypXERC20.d.ts.map +1 -1
  42. package/dist/contracts/token/extensions/HypXERC20Lockbox.d.ts +16 -1
  43. package/dist/contracts/token/extensions/HypXERC20Lockbox.d.ts.map +1 -1
  44. package/dist/contracts/token/extensions/index.d.ts +0 -1
  45. package/dist/contracts/token/extensions/index.d.ts.map +1 -1
  46. package/dist/contracts/token/libs/FastTokenRouter.d.ts +16 -1
  47. package/dist/contracts/token/libs/FastTokenRouter.d.ts.map +1 -1
  48. package/dist/contracts/token/{extensions/HypNativeScaled.d.ts → libs/FungibleTokenRouter.d.ts} +41 -70
  49. package/dist/contracts/token/libs/FungibleTokenRouter.d.ts.map +1 -0
  50. package/dist/contracts/token/libs/FungibleTokenRouter.js +2 -0
  51. package/dist/contracts/token/libs/FungibleTokenRouter.js.map +1 -0
  52. package/dist/contracts/token/libs/index.d.ts +1 -0
  53. package/dist/contracts/token/libs/index.d.ts.map +1 -1
  54. package/dist/factories/contracts/AttributeCheckpointFraud__factory.d.ts +1 -1
  55. package/dist/factories/contracts/AttributeCheckpointFraud__factory.js +1 -1
  56. package/dist/factories/contracts/CheckpointFraudProofs__factory.d.ts +1 -1
  57. package/dist/factories/contracts/CheckpointFraudProofs__factory.js +1 -1
  58. package/dist/factories/contracts/Mailbox__factory.d.ts +1 -1
  59. package/dist/factories/contracts/Mailbox__factory.js +1 -1
  60. package/dist/factories/contracts/avs/ECDSAStakeRegistry__factory.d.ts +1 -1
  61. package/dist/factories/contracts/avs/ECDSAStakeRegistry__factory.js +1 -1
  62. package/dist/factories/contracts/avs/HyperlaneServiceManager__factory.d.ts +1 -1
  63. package/dist/factories/contracts/avs/HyperlaneServiceManager__factory.js +1 -1
  64. package/dist/factories/contracts/hooks/ArbL2ToL1Hook__factory.d.ts +1 -1
  65. package/dist/factories/contracts/hooks/ArbL2ToL1Hook__factory.js +1 -1
  66. package/dist/factories/contracts/hooks/CCIPHook__factory.d.ts +1 -1
  67. package/dist/factories/contracts/hooks/CCIPHook__factory.js +1 -1
  68. package/dist/factories/contracts/hooks/DefaultHook__factory.d.ts +1 -1
  69. package/dist/factories/contracts/hooks/DefaultHook__factory.js +1 -1
  70. package/dist/factories/contracts/hooks/MerkleTreeHook__factory.d.ts +1 -1
  71. package/dist/factories/contracts/hooks/MerkleTreeHook__factory.js +1 -1
  72. package/dist/factories/contracts/hooks/OPL2ToL1Hook__factory.d.ts +1 -1
  73. package/dist/factories/contracts/hooks/OPL2ToL1Hook__factory.js +1 -1
  74. package/dist/factories/contracts/hooks/OPStackHook__factory.d.ts +1 -1
  75. package/dist/factories/contracts/hooks/OPStackHook__factory.js +1 -1
  76. package/dist/factories/contracts/hooks/PausableHook__factory.d.ts +1 -1
  77. package/dist/factories/contracts/hooks/PausableHook__factory.js +1 -1
  78. package/dist/factories/contracts/hooks/PolygonPosHook__factory.d.ts +1 -1
  79. package/dist/factories/contracts/hooks/PolygonPosHook__factory.js +1 -1
  80. package/dist/factories/contracts/hooks/ProtocolFee__factory.d.ts +1 -1
  81. package/dist/factories/contracts/hooks/ProtocolFee__factory.js +1 -1
  82. package/dist/factories/contracts/hooks/aggregation/ERC5164Hook__factory.d.ts +1 -1
  83. package/dist/factories/contracts/hooks/aggregation/ERC5164Hook__factory.js +1 -1
  84. package/dist/factories/contracts/hooks/aggregation/StaticAggregationHookFactory__factory.d.ts +1 -1
  85. package/dist/factories/contracts/hooks/aggregation/StaticAggregationHookFactory__factory.d.ts.map +1 -1
  86. package/dist/factories/contracts/hooks/aggregation/StaticAggregationHookFactory__factory.js +1 -1
  87. package/dist/factories/contracts/hooks/aggregation/StaticAggregationHookFactory__factory.js.map +1 -1
  88. package/dist/factories/contracts/hooks/aggregation/StaticAggregationHook__factory.d.ts +1 -1
  89. package/dist/factories/contracts/hooks/aggregation/StaticAggregationHook__factory.d.ts.map +1 -1
  90. package/dist/factories/contracts/hooks/aggregation/StaticAggregationHook__factory.js +1 -1
  91. package/dist/factories/contracts/hooks/aggregation/StaticAggregationHook__factory.js.map +1 -1
  92. package/dist/factories/contracts/hooks/igp/InterchainGasPaymaster__factory.d.ts +1 -1
  93. package/dist/factories/contracts/hooks/igp/InterchainGasPaymaster__factory.js +1 -1
  94. package/dist/factories/contracts/hooks/igp/StorageGasOracle__factory.d.ts +1 -1
  95. package/dist/factories/contracts/hooks/igp/StorageGasOracle__factory.js +1 -1
  96. package/dist/factories/contracts/hooks/layer-zero/LayerZeroV1Hook__factory.d.ts +1 -1
  97. package/dist/factories/contracts/hooks/layer-zero/LayerZeroV1Hook__factory.js +1 -1
  98. package/dist/factories/contracts/hooks/layer-zero/LayerZeroV2Hook__factory.d.ts +1 -1
  99. package/dist/factories/contracts/hooks/layer-zero/LayerZeroV2Hook__factory.js +1 -1
  100. package/dist/factories/contracts/hooks/routing/AmountRoutingHook__factory.d.ts +1 -1
  101. package/dist/factories/contracts/hooks/routing/AmountRoutingHook__factory.js +1 -1
  102. package/dist/factories/contracts/hooks/routing/DestinationRecipientRoutingHook__factory.d.ts +1 -1
  103. package/dist/factories/contracts/hooks/routing/DestinationRecipientRoutingHook__factory.js +1 -1
  104. package/dist/factories/contracts/hooks/routing/DomainRoutingHook__factory.d.ts +1 -1
  105. package/dist/factories/contracts/hooks/routing/DomainRoutingHook__factory.js +1 -1
  106. package/dist/factories/contracts/hooks/routing/FallbackDomainRoutingHook__factory.d.ts +1 -1
  107. package/dist/factories/contracts/hooks/routing/FallbackDomainRoutingHook__factory.js +1 -1
  108. package/dist/factories/contracts/hooks/warp-route/RateLimitedHook__factory.d.ts +23 -9
  109. package/dist/factories/contracts/hooks/warp-route/RateLimitedHook__factory.d.ts.map +1 -1
  110. package/dist/factories/contracts/hooks/warp-route/RateLimitedHook__factory.js +29 -11
  111. package/dist/factories/contracts/hooks/warp-route/RateLimitedHook__factory.js.map +1 -1
  112. package/dist/factories/contracts/isms/NoopIsm__factory.d.ts +1 -1
  113. package/dist/factories/contracts/isms/NoopIsm__factory.js +1 -1
  114. package/dist/factories/contracts/isms/PausableIsm__factory.d.ts +1 -1
  115. package/dist/factories/contracts/isms/PausableIsm__factory.js +1 -1
  116. package/dist/factories/contracts/isms/TrustedRelayerIsm__factory.d.ts +1 -1
  117. package/dist/factories/contracts/isms/TrustedRelayerIsm__factory.js +1 -1
  118. package/dist/factories/contracts/isms/aggregation/StaticAggregationIsmFactory__factory.d.ts +1 -1
  119. package/dist/factories/contracts/isms/aggregation/StaticAggregationIsmFactory__factory.js +1 -1
  120. package/dist/factories/contracts/isms/aggregation/StaticAggregationIsm__factory.d.ts +1 -1
  121. package/dist/factories/contracts/isms/aggregation/StaticAggregationIsm__factory.js +1 -1
  122. package/dist/factories/contracts/isms/aggregation/StorageAggregationIsm.sol/StorageAggregationIsmFactory__factory.d.ts +1 -1
  123. package/dist/factories/contracts/isms/aggregation/StorageAggregationIsm.sol/StorageAggregationIsmFactory__factory.js +1 -1
  124. package/dist/factories/contracts/isms/aggregation/StorageAggregationIsm.sol/StorageAggregationIsm__factory.d.ts +1 -1
  125. package/dist/factories/contracts/isms/aggregation/StorageAggregationIsm.sol/StorageAggregationIsm__factory.js +1 -1
  126. package/dist/factories/contracts/isms/hook/ArbL2ToL1Ism__factory.d.ts +1 -1
  127. package/dist/factories/contracts/isms/hook/ArbL2ToL1Ism__factory.js +1 -1
  128. package/dist/factories/contracts/isms/hook/CCIPIsm__factory.d.ts +1 -1
  129. package/dist/factories/contracts/isms/hook/CCIPIsm__factory.js +1 -1
  130. package/dist/factories/contracts/isms/hook/ERC5164Ism__factory.d.ts +1 -1
  131. package/dist/factories/contracts/isms/hook/ERC5164Ism__factory.js +1 -1
  132. package/dist/factories/contracts/isms/hook/OPL2ToL1Ism__factory.d.ts +1 -1
  133. package/dist/factories/contracts/isms/hook/OPL2ToL1Ism__factory.js +1 -1
  134. package/dist/factories/contracts/isms/hook/OPStackIsm__factory.d.ts +1 -1
  135. package/dist/factories/contracts/isms/hook/OPStackIsm__factory.js +1 -1
  136. package/dist/factories/contracts/isms/hook/PolygonPosIsm__factory.d.ts +1 -1
  137. package/dist/factories/contracts/isms/hook/PolygonPosIsm__factory.js +1 -1
  138. package/dist/factories/contracts/isms/hook/layer-zero/LayerZeroV2Ism__factory.d.ts +1 -1
  139. package/dist/factories/contracts/isms/hook/layer-zero/LayerZeroV2Ism__factory.js +1 -1
  140. package/dist/factories/contracts/isms/multisig/StaticMultisigIsm.sol/StaticMerkleRootMultisigIsmFactory__factory.d.ts +1 -1
  141. package/dist/factories/contracts/isms/multisig/StaticMultisigIsm.sol/StaticMerkleRootMultisigIsmFactory__factory.js +1 -1
  142. package/dist/factories/contracts/isms/multisig/StaticMultisigIsm.sol/StaticMerkleRootMultisigIsm__factory.d.ts +1 -1
  143. package/dist/factories/contracts/isms/multisig/StaticMultisigIsm.sol/StaticMerkleRootMultisigIsm__factory.js +1 -1
  144. package/dist/factories/contracts/isms/multisig/StaticMultisigIsm.sol/StaticMessageIdMultisigIsmFactory__factory.d.ts +1 -1
  145. package/dist/factories/contracts/isms/multisig/StaticMultisigIsm.sol/StaticMessageIdMultisigIsmFactory__factory.js +1 -1
  146. package/dist/factories/contracts/isms/multisig/StaticMultisigIsm.sol/StaticMessageIdMultisigIsm__factory.d.ts +1 -1
  147. package/dist/factories/contracts/isms/multisig/StaticMultisigIsm.sol/StaticMessageIdMultisigIsm__factory.js +1 -1
  148. package/dist/factories/contracts/isms/multisig/StorageMultisigIsm.sol/StorageMerkleRootMultisigIsmFactory__factory.d.ts +1 -1
  149. package/dist/factories/contracts/isms/multisig/StorageMultisigIsm.sol/StorageMerkleRootMultisigIsmFactory__factory.js +1 -1
  150. package/dist/factories/contracts/isms/multisig/StorageMultisigIsm.sol/StorageMerkleRootMultisigIsm__factory.d.ts +1 -1
  151. package/dist/factories/contracts/isms/multisig/StorageMultisigIsm.sol/StorageMerkleRootMultisigIsm__factory.js +1 -1
  152. package/dist/factories/contracts/isms/multisig/StorageMultisigIsm.sol/StorageMessageIdMultisigIsmFactory__factory.d.ts +1 -1
  153. package/dist/factories/contracts/isms/multisig/StorageMultisigIsm.sol/StorageMessageIdMultisigIsmFactory__factory.js +1 -1
  154. package/dist/factories/contracts/isms/multisig/StorageMultisigIsm.sol/StorageMessageIdMultisigIsm__factory.d.ts +1 -1
  155. package/dist/factories/contracts/isms/multisig/StorageMultisigIsm.sol/StorageMessageIdMultisigIsm__factory.js +1 -1
  156. package/dist/factories/contracts/isms/multisig/ValidatorAnnounce__factory.d.ts +1 -1
  157. package/dist/factories/contracts/isms/multisig/ValidatorAnnounce__factory.js +1 -1
  158. package/dist/factories/contracts/isms/multisig/WeightedMultisigIsm.sol/StaticMerkleRootWeightedMultisigIsmFactory__factory.d.ts +1 -1
  159. package/dist/factories/contracts/isms/multisig/WeightedMultisigIsm.sol/StaticMerkleRootWeightedMultisigIsmFactory__factory.js +1 -1
  160. package/dist/factories/contracts/isms/multisig/WeightedMultisigIsm.sol/StaticMerkleRootWeightedMultisigIsm__factory.d.ts +1 -1
  161. package/dist/factories/contracts/isms/multisig/WeightedMultisigIsm.sol/StaticMerkleRootWeightedMultisigIsm__factory.js +1 -1
  162. package/dist/factories/contracts/isms/multisig/WeightedMultisigIsm.sol/StaticMessageIdWeightedMultisigIsmFactory__factory.d.ts +1 -1
  163. package/dist/factories/contracts/isms/multisig/WeightedMultisigIsm.sol/StaticMessageIdWeightedMultisigIsmFactory__factory.js +1 -1
  164. package/dist/factories/contracts/isms/multisig/WeightedMultisigIsm.sol/StaticMessageIdWeightedMultisigIsm__factory.d.ts +1 -1
  165. package/dist/factories/contracts/isms/multisig/WeightedMultisigIsm.sol/StaticMessageIdWeightedMultisigIsm__factory.js +1 -1
  166. package/dist/factories/contracts/isms/routing/DefaultFallbackRoutingIsm__factory.d.ts +1 -1
  167. package/dist/factories/contracts/isms/routing/DefaultFallbackRoutingIsm__factory.js +1 -1
  168. package/dist/factories/contracts/isms/routing/DomainRoutingIsmFactory.sol/DomainRoutingIsmFactory__factory.d.ts +1 -1
  169. package/dist/factories/contracts/isms/routing/DomainRoutingIsmFactory.sol/DomainRoutingIsmFactory__factory.js +1 -1
  170. package/dist/factories/contracts/isms/routing/DomainRoutingIsm__factory.d.ts +1 -1
  171. package/dist/factories/contracts/isms/routing/DomainRoutingIsm__factory.js +1 -1
  172. package/dist/factories/contracts/isms/routing/InterchainAccountIsm__factory.d.ts +1 -1
  173. package/dist/factories/contracts/isms/routing/InterchainAccountIsm__factory.js +1 -1
  174. package/dist/factories/contracts/isms/warp-route/AmountRoutingIsm__factory.d.ts +1 -1
  175. package/dist/factories/contracts/isms/warp-route/AmountRoutingIsm__factory.js +1 -1
  176. package/dist/factories/contracts/isms/warp-route/RateLimitedIsm__factory.d.ts +1 -1
  177. package/dist/factories/contracts/isms/warp-route/RateLimitedIsm__factory.js +1 -1
  178. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.d.ts +1 -1
  179. package/dist/factories/contracts/middleware/InterchainAccountRouter__factory.js +1 -1
  180. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.d.ts +1 -1
  181. package/dist/factories/contracts/middleware/InterchainQueryRouter__factory.js +1 -1
  182. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.d.ts +1 -1
  183. package/dist/factories/contracts/middleware/liquidity-layer/LiquidityLayerRouter__factory.js +1 -1
  184. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.d.ts +1 -1
  185. package/dist/factories/contracts/middleware/liquidity-layer/adapters/CircleBridgeAdapter__factory.js +1 -1
  186. package/dist/factories/contracts/middleware/liquidity-layer/adapters/PortalAdapter__factory.d.ts +1 -1
  187. package/dist/factories/contracts/middleware/liquidity-layer/adapters/PortalAdapter__factory.js +1 -1
  188. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.d.ts +1 -1
  189. package/dist/factories/contracts/mock/MockHyperlaneEnvironment__factory.js +1 -1
  190. package/dist/factories/contracts/mock/MockMailbox__factory.d.ts +1 -1
  191. package/dist/factories/contracts/mock/MockMailbox__factory.js +1 -1
  192. package/dist/factories/contracts/test/TestGasRouter__factory.d.ts +1 -1
  193. package/dist/factories/contracts/test/TestGasRouter__factory.js +1 -1
  194. package/dist/factories/contracts/test/TestInterchainGasPaymaster__factory.d.ts +1 -1
  195. package/dist/factories/contracts/test/TestInterchainGasPaymaster__factory.js +1 -1
  196. package/dist/factories/contracts/test/TestMailbox__factory.d.ts +1 -1
  197. package/dist/factories/contracts/test/TestMailbox__factory.js +1 -1
  198. package/dist/factories/contracts/test/TestMerkleTreeHook__factory.d.ts +1 -1
  199. package/dist/factories/contracts/test/TestMerkleTreeHook__factory.js +1 -1
  200. package/dist/factories/contracts/test/TestPostDispatchHook__factory.d.ts +1 -1
  201. package/dist/factories/contracts/test/TestPostDispatchHook__factory.js +1 -1
  202. package/dist/factories/contracts/test/TestQuerySender__factory.d.ts +1 -1
  203. package/dist/factories/contracts/test/TestQuerySender__factory.js +1 -1
  204. package/dist/factories/contracts/test/TestQuery__factory.d.ts +1 -1
  205. package/dist/factories/contracts/test/TestQuery__factory.js +1 -1
  206. package/dist/factories/contracts/test/TestRemoteChallenger__factory.d.ts +1 -1
  207. package/dist/factories/contracts/test/TestRemoteChallenger__factory.js +1 -1
  208. package/dist/factories/contracts/test/TestRouter__factory.d.ts +1 -1
  209. package/dist/factories/contracts/test/TestRouter__factory.js +1 -1
  210. package/dist/factories/contracts/test/TestSendReceiver__factory.d.ts +1 -1
  211. package/dist/factories/contracts/test/TestSendReceiver__factory.js +1 -1
  212. package/dist/factories/contracts/test/avs/TestHyperlaneServiceManager__factory.d.ts +1 -1
  213. package/dist/factories/contracts/test/avs/TestHyperlaneServiceManager__factory.js +1 -1
  214. package/dist/factories/contracts/token/HypERC20Collateral__factory.d.ts +18 -4
  215. package/dist/factories/contracts/token/HypERC20Collateral__factory.d.ts.map +1 -1
  216. package/dist/factories/contracts/token/HypERC20Collateral__factory.js +24 -6
  217. package/dist/factories/contracts/token/HypERC20Collateral__factory.js.map +1 -1
  218. package/dist/factories/contracts/token/HypERC20__factory.d.ts +17 -3
  219. package/dist/factories/contracts/token/HypERC20__factory.d.ts.map +1 -1
  220. package/dist/factories/contracts/token/HypERC20__factory.js +23 -5
  221. package/dist/factories/contracts/token/HypERC20__factory.js.map +1 -1
  222. package/dist/factories/contracts/token/HypERC721Collateral__factory.d.ts +1 -1
  223. package/dist/factories/contracts/token/HypERC721Collateral__factory.d.ts.map +1 -1
  224. package/dist/factories/contracts/token/HypERC721Collateral__factory.js +1 -1
  225. package/dist/factories/contracts/token/HypERC721Collateral__factory.js.map +1 -1
  226. package/dist/factories/contracts/token/HypERC721__factory.d.ts +1 -1
  227. package/dist/factories/contracts/token/HypERC721__factory.d.ts.map +1 -1
  228. package/dist/factories/contracts/token/HypERC721__factory.js +1 -1
  229. package/dist/factories/contracts/token/HypERC721__factory.js.map +1 -1
  230. package/dist/factories/contracts/token/HypNative__factory.d.ts +18 -4
  231. package/dist/factories/contracts/token/HypNative__factory.d.ts.map +1 -1
  232. package/dist/factories/contracts/token/HypNative__factory.js +24 -6
  233. package/dist/factories/contracts/token/HypNative__factory.js.map +1 -1
  234. package/dist/factories/contracts/token/extensions/FastHypERC20Collateral__factory.d.ts +18 -4
  235. package/dist/factories/contracts/token/extensions/FastHypERC20Collateral__factory.d.ts.map +1 -1
  236. package/dist/factories/contracts/token/extensions/FastHypERC20Collateral__factory.js +24 -6
  237. package/dist/factories/contracts/token/extensions/FastHypERC20Collateral__factory.js.map +1 -1
  238. package/dist/factories/contracts/token/extensions/FastHypERC20__factory.d.ts +17 -3
  239. package/dist/factories/contracts/token/extensions/FastHypERC20__factory.d.ts.map +1 -1
  240. package/dist/factories/contracts/token/extensions/FastHypERC20__factory.js +23 -5
  241. package/dist/factories/contracts/token/extensions/FastHypERC20__factory.js.map +1 -1
  242. package/dist/factories/contracts/token/extensions/HypERC4626Collateral__factory.d.ts +18 -4
  243. package/dist/factories/contracts/token/extensions/HypERC4626Collateral__factory.d.ts.map +1 -1
  244. package/dist/factories/contracts/token/extensions/HypERC4626Collateral__factory.js +24 -6
  245. package/dist/factories/contracts/token/extensions/HypERC4626Collateral__factory.js.map +1 -1
  246. package/dist/factories/contracts/token/extensions/HypERC4626OwnerCollateral__factory.d.ts +18 -4
  247. package/dist/factories/contracts/token/extensions/HypERC4626OwnerCollateral__factory.d.ts.map +1 -1
  248. package/dist/factories/contracts/token/extensions/HypERC4626OwnerCollateral__factory.js +24 -6
  249. package/dist/factories/contracts/token/extensions/HypERC4626OwnerCollateral__factory.js.map +1 -1
  250. package/dist/factories/contracts/token/extensions/HypERC4626__factory.d.ts +17 -3
  251. package/dist/factories/contracts/token/extensions/HypERC4626__factory.d.ts.map +1 -1
  252. package/dist/factories/contracts/token/extensions/HypERC4626__factory.js +23 -5
  253. package/dist/factories/contracts/token/extensions/HypERC4626__factory.js.map +1 -1
  254. package/dist/factories/contracts/token/extensions/HypERC721URICollateral__factory.d.ts +1 -1
  255. package/dist/factories/contracts/token/extensions/HypERC721URICollateral__factory.d.ts.map +1 -1
  256. package/dist/factories/contracts/token/extensions/HypERC721URICollateral__factory.js +1 -1
  257. package/dist/factories/contracts/token/extensions/HypERC721URICollateral__factory.js.map +1 -1
  258. package/dist/factories/contracts/token/extensions/HypERC721URIStorage__factory.d.ts +1 -1
  259. package/dist/factories/contracts/token/extensions/HypERC721URIStorage__factory.d.ts.map +1 -1
  260. package/dist/factories/contracts/token/extensions/HypERC721URIStorage__factory.js +1 -1
  261. package/dist/factories/contracts/token/extensions/HypERC721URIStorage__factory.js.map +1 -1
  262. package/dist/factories/contracts/token/extensions/HypFiatToken__factory.d.ts +18 -4
  263. package/dist/factories/contracts/token/extensions/HypFiatToken__factory.d.ts.map +1 -1
  264. package/dist/factories/contracts/token/extensions/HypFiatToken__factory.js +24 -6
  265. package/dist/factories/contracts/token/extensions/HypFiatToken__factory.js.map +1 -1
  266. package/dist/factories/contracts/token/extensions/HypXERC20Lockbox__factory.d.ts +18 -4
  267. package/dist/factories/contracts/token/extensions/HypXERC20Lockbox__factory.d.ts.map +1 -1
  268. package/dist/factories/contracts/token/extensions/HypXERC20Lockbox__factory.js +24 -6
  269. package/dist/factories/contracts/token/extensions/HypXERC20Lockbox__factory.js.map +1 -1
  270. package/dist/factories/contracts/token/extensions/HypXERC20__factory.d.ts +18 -4
  271. package/dist/factories/contracts/token/extensions/HypXERC20__factory.d.ts.map +1 -1
  272. package/dist/factories/contracts/token/extensions/HypXERC20__factory.js +24 -6
  273. package/dist/factories/contracts/token/extensions/HypXERC20__factory.js.map +1 -1
  274. package/dist/factories/contracts/token/extensions/WHypERC4626__factory.d.ts +1 -1
  275. package/dist/factories/contracts/token/extensions/WHypERC4626__factory.js +1 -1
  276. package/dist/factories/contracts/token/extensions/index.d.ts +0 -1
  277. package/dist/factories/contracts/token/extensions/index.d.ts.map +1 -1
  278. package/dist/factories/contracts/token/extensions/index.js +0 -1
  279. package/dist/factories/contracts/token/extensions/index.js.map +1 -1
  280. package/dist/factories/contracts/token/libs/FastTokenRouter__factory.d.ts +10 -0
  281. package/dist/factories/contracts/token/libs/FastTokenRouter__factory.d.ts.map +1 -1
  282. package/dist/factories/contracts/token/libs/FastTokenRouter__factory.js +13 -0
  283. package/dist/factories/contracts/token/libs/FastTokenRouter__factory.js.map +1 -1
  284. package/dist/factories/contracts/token/libs/FungibleTokenRouter__factory.d.ts +432 -0
  285. package/dist/factories/contracts/token/libs/FungibleTokenRouter__factory.d.ts.map +1 -0
  286. package/dist/factories/contracts/token/libs/FungibleTokenRouter__factory.js +565 -0
  287. package/dist/factories/contracts/token/libs/FungibleTokenRouter__factory.js.map +1 -0
  288. package/dist/factories/contracts/token/libs/index.d.ts +1 -0
  289. package/dist/factories/contracts/token/libs/index.d.ts.map +1 -1
  290. package/dist/factories/contracts/token/libs/index.js +1 -0
  291. package/dist/factories/contracts/token/libs/index.js.map +1 -1
  292. package/dist/index.d.ts +2 -2
  293. package/dist/index.d.ts.map +1 -1
  294. package/dist/index.js +1 -1
  295. package/dist/index.js.map +1 -1
  296. package/package.json +2 -2
  297. package/contracts/token/extensions/HypNativeScaled.sol +0 -78
  298. package/dist/contracts/token/extensions/HypNativeScaled.d.ts.map +0 -1
  299. package/dist/contracts/token/extensions/HypNativeScaled.js +0 -2
  300. package/dist/contracts/token/extensions/HypNativeScaled.js.map +0 -1
  301. package/dist/factories/contracts/token/extensions/HypNativeScaled__factory.d.ts +0 -492
  302. package/dist/factories/contracts/token/extensions/HypNativeScaled__factory.d.ts.map +0 -1
  303. package/dist/factories/contracts/token/extensions/HypNativeScaled__factory.js +0 -650
  304. package/dist/factories/contracts/token/extensions/HypNativeScaled__factory.js.map +0 -1
@@ -7,5 +7,5 @@ pragma solidity >=0.6.11;
7
7
  **/
8
8
  abstract contract PackageVersioned {
9
9
  // GENERATED CODE - DO NOT EDIT
10
- string public constant PACKAGE_VERSION = "5.12.0";
10
+ string public constant PACKAGE_VERSION = "6.0.0";
11
11
  }
@@ -13,11 +13,23 @@ pragma solidity >=0.8.0;
13
13
  @@@@@@@@@ @@@@@@@@@
14
14
  @@@@@@@@@ @@@@@@@@*/
15
15
 
16
+ // ============ Internal Imports ============
17
+ import {StandardHookMetadata} from "../libs/StandardHookMetadata.sol";
18
+ import {Message} from "../../libs/Message.sol";
19
+ import {TypeCasts} from "../../libs/TypeCasts.sol";
16
20
  import {AbstractPostDispatchHook} from "../libs/AbstractPostDispatchHook.sol";
17
21
  import {IPostDispatchHook} from "../../interfaces/hooks/IPostDispatchHook.sol";
18
22
  import {MetaProxy} from "../../libs/MetaProxy.sol";
19
23
 
24
+ // ============ External Imports ============
25
+ import {Address} from "@openzeppelin/contracts/utils/Address.sol";
26
+
20
27
  contract StaticAggregationHook is AbstractPostDispatchHook {
28
+ using Message for bytes;
29
+ using TypeCasts for bytes32;
30
+ using StandardHookMetadata for bytes;
31
+ using Address for address payable;
32
+
21
33
  // ============ External functions ============
22
34
 
23
35
  /// @inheritdoc IPostDispatchHook
@@ -32,16 +44,29 @@ contract StaticAggregationHook is AbstractPostDispatchHook {
32
44
  ) internal override {
33
45
  address[] memory _hooks = hooks(message);
34
46
  uint256 count = _hooks.length;
47
+ uint256 valueRemaining = msg.value;
35
48
  for (uint256 i = 0; i < count; i++) {
36
49
  uint256 quote = IPostDispatchHook(_hooks[i]).quoteDispatch(
37
50
  metadata,
38
51
  message
39
52
  );
53
+ require(
54
+ valueRemaining >= quote,
55
+ "StaticAggregationHook: insufficient value"
56
+ );
40
57
 
41
58
  IPostDispatchHook(_hooks[i]).postDispatch{value: quote}(
42
59
  metadata,
43
60
  message
44
61
  );
62
+
63
+ valueRemaining -= quote;
64
+ }
65
+
66
+ if (valueRemaining > 0) {
67
+ payable(metadata.refundAddress(message.senderAddress())).sendValue(
68
+ valueRemaining
69
+ );
45
70
  }
46
71
  }
47
72
 
@@ -1,18 +1,47 @@
1
- // SPDX-License-Identifier: MIT
1
+ // SPDX-License-Identifier: MIT OR Apache-2.0
2
2
  pragma solidity >=0.8.0;
3
3
 
4
+ /*@@@@@@@ @@@@@@@@@
5
+ @@@@@@@@@ @@@@@@@@@
6
+ @@@@@@@@@ @@@@@@@@@
7
+ @@@@@@@@@ @@@@@@@@@
8
+ @@@@@@@@@@@@@@@@@@@@@@@@@
9
+ @@@@@ HYPERLANE @@@@@@@
10
+ @@@@@@@@@@@@@@@@@@@@@@@@@
11
+ @@@@@@@@@ @@@@@@@@@
12
+ @@@@@@@@@ @@@@@@@@@
13
+ @@@@@@@@@ @@@@@@@@@
14
+ @@@@@@@@@ @@@@@@@@*/
15
+
16
+ // ============ Internal Imports ============
4
17
  import {MailboxClient} from "contracts/client/MailboxClient.sol";
5
18
  import {IPostDispatchHook} from "contracts/interfaces/hooks/IPostDispatchHook.sol";
6
19
  import {Message} from "contracts/libs/Message.sol";
7
20
  import {TokenMessage} from "contracts/token/libs/TokenMessage.sol";
8
21
  import {RateLimited} from "contracts/libs/RateLimited.sol";
22
+ import {AbstractPostDispatchHook} from "../libs/AbstractPostDispatchHook.sol";
9
23
 
10
- contract RateLimitedHook is IPostDispatchHook, MailboxClient, RateLimited {
24
+ /*
25
+ * @title RateLimitedHook
26
+ * @author Abacus Works
27
+ * @notice A hook that rate limits the volume of token transfers to a destination using a bucket fill algorithm
28
+ */
29
+ contract RateLimitedHook is
30
+ AbstractPostDispatchHook,
31
+ MailboxClient,
32
+ RateLimited
33
+ {
11
34
  using Message for bytes;
12
35
  using TokenMessage for bytes;
13
36
 
37
+ /// @notice The address that is authorized to call this hook
38
+ address public immutable sender;
39
+ /// @notice A mapping of message IDs to whether they have been validated
14
40
  mapping(bytes32 messageId => bool validated) public messageValidated;
15
41
 
42
+ // ============ Modifiers ============
43
+
44
+ /// @notice Ensures that the message has not been validated yet
16
45
  modifier validateMessageOnce(bytes calldata _message) {
17
46
  bytes32 messageId = _message.id();
18
47
  require(!messageValidated[messageId], "MessageAlreadyValidated");
@@ -20,40 +49,48 @@ contract RateLimitedHook is IPostDispatchHook, MailboxClient, RateLimited {
20
49
  messageValidated[messageId] = true;
21
50
  }
22
51
 
52
+ /// @notice Ensures that the message was sent by the authorized sender
53
+ modifier onlySender(bytes calldata _message) {
54
+ require(_message.senderAddress() == sender, "InvalidSender");
55
+ _;
56
+ }
57
+
58
+ // ============ Constructor ============
59
+
23
60
  constructor(
24
61
  address _mailbox,
25
- uint256 _maxCapacity
26
- ) MailboxClient(_mailbox) RateLimited(_maxCapacity) {}
62
+ uint256 _maxCapacity,
63
+ address _sender
64
+ ) MailboxClient(_mailbox) RateLimited(_maxCapacity) {
65
+ require(_sender != address(0), "InvalidSender");
66
+ sender = _sender;
67
+ }
68
+
69
+ // ============ External Functions ============
27
70
 
28
71
  /// @inheritdoc IPostDispatchHook
29
72
  function hookType() external pure returns (uint8) {
30
73
  return uint8(IPostDispatchHook.Types.RATE_LIMITED);
31
74
  }
32
75
 
33
- /// @inheritdoc IPostDispatchHook
34
- function supportsMetadata(bytes calldata) external pure returns (bool) {
35
- return false;
36
- }
76
+ // ============ Internal Functions ============
37
77
 
38
- /**
39
- * Verify a message, rate limit, and increment the sender's limit.
40
- * @dev ensures that this gets called by the Mailbox
41
- */
42
- function postDispatch(
78
+ /// @inheritdoc AbstractPostDispatchHook
79
+ function _postDispatch(
43
80
  bytes calldata,
44
81
  bytes calldata _message
45
- ) external payable validateMessageOnce(_message) {
82
+ ) internal override onlySender(_message) validateMessageOnce(_message) {
46
83
  require(_isLatestDispatched(_message.id()), "InvalidDispatchedMessage");
47
84
 
48
85
  uint256 newAmount = _message.body().amount();
49
86
  validateAndConsumeFilledLevel(newAmount);
50
87
  }
51
88
 
52
- /// @inheritdoc IPostDispatchHook
53
- function quoteDispatch(
89
+ /// @inheritdoc AbstractPostDispatchHook
90
+ function _quoteDispatch(
54
91
  bytes calldata,
55
92
  bytes calldata
56
- ) external pure returns (uint256) {
93
+ ) internal pure override returns (uint256) {
57
94
  return 0;
58
95
  }
59
96
  }
@@ -2,6 +2,7 @@
2
2
  pragma solidity >=0.8.0;
3
3
 
4
4
  import {TokenRouter} from "./libs/TokenRouter.sol";
5
+ import {FungibleTokenRouter} from "./libs/FungibleTokenRouter.sol";
5
6
 
6
7
  import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol";
7
8
 
@@ -10,10 +11,14 @@ import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/
10
11
  * @author Abacus Works
11
12
  * @dev Supply on each chain is not constant but the aggregate supply across all chains is.
12
13
  */
13
- contract HypERC20 is ERC20Upgradeable, TokenRouter {
14
+ contract HypERC20 is ERC20Upgradeable, FungibleTokenRouter {
14
15
  uint8 private immutable _decimals;
15
16
 
16
- constructor(uint8 __decimals, address _mailbox) TokenRouter(_mailbox) {
17
+ constructor(
18
+ uint8 __decimals,
19
+ uint256 _scale,
20
+ address _mailbox
21
+ ) FungibleTokenRouter(_scale, _mailbox) {
17
22
  _decimals = __decimals;
18
23
  }
19
24
 
@@ -15,6 +15,7 @@ pragma solidity >=0.8.0;
15
15
 
16
16
  // ============ Internal Imports ============
17
17
  import {TokenRouter} from "./libs/TokenRouter.sol";
18
+ import {FungibleTokenRouter} from "./libs/FungibleTokenRouter.sol";
18
19
  import {TokenMessage} from "./libs/TokenMessage.sol";
19
20
  import {MailboxClient} from "../client/MailboxClient.sol";
20
21
 
@@ -27,7 +28,7 @@ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
27
28
  * @title Hyperlane ERC20 Token Collateral that wraps an existing ERC20 with remote transfer functionality.
28
29
  * @author Abacus Works
29
30
  */
30
- contract HypERC20Collateral is TokenRouter {
31
+ contract HypERC20Collateral is FungibleTokenRouter {
31
32
  using SafeERC20 for IERC20;
32
33
 
33
34
  IERC20 public immutable wrappedToken;
@@ -36,7 +37,11 @@ contract HypERC20Collateral is TokenRouter {
36
37
  * @notice Constructor
37
38
  * @param erc20 Address of the token to keep as collateral
38
39
  */
39
- constructor(address erc20, address _mailbox) TokenRouter(_mailbox) {
40
+ constructor(
41
+ address erc20,
42
+ uint256 _scale,
43
+ address _mailbox
44
+ ) FungibleTokenRouter(_scale, _mailbox) {
40
45
  require(Address.isContract(erc20), "HypERC20Collateral: invalid token");
41
46
  wrappedToken = IERC20(erc20);
42
47
  }
@@ -2,6 +2,7 @@
2
2
  pragma solidity >=0.8.0;
3
3
 
4
4
  import {TokenRouter} from "./libs/TokenRouter.sol";
5
+ import {FungibleTokenRouter} from "./libs/FungibleTokenRouter.sol";
5
6
  import {TokenMessage} from "./libs/TokenMessage.sol";
6
7
  import {Address} from "@openzeppelin/contracts/utils/Address.sol";
7
8
 
@@ -10,7 +11,7 @@ import {Address} from "@openzeppelin/contracts/utils/Address.sol";
10
11
  * @author Abacus Works
11
12
  * @dev Supply on each chain is not constant but the aggregate supply across all chains is.
12
13
  */
13
- contract HypNative is TokenRouter {
14
+ contract HypNative is FungibleTokenRouter {
14
15
  /**
15
16
  * @dev Emitted when native tokens are donated to the contract.
16
17
  * @param sender The address of the sender.
@@ -18,7 +19,10 @@ contract HypNative is TokenRouter {
18
19
  */
19
20
  event Donation(address indexed sender, uint256 amount);
20
21
 
21
- constructor(address _mailbox) TokenRouter(_mailbox) {}
22
+ constructor(
23
+ uint256 _scale,
24
+ address _mailbox
25
+ ) FungibleTokenRouter(_scale, _mailbox) {}
22
26
 
23
27
  /**
24
28
  * @notice Initializes the Hyperlane router
@@ -15,8 +15,9 @@ import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/
15
15
  contract FastHypERC20 is FastTokenRouter, HypERC20 {
16
16
  constructor(
17
17
  uint8 __decimals,
18
+ uint256 _scale,
18
19
  address _mailbox
19
- ) HypERC20(__decimals, _mailbox) {}
20
+ ) HypERC20(__decimals, _scale, _mailbox) {}
20
21
 
21
22
  /**
22
23
  * @dev delegates transfer logic to `_transferTo`.
@@ -21,8 +21,9 @@ contract FastHypERC20Collateral is FastTokenRouter, HypERC20Collateral {
21
21
  */
22
22
  constructor(
23
23
  address erc20,
24
+ uint256 _scale,
24
25
  address _mailbox
25
- ) HypERC20Collateral(erc20, _mailbox) {}
26
+ ) HypERC20Collateral(erc20, _scale, _mailbox) {}
26
27
 
27
28
  /**
28
29
  * @dev delegates transfer logic to `_transferTo`.
@@ -44,9 +44,10 @@ contract HypERC4626 is HypERC20 {
44
44
 
45
45
  constructor(
46
46
  uint8 _decimals,
47
+ uint256 _scale,
47
48
  address _mailbox,
48
49
  uint32 _collateralDomain
49
- ) HypERC20(_decimals, _mailbox) {
50
+ ) HypERC20(_decimals, _scale, _mailbox) {
50
51
  collateralDomain = _collateralDomain;
51
52
  exchangeRate = 1e10;
52
53
  _disableInitializers();
@@ -42,8 +42,9 @@ contract HypERC4626Collateral is HypERC20Collateral {
42
42
 
43
43
  constructor(
44
44
  ERC4626 _vault,
45
+ uint256 _scale,
45
46
  address _mailbox
46
- ) HypERC20Collateral(_vault.asset(), _mailbox) {
47
+ ) HypERC20Collateral(_vault.asset(), _scale, _mailbox) {
47
48
  vault = _vault;
48
49
  }
49
50
 
@@ -37,8 +37,9 @@ contract HypERC4626OwnerCollateral is HypERC20Collateral {
37
37
 
38
38
  constructor(
39
39
  ERC4626 _vault,
40
+ uint256 _scale,
40
41
  address _mailbox
41
- ) HypERC20Collateral(_vault.asset(), _mailbox) {
42
+ ) HypERC20Collateral(_vault.asset(), _scale, _mailbox) {
42
43
  vault = _vault;
43
44
  }
44
45
 
@@ -8,8 +8,9 @@ import {HypERC20Collateral} from "../HypERC20Collateral.sol";
8
8
  contract HypFiatToken is HypERC20Collateral {
9
9
  constructor(
10
10
  address _fiatToken,
11
+ uint256 _scale,
11
12
  address _mailbox
12
- ) HypERC20Collateral(_fiatToken, _mailbox) {}
13
+ ) HypERC20Collateral(_fiatToken, _scale, _mailbox) {}
13
14
 
14
15
  function _transferFromSender(
15
16
  uint256 _amount
@@ -7,8 +7,9 @@ import {HypERC20Collateral} from "../HypERC20Collateral.sol";
7
7
  contract HypXERC20 is HypERC20Collateral {
8
8
  constructor(
9
9
  address _xerc20,
10
+ uint256 _scale,
10
11
  address _mailbox
11
- ) HypERC20Collateral(_xerc20, _mailbox) {
12
+ ) HypERC20Collateral(_xerc20, _scale, _mailbox) {
12
13
  _disableInitializers();
13
14
  }
14
15
 
@@ -13,8 +13,15 @@ contract HypXERC20Lockbox is HypERC20Collateral {
13
13
 
14
14
  constructor(
15
15
  address _lockbox,
16
+ uint256 _scale,
16
17
  address _mailbox
17
- ) HypERC20Collateral(address(IXERC20Lockbox(_lockbox).ERC20()), _mailbox) {
18
+ )
19
+ HypERC20Collateral(
20
+ address(IXERC20Lockbox(_lockbox).ERC20()),
21
+ _scale,
22
+ _mailbox
23
+ )
24
+ {
18
25
  lockbox = IXERC20Lockbox(_lockbox);
19
26
  xERC20 = lockbox.XERC20();
20
27
  approveLockbox();
@@ -5,12 +5,13 @@ import {TypeCasts} from "../../libs/TypeCasts.sol";
5
5
 
6
6
  import {TokenMessage} from "./TokenMessage.sol";
7
7
  import {TokenRouter} from "./TokenRouter.sol";
8
+ import {FungibleTokenRouter} from "./FungibleTokenRouter.sol";
8
9
 
9
10
  /**
10
11
  * @title Common FastTokenRouter functionality for ERC20 Tokens with remote transfer support.
11
12
  * @author Abacus Works
12
13
  */
13
- abstract contract FastTokenRouter is TokenRouter {
14
+ abstract contract FastTokenRouter is FungibleTokenRouter {
14
15
  using TypeCasts for bytes32;
15
16
  using TokenMessage for bytes;
16
17
 
@@ -0,0 +1,32 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity >=0.8.0;
3
+
4
+ import {TokenRouter} from "./TokenRouter.sol";
5
+
6
+ abstract contract FungibleTokenRouter is TokenRouter {
7
+ uint256 public immutable scale;
8
+
9
+ constructor(uint256 _scale, address _mailbox) TokenRouter(_mailbox) {
10
+ scale = _scale;
11
+ }
12
+
13
+ /**
14
+ * @dev Scales local amount to message amount (up by scale factor).
15
+ * @inheritdoc TokenRouter
16
+ */
17
+ function _outboundAmount(
18
+ uint256 _localAmount
19
+ ) internal view virtual override returns (uint256 _messageAmount) {
20
+ _messageAmount = _localAmount * scale;
21
+ }
22
+
23
+ /**
24
+ * @dev Scales message amount to local amount (down by scale factor).
25
+ * @inheritdoc TokenRouter
26
+ */
27
+ function _inboundAmount(
28
+ uint256 _messageAmount
29
+ ) internal view virtual override returns (uint256 _localAmount) {
30
+ _localAmount = _messageAmount / scale;
31
+ }
32
+ }
@@ -116,9 +116,11 @@ abstract contract TokenRouter is GasRouter {
116
116
  address _hook
117
117
  ) internal virtual returns (bytes32 messageId) {
118
118
  bytes memory _tokenMetadata = _transferFromSender(_amountOrId);
119
+
120
+ uint256 outboundAmount = _outboundAmount(_amountOrId);
119
121
  bytes memory _tokenMessage = TokenMessage.format(
120
122
  _recipient,
121
- _amountOrId,
123
+ outboundAmount,
122
124
  _tokenMetadata
123
125
  );
124
126
 
@@ -130,7 +132,29 @@ abstract contract TokenRouter is GasRouter {
130
132
  _hook
131
133
  );
132
134
 
133
- emit SentTransferRemote(_destination, _recipient, _amountOrId);
135
+ emit SentTransferRemote(_destination, _recipient, outboundAmount);
136
+ }
137
+
138
+ /**
139
+ * @dev Should return the amount of tokens to be encoded in the message amount (eg for scaling `_localAmount`).
140
+ * @param _localAmount The amount of tokens transferred on this chain in local denomination.
141
+ * @return _messageAmount The amount of tokens to be encoded in the message body.
142
+ */
143
+ function _outboundAmount(
144
+ uint256 _localAmount
145
+ ) internal view virtual returns (uint256 _messageAmount) {
146
+ _messageAmount = _localAmount;
147
+ }
148
+
149
+ /**
150
+ * @dev Should return the amount of tokens to be decoded from the message amount.
151
+ * @param _messageAmount The amount of tokens received in the message body.
152
+ * @return _localAmount The amount of tokens to be transferred on this chain in local denomination.
153
+ */
154
+ function _inboundAmount(
155
+ uint256 _messageAmount
156
+ ) internal view virtual returns (uint256 _localAmount) {
157
+ _localAmount = _messageAmount;
134
158
  }
135
159
 
136
160
  /**
@@ -179,7 +203,11 @@ abstract contract TokenRouter is GasRouter {
179
203
  bytes32 recipient = _message.recipient();
180
204
  uint256 amount = _message.amount();
181
205
  bytes calldata metadata = _message.metadata();
182
- _transferTo(recipient.bytes32ToAddress(), amount, metadata);
206
+ _transferTo(
207
+ recipient.bytes32ToAddress(),
208
+ _inboundAmount(amount),
209
+ metadata
210
+ );
183
211
  emit ReceivedTransferRemote(_origin, recipient, amount);
184
212
  }
185
213