@1inch/solidity-utils 3.8.3 → 4.1.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 (280) hide show
  1. package/README.md +9 -208
  2. package/contracts/interfaces/ICreate3Deployer.sol +16 -0
  3. package/contracts/interfaces/IDaiLikePermit.sol +13 -0
  4. package/contracts/interfaces/IERC20MetadataUppercase.sol +12 -0
  5. package/contracts/interfaces/IERC7597Permit.sol +13 -0
  6. package/contracts/interfaces/IPermit2.sol +45 -12
  7. package/contracts/interfaces/IWETH.sol +17 -0
  8. package/contracts/libraries/AddressArray.sol +190 -61
  9. package/contracts/libraries/AddressLib.sol +2 -1
  10. package/contracts/libraries/AddressSet.sol +82 -18
  11. package/contracts/libraries/BySigTraits.sol +46 -0
  12. package/contracts/libraries/BytesMemory.sol +2 -1
  13. package/contracts/libraries/BytesStorage.sol +2 -1
  14. package/contracts/libraries/ECDSA.sol +111 -0
  15. package/contracts/libraries/RevertReasonForwarder.sol +13 -3
  16. package/contracts/libraries/RevertReasonParser.sol +11 -2
  17. package/contracts/libraries/SafeERC20.sol +7 -3
  18. package/contracts/libraries/StringUtil.sol +21 -3
  19. package/contracts/libraries/UniERC20.sol +57 -12
  20. package/contracts/mocks/ERC20PermitMock.sol +12 -0
  21. package/contracts/mocks/SelfdestructEthSenderMock.sol +17 -0
  22. package/contracts/mocks/TokenCustomDecimalsMock.sol +25 -4
  23. package/contracts/mocks/TokenMock.sol +19 -0
  24. package/dist/hardhat-setup/networks.d.ts +23 -0
  25. package/dist/hardhat-setup/networks.js +22 -0
  26. package/dist/hardhat-setup/networks.js.map +1 -1
  27. package/dist/src/expect.d.ts +12 -0
  28. package/dist/src/expect.js +12 -0
  29. package/dist/src/expect.js.map +1 -1
  30. package/dist/src/permit.d.ts +120 -1
  31. package/dist/src/permit.js +124 -8
  32. package/dist/src/permit.js.map +1 -1
  33. package/dist/src/prelude.d.ts +6 -0
  34. package/dist/src/prelude.js +6 -0
  35. package/dist/src/prelude.js.map +1 -1
  36. package/dist/src/profileEVM.d.ts +26 -0
  37. package/dist/src/profileEVM.js +30 -3
  38. package/dist/src/profileEVM.js.map +1 -1
  39. package/dist/src/utils.d.ts +79 -0
  40. package/dist/src/utils.js +92 -1
  41. package/dist/src/utils.js.map +1 -1
  42. package/dist/typechain-types/@openzeppelin/contracts/utils/Address.d.ts +20 -0
  43. package/dist/typechain-types/@openzeppelin/contracts/utils/Address.js +3 -0
  44. package/dist/typechain-types/@openzeppelin/contracts/utils/Address.js.map +1 -0
  45. package/dist/typechain-types/@openzeppelin/contracts/utils/index.d.ts +1 -0
  46. package/dist/typechain-types/contracts/index.d.ts +2 -3
  47. package/dist/typechain-types/contracts/interfaces/IERC7597Permit.d.ts +41 -0
  48. package/dist/typechain-types/contracts/interfaces/IERC7597Permit.js +3 -0
  49. package/dist/typechain-types/contracts/interfaces/IERC7597Permit.js.map +1 -0
  50. package/dist/typechain-types/contracts/interfaces/index.d.ts +1 -0
  51. package/dist/typechain-types/contracts/libraries/BySigTraits.d.ts +20 -0
  52. package/dist/typechain-types/contracts/libraries/BySigTraits.js +3 -0
  53. package/dist/typechain-types/contracts/libraries/BySigTraits.js.map +1 -0
  54. package/dist/typechain-types/contracts/libraries/index.d.ts +1 -0
  55. package/dist/typechain-types/contracts/mixins/BySig.d.ts +214 -0
  56. package/dist/typechain-types/contracts/mixins/BySig.js +3 -0
  57. package/dist/typechain-types/contracts/mixins/BySig.js.map +1 -0
  58. package/dist/typechain-types/contracts/{EthReceiver.d.ts → mixins/EthReceiver.d.ts} +1 -1
  59. package/dist/typechain-types/contracts/mixins/EthReceiver.js.map +1 -0
  60. package/dist/typechain-types/contracts/{OnlyWethReceiver.d.ts → mixins/OnlyWethReceiver.d.ts} +1 -1
  61. package/dist/typechain-types/contracts/mixins/OnlyWethReceiver.js.map +1 -0
  62. package/dist/typechain-types/contracts/{PermitAndCall.d.ts → mixins/PermitAndCall.d.ts} +1 -1
  63. package/dist/typechain-types/contracts/mixins/PermitAndCall.js.map +1 -0
  64. package/dist/typechain-types/contracts/mixins/SelfdestructEthSender.d.ts +29 -0
  65. package/dist/typechain-types/contracts/mixins/SelfdestructEthSender.js +3 -0
  66. package/dist/typechain-types/contracts/mixins/SelfdestructEthSender.js.map +1 -0
  67. package/dist/typechain-types/contracts/mixins/index.d.ts +5 -0
  68. package/dist/typechain-types/contracts/mixins/index.js +3 -0
  69. package/dist/typechain-types/contracts/mixins/index.js.map +1 -0
  70. package/dist/typechain-types/contracts/mocks/SelfdestructEthSenderMock.d.ts +37 -0
  71. package/dist/typechain-types/contracts/mocks/SelfdestructEthSenderMock.js +3 -0
  72. package/dist/typechain-types/contracts/mocks/SelfdestructEthSenderMock.js.map +1 -0
  73. package/dist/typechain-types/contracts/mocks/TokenCustomDecimalsMock.d.ts +1 -5
  74. package/dist/typechain-types/contracts/mocks/index.d.ts +1 -0
  75. package/dist/typechain-types/contracts/tests/mocks/AddressSetMock.d.ts +5 -1
  76. package/dist/typechain-types/contracts/tests/mocks/BySigTraitsMock.d.ts +47 -0
  77. package/dist/typechain-types/contracts/tests/mocks/BySigTraitsMock.js +3 -0
  78. package/dist/typechain-types/contracts/tests/mocks/BySigTraitsMock.js.map +1 -0
  79. package/dist/typechain-types/contracts/tests/mocks/TokenWithBySig.d.ts +422 -0
  80. package/dist/typechain-types/contracts/tests/mocks/TokenWithBySig.js +3 -0
  81. package/dist/typechain-types/contracts/tests/mocks/TokenWithBySig.js.map +1 -0
  82. package/dist/typechain-types/contracts/tests/mocks/USDCLikePermitMock.d.ts +260 -0
  83. package/dist/typechain-types/contracts/tests/mocks/USDCLikePermitMock.js +3 -0
  84. package/dist/typechain-types/contracts/tests/mocks/USDCLikePermitMock.js.map +1 -0
  85. package/dist/typechain-types/contracts/tests/mocks/index.d.ts +3 -0
  86. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.d.ts +42 -0
  87. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.js +67 -0
  88. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.js.map +1 -0
  89. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/ShortStrings__factory.d.ts +1 -1
  90. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/ShortStrings__factory.js +1 -1
  91. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/Strings__factory.d.ts +1 -1
  92. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/Strings__factory.js +1 -1
  93. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory.d.ts +1 -1
  94. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/cryptography/ECDSA__factory.js +1 -1
  95. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/index.d.ts +1 -0
  96. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/index.js +3 -1
  97. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/index.js.map +1 -1
  98. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/math/Math__factory.d.ts +1 -1
  99. package/dist/typechain-types/factories/@openzeppelin/contracts/utils/math/Math__factory.js +1 -1
  100. package/dist/typechain-types/factories/contracts/index.d.ts +1 -3
  101. package/dist/typechain-types/factories/contracts/index.js +2 -7
  102. package/dist/typechain-types/factories/contracts/index.js.map +1 -1
  103. package/dist/typechain-types/factories/contracts/interfaces/IERC7597Permit__factory.d.ts +33 -0
  104. package/dist/typechain-types/factories/contracts/interfaces/IERC7597Permit__factory.js +53 -0
  105. package/dist/typechain-types/factories/contracts/interfaces/IERC7597Permit__factory.js.map +1 -0
  106. package/dist/typechain-types/factories/contracts/interfaces/index.d.ts +1 -0
  107. package/dist/typechain-types/factories/contracts/interfaces/index.js +3 -1
  108. package/dist/typechain-types/factories/contracts/interfaces/index.js.map +1 -1
  109. package/dist/typechain-types/factories/contracts/libraries/AddressArray__factory.d.ts +1 -1
  110. package/dist/typechain-types/factories/contracts/libraries/AddressArray__factory.js +1 -1
  111. package/dist/typechain-types/factories/contracts/libraries/BySigTraits__factory.d.ts +26 -0
  112. package/dist/typechain-types/factories/contracts/libraries/BySigTraits__factory.js +45 -0
  113. package/dist/typechain-types/factories/contracts/libraries/BySigTraits__factory.js.map +1 -0
  114. package/dist/typechain-types/factories/contracts/libraries/BytesMemory__factory.d.ts +1 -1
  115. package/dist/typechain-types/factories/contracts/libraries/BytesMemory__factory.js +1 -1
  116. package/dist/typechain-types/factories/contracts/libraries/BytesStorage__factory.d.ts +1 -1
  117. package/dist/typechain-types/factories/contracts/libraries/BytesStorage__factory.js +1 -1
  118. package/dist/typechain-types/factories/contracts/libraries/RevertReasonParser__factory.d.ts +1 -1
  119. package/dist/typechain-types/factories/contracts/libraries/RevertReasonParser__factory.js +1 -1
  120. package/dist/typechain-types/factories/contracts/libraries/SafeERC20__factory.d.ts +1 -1
  121. package/dist/typechain-types/factories/contracts/libraries/SafeERC20__factory.js +1 -1
  122. package/dist/typechain-types/factories/contracts/libraries/UniERC20__factory.d.ts +1 -1
  123. package/dist/typechain-types/factories/contracts/libraries/UniERC20__factory.js +1 -1
  124. package/dist/typechain-types/factories/contracts/libraries/index.d.ts +1 -0
  125. package/dist/typechain-types/factories/contracts/libraries/index.js +3 -1
  126. package/dist/typechain-types/factories/contracts/libraries/index.js.map +1 -1
  127. package/dist/typechain-types/factories/contracts/mixins/BySig__factory.d.ts +286 -0
  128. package/dist/typechain-types/factories/contracts/mixins/BySig__factory.js +385 -0
  129. package/dist/typechain-types/factories/contracts/mixins/BySig__factory.js.map +1 -0
  130. package/dist/typechain-types/factories/contracts/{EthReceiver__factory.d.ts → mixins/EthReceiver__factory.d.ts} +1 -1
  131. package/dist/typechain-types/factories/contracts/mixins/EthReceiver__factory.js.map +1 -0
  132. package/dist/typechain-types/factories/contracts/{OnlyWethReceiver__factory.d.ts → mixins/OnlyWethReceiver__factory.d.ts} +1 -1
  133. package/dist/typechain-types/factories/contracts/mixins/OnlyWethReceiver__factory.js.map +1 -0
  134. package/dist/typechain-types/factories/contracts/{PermitAndCall__factory.d.ts → mixins/PermitAndCall__factory.d.ts} +1 -1
  135. package/dist/typechain-types/factories/contracts/mixins/PermitAndCall__factory.js.map +1 -0
  136. package/dist/typechain-types/factories/contracts/mixins/SelfdestructEthSender__factory.d.ts +17 -0
  137. package/dist/typechain-types/factories/contracts/mixins/SelfdestructEthSender__factory.js +33 -0
  138. package/dist/typechain-types/factories/contracts/mixins/SelfdestructEthSender__factory.js.map +1 -0
  139. package/dist/typechain-types/factories/contracts/mixins/index.d.ts +5 -0
  140. package/dist/typechain-types/factories/contracts/mixins/index.js +17 -0
  141. package/dist/typechain-types/factories/contracts/mixins/index.js.map +1 -0
  142. package/dist/typechain-types/factories/contracts/mocks/ERC20PermitMock__factory.d.ts +1 -1
  143. package/dist/typechain-types/factories/contracts/mocks/ERC20PermitMock__factory.js +1 -1
  144. package/dist/typechain-types/factories/contracts/mocks/ERC20PermitMock__factory.js.map +1 -1
  145. package/dist/typechain-types/factories/contracts/mocks/SelfdestructEthSenderMock__factory.d.ts +49 -0
  146. package/dist/typechain-types/factories/contracts/mocks/SelfdestructEthSenderMock__factory.js +75 -0
  147. package/dist/typechain-types/factories/contracts/mocks/SelfdestructEthSenderMock__factory.js.map +1 -0
  148. package/dist/typechain-types/factories/contracts/mocks/TokenCustomDecimalsMock__factory.d.ts +1 -11
  149. package/dist/typechain-types/factories/contracts/mocks/TokenCustomDecimalsMock__factory.js +1 -14
  150. package/dist/typechain-types/factories/contracts/mocks/TokenCustomDecimalsMock__factory.js.map +1 -1
  151. package/dist/typechain-types/factories/contracts/mocks/TokenMock__factory.d.ts +1 -1
  152. package/dist/typechain-types/factories/contracts/mocks/TokenMock__factory.js +1 -1
  153. package/dist/typechain-types/factories/contracts/mocks/TokenMock__factory.js.map +1 -1
  154. package/dist/typechain-types/factories/contracts/mocks/index.d.ts +1 -0
  155. package/dist/typechain-types/factories/contracts/mocks/index.js +3 -1
  156. package/dist/typechain-types/factories/contracts/mocks/index.js.map +1 -1
  157. package/dist/typechain-types/factories/contracts/tests/ECDSATest__factory.d.ts +1 -1
  158. package/dist/typechain-types/factories/contracts/tests/ECDSATest__factory.js +1 -1
  159. package/dist/typechain-types/factories/contracts/tests/ECDSATest__factory.js.map +1 -1
  160. package/dist/typechain-types/factories/contracts/tests/RevertReasonParserTest__factory.d.ts +1 -1
  161. package/dist/typechain-types/factories/contracts/tests/RevertReasonParserTest__factory.js +1 -1
  162. package/dist/typechain-types/factories/contracts/tests/RevertReasonParserTest__factory.js.map +1 -1
  163. package/dist/typechain-types/factories/contracts/tests/StringUtilTest__factory.d.ts +1 -1
  164. package/dist/typechain-types/factories/contracts/tests/StringUtilTest__factory.js +1 -1
  165. package/dist/typechain-types/factories/contracts/tests/StringUtilTest__factory.js.map +1 -1
  166. package/dist/typechain-types/factories/contracts/tests/mocks/AddressArrayMock__factory.d.ts +1 -5
  167. package/dist/typechain-types/factories/contracts/tests/mocks/AddressArrayMock__factory.js +1 -6
  168. package/dist/typechain-types/factories/contracts/tests/mocks/AddressArrayMock__factory.js.map +1 -1
  169. package/dist/typechain-types/factories/contracts/tests/mocks/AddressLibMock__factory.d.ts +1 -1
  170. package/dist/typechain-types/factories/contracts/tests/mocks/AddressLibMock__factory.js +1 -1
  171. package/dist/typechain-types/factories/contracts/tests/mocks/AddressLibMock__factory.js.map +1 -1
  172. package/dist/typechain-types/factories/contracts/tests/mocks/AddressSetMock__factory.d.ts +11 -5
  173. package/dist/typechain-types/factories/contracts/tests/mocks/AddressSetMock__factory.js +14 -6
  174. package/dist/typechain-types/factories/contracts/tests/mocks/AddressSetMock__factory.js.map +1 -1
  175. package/dist/typechain-types/factories/contracts/tests/mocks/BySigTraitsMock__factory.d.ts +86 -0
  176. package/dist/typechain-types/factories/contracts/tests/mocks/BySigTraitsMock__factory.js +126 -0
  177. package/dist/typechain-types/factories/contracts/tests/mocks/BySigTraitsMock__factory.js.map +1 -0
  178. package/dist/typechain-types/factories/contracts/tests/mocks/BytesMemoryMock__factory.d.ts +1 -1
  179. package/dist/typechain-types/factories/contracts/tests/mocks/BytesMemoryMock__factory.js +1 -1
  180. package/dist/typechain-types/factories/contracts/tests/mocks/BytesMemoryMock__factory.js.map +1 -1
  181. package/dist/typechain-types/factories/contracts/tests/mocks/BytesStorageMock__factory.d.ts +1 -1
  182. package/dist/typechain-types/factories/contracts/tests/mocks/BytesStorageMock__factory.js +1 -1
  183. package/dist/typechain-types/factories/contracts/tests/mocks/BytesStorageMock__factory.js.map +1 -1
  184. package/dist/typechain-types/factories/contracts/tests/mocks/DaiLikePermitMock__factory.d.ts +1 -1
  185. package/dist/typechain-types/factories/contracts/tests/mocks/DaiLikePermitMock__factory.js +1 -1
  186. package/dist/typechain-types/factories/contracts/tests/mocks/DaiLikePermitMock__factory.js.map +1 -1
  187. package/dist/typechain-types/factories/contracts/tests/mocks/ERC1271WalletMock__factory.d.ts +1 -1
  188. package/dist/typechain-types/factories/contracts/tests/mocks/ERC1271WalletMock__factory.js +1 -1
  189. package/dist/typechain-types/factories/contracts/tests/mocks/ERC1271WalletMock__factory.js.map +1 -1
  190. package/dist/typechain-types/factories/contracts/tests/mocks/EthReceiverMock__factory.d.ts +1 -1
  191. package/dist/typechain-types/factories/contracts/tests/mocks/EthReceiverMock__factory.js +1 -1
  192. package/dist/typechain-types/factories/contracts/tests/mocks/EthSenderMock__factory.d.ts +1 -1
  193. package/dist/typechain-types/factories/contracts/tests/mocks/EthSenderMock__factory.js +1 -1
  194. package/dist/typechain-types/factories/contracts/tests/mocks/EthSenderMock__factory.js.map +1 -1
  195. package/dist/typechain-types/factories/contracts/tests/mocks/PermitAndCallMock__factory.d.ts +1 -1
  196. package/dist/typechain-types/factories/contracts/tests/mocks/PermitAndCallMock__factory.js +1 -1
  197. package/dist/typechain-types/factories/contracts/tests/mocks/PermitAndCallMock__factory.js.map +1 -1
  198. package/dist/typechain-types/factories/contracts/tests/mocks/PermitableMock__factory.d.ts +1 -1
  199. package/dist/typechain-types/factories/contracts/tests/mocks/PermitableMock__factory.js +1 -1
  200. package/dist/typechain-types/factories/contracts/tests/mocks/PermitableMock__factory.js.map +1 -1
  201. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20NoReturnMock__factory.d.ts +1 -1
  202. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20NoReturnMock__factory.js +1 -1
  203. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20NoReturnMock__factory.js.map +1 -1
  204. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20PermitNoRevertMock__factory.d.ts +1 -1
  205. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20PermitNoRevertMock__factory.js +1 -1
  206. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20PermitNoRevertMock__factory.js.map +1 -1
  207. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnFalseMock__factory.d.ts +1 -1
  208. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnFalseMock__factory.js +1 -1
  209. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnFalseMock__factory.js.map +1 -1
  210. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnTrueMock__factory.d.ts +1 -1
  211. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnTrueMock__factory.js +1 -1
  212. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ReturnTrueMock__factory.js.map +1 -1
  213. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ThroughZeroApprove__factory.d.ts +1 -1
  214. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ThroughZeroApprove__factory.js +1 -1
  215. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20ThroughZeroApprove__factory.js.map +1 -1
  216. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20WithSafeBalance__factory.d.ts +1 -1
  217. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20WithSafeBalance__factory.js +1 -1
  218. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/ERC20WithSafeBalance__factory.js.map +1 -1
  219. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/Permit2ReturnTrueMock__factory.d.ts +1 -1
  220. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/Permit2ReturnTrueMock__factory.js +1 -1
  221. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/Permit2ReturnTrueMock__factory.js.map +1 -1
  222. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/SafeERC20Wrapper__factory.d.ts +1 -1
  223. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/SafeERC20Wrapper__factory.js +1 -1
  224. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/SafeERC20Wrapper__factory.js.map +1 -1
  225. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/SafeWETHWrapper__factory.d.ts +1 -1
  226. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/SafeWETHWrapper__factory.js +1 -1
  227. package/dist/typechain-types/factories/contracts/tests/mocks/SafeERC20Helper.sol/SafeWETHWrapper__factory.js.map +1 -1
  228. package/dist/typechain-types/factories/contracts/tests/mocks/TokenWithBySig__factory.d.ts +675 -0
  229. package/dist/typechain-types/factories/contracts/tests/mocks/TokenWithBySig__factory.js +893 -0
  230. package/dist/typechain-types/factories/contracts/tests/mocks/TokenWithBySig__factory.js.map +1 -0
  231. package/dist/typechain-types/factories/contracts/tests/mocks/USDCLikePermitMock__factory.d.ts +481 -0
  232. package/dist/typechain-types/factories/contracts/tests/mocks/USDCLikePermitMock__factory.js +640 -0
  233. package/dist/typechain-types/factories/contracts/tests/mocks/USDCLikePermitMock__factory.js.map +1 -0
  234. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20Capitals__factory.d.ts +1 -1
  235. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20Capitals__factory.js +1 -1
  236. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20Capitals__factory.js.map +1 -1
  237. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32Capitals__factory.d.ts +1 -1
  238. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32Capitals__factory.js +1 -1
  239. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32Capitals__factory.js.map +1 -1
  240. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32__factory.d.ts +1 -1
  241. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32__factory.js +1 -1
  242. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ERC20bytes32__factory.js.map +1 -1
  243. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ETHBadReceiver__factory.d.ts +1 -1
  244. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ETHBadReceiver__factory.js +1 -1
  245. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/ETHBadReceiver__factory.js.map +1 -1
  246. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/UniERC20Wrapper__factory.d.ts +1 -1
  247. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/UniERC20Wrapper__factory.js +1 -1
  248. package/dist/typechain-types/factories/contracts/tests/mocks/UniERC20Helper.sol/UniERC20Wrapper__factory.js.map +1 -1
  249. package/dist/typechain-types/factories/contracts/tests/mocks/WETH__factory.d.ts +1 -1
  250. package/dist/typechain-types/factories/contracts/tests/mocks/WETH__factory.js +1 -1
  251. package/dist/typechain-types/factories/contracts/tests/mocks/WETH__factory.js.map +1 -1
  252. package/dist/typechain-types/factories/contracts/tests/mocks/WethReceiverMock__factory.d.ts +1 -1
  253. package/dist/typechain-types/factories/contracts/tests/mocks/WethReceiverMock__factory.js +1 -1
  254. package/dist/typechain-types/factories/contracts/tests/mocks/WethReceiverMock__factory.js.map +1 -1
  255. package/dist/typechain-types/factories/contracts/tests/mocks/index.d.ts +3 -0
  256. package/dist/typechain-types/factories/contracts/tests/mocks/index.js +7 -1
  257. package/dist/typechain-types/factories/contracts/tests/mocks/index.js.map +1 -1
  258. package/dist/typechain-types/index.d.ts +24 -6
  259. package/dist/typechain-types/index.js +26 -8
  260. package/dist/typechain-types/index.js.map +1 -1
  261. package/package.json +23 -18
  262. package/utils/README.md +180 -0
  263. package/utils/docify.utils.js +3 -3
  264. package/utils/file-dependencies.js +0 -0
  265. package/utils/test-docgen.js +0 -0
  266. package/contracts/EthReceiver.sol +0 -16
  267. package/contracts/OnlyWethReceiver.sol +0 -17
  268. package/contracts/PermitAndCall.sol +0 -28
  269. package/dist/typechain-types/contracts/EthReceiver.js.map +0 -1
  270. package/dist/typechain-types/contracts/OnlyWethReceiver.js.map +0 -1
  271. package/dist/typechain-types/contracts/PermitAndCall.js.map +0 -1
  272. package/dist/typechain-types/factories/contracts/EthReceiver__factory.js.map +0 -1
  273. package/dist/typechain-types/factories/contracts/OnlyWethReceiver__factory.js.map +0 -1
  274. package/dist/typechain-types/factories/contracts/PermitAndCall__factory.js.map +0 -1
  275. /package/dist/typechain-types/contracts/{EthReceiver.js → mixins/EthReceiver.js} +0 -0
  276. /package/dist/typechain-types/contracts/{OnlyWethReceiver.js → mixins/OnlyWethReceiver.js} +0 -0
  277. /package/dist/typechain-types/contracts/{PermitAndCall.js → mixins/PermitAndCall.js} +0 -0
  278. /package/dist/typechain-types/factories/contracts/{EthReceiver__factory.js → mixins/EthReceiver__factory.js} +0 -0
  279. /package/dist/typechain-types/factories/contracts/{OnlyWethReceiver__factory.js → mixins/OnlyWethReceiver__factory.js} +0 -0
  280. /package/dist/typechain-types/factories/contracts/{PermitAndCall__factory.js → mixins/PermitAndCall__factory.js} +0 -0
@@ -2,98 +2,227 @@
2
2
 
3
3
  pragma solidity ^0.8.0;
4
4
 
5
- /// @title Library that implements address array on mapping, stores array length at 0 index.
5
+ /**
6
+ * @title AddressArray
7
+ * @notice Implements a dynamic array of addresses using a mapping for storage efficiency, with the array length stored at index 0.
8
+ * @dev This library provides basic functionalities such as push, pop, set, and retrieval of addresses in a storage-efficient manner.
9
+ */
6
10
  library AddressArray {
11
+ /**
12
+ * @dev Error thrown when attempting to access an index outside the bounds of the array.
13
+ */
7
14
  error IndexOutOfBounds();
15
+
16
+ /**
17
+ * @dev Error thrown when attempting to pop an element from an empty array.
18
+ */
8
19
  error PopFromEmptyArray();
20
+
21
+ /**
22
+ * @dev Error thrown when the output array provided for getting the list of addresses is too small.
23
+ */
9
24
  error OutputArrayTooSmall();
10
25
 
11
- /// @dev Data struct containing raw mapping.
26
+ uint256 internal constant _ZERO_ADDRESS = 0x8000000000000000000000000000000000000000000000000000000000000000; // Next tx gas optimization
27
+ uint256 internal constant _LENGTH_MASK = 0x0000000000000000ffffffff0000000000000000000000000000000000000000;
28
+ uint256 internal constant _ADDRESS_MASK = 0x000000000000000000000000ffffffffffffffffffffffffffffffffffffffff;
29
+ uint256 internal constant _ONE_LENGTH = 0x0000000000000000000000010000000000000000000000000000000000000000;
30
+ uint256 internal constant _LENGTH_OFFSET = 160;
31
+
32
+ /**
33
+ * @dev Struct containing the raw mapping used to store the addresses and the array length.
34
+ */
12
35
  struct Data {
13
- mapping(uint256 => uint256) _raw;
36
+ uint256[1 << 32] _raw;
14
37
  }
15
38
 
16
- /// @dev Length of array.
39
+ /**
40
+ * @notice Returns the number of addresses stored in the array.
41
+ * @param self The instance of the Data struct.
42
+ * @return The number of addresses.
43
+ */
17
44
  function length(Data storage self) internal view returns (uint256) {
18
- return self._raw[0] >> 160;
45
+ return (self._raw[0] & _LENGTH_MASK) >> _LENGTH_OFFSET;
19
46
  }
20
47
 
21
- /// @dev Returns data item from `self` storage at `i`.
48
+ /**
49
+ * @notice Retrieves the address at a specified index in the array.
50
+ * @param self The instance of the Data struct.
51
+ * @param i The index to retrieve the address from.
52
+ * @return The address stored at the specified index.
53
+ */
22
54
  function at(Data storage self, uint256 i) internal view returns (address) {
23
- return address(uint160(self._raw[i]));
55
+ if (i >= 1 << 32) revert IndexOutOfBounds();
56
+ return address(uint160(self._raw[i] & _ADDRESS_MASK));
24
57
  }
25
58
 
26
- /// @dev Returns list of addresses from storage `self`.
27
- function get(Data storage self) internal view returns (address[] memory arr) {
28
- uint256 lengthAndFirst = self._raw[0];
29
- arr = new address[](lengthAndFirst >> 160);
30
- _get(self, arr, lengthAndFirst);
31
- }
59
+ /**
60
+ * @notice Returns all addresses in the array from storage.
61
+ * @param self The instance of the Data struct.
62
+ * @return output Array containing all the addresses.
63
+ */
64
+ function get(Data storage self) internal view returns (address[] memory output) {
65
+ assembly ("memory-safe") { // solhint-disable-line no-inline-assembly
66
+ let lengthAndFirst := sload(self.slot)
67
+ let len := shr(_LENGTH_OFFSET, and(lengthAndFirst, _LENGTH_MASK))
68
+ let fst := and(lengthAndFirst, _ADDRESS_MASK)
32
69
 
33
- /// @dev Puts list of addresses from `self` storage into `output` array.
34
- function get(Data storage self, address[] memory output) internal view returns (address[] memory) {
35
- return _get(self, output, self._raw[0]);
70
+ // Allocate array
71
+ output := mload(0x40)
72
+ mstore(0x40, add(output, mul(0x20, add(1, len))))
73
+ mstore(output, len)
74
+
75
+ if len {
76
+ // Copy first element and then the rest in a loop
77
+ let ptr := add(output, 0x20)
78
+ mstore(ptr, fst)
79
+ for { let i := 1 } lt(i, len) { i:= add(i, 1) } {
80
+ let item := and(sload(add(self.slot, i)), _ADDRESS_MASK)
81
+ mstore(add(ptr, mul(0x20, i)), item)
82
+ }
83
+ }
84
+ }
36
85
  }
37
86
 
38
- function _get(
39
- Data storage self,
40
- address[] memory output,
41
- uint256 lengthAndFirst
42
- ) private view returns (address[] memory) {
43
- uint256 len = lengthAndFirst >> 160;
44
- if (len > output.length) revert OutputArrayTooSmall();
45
- if (len > 0) {
46
- output[0] = address(uint160(lengthAndFirst));
47
- unchecked {
48
- for (uint256 i = 1; i < len; i++) {
49
- output[i] = address(uint160(self._raw[i]));
87
+ /**
88
+ * @notice Copies the addresses into the provided output array.
89
+ * @param self The instance of the Data struct.
90
+ * @param input The array to copy the addresses into.
91
+ * @return output The provided output array filled with addresses.
92
+ */
93
+ function get(Data storage self, address[] memory input) internal view returns (address[] memory output) {
94
+ output = input;
95
+ bytes4 err = OutputArrayTooSmall.selector;
96
+ assembly ("memory-safe") { // solhint-disable-line no-inline-assembly
97
+ let lengthAndFirst := sload(self.slot)
98
+ let len := shr(_LENGTH_OFFSET, and(lengthAndFirst, _LENGTH_MASK))
99
+ let fst := and(lengthAndFirst, _ADDRESS_MASK)
100
+
101
+ if gt(len, mload(input)) {
102
+ mstore(0, err)
103
+ revert(0, 4)
104
+ }
105
+ if len {
106
+ // Copy first element and then the rest in a loop
107
+ let ptr := add(output, 0x20)
108
+ mstore(ptr, fst)
109
+ for { let i := 1 } lt(i, len) { i:= add(i, 1) } {
110
+ let item := and(sload(add(self.slot, i)), _ADDRESS_MASK)
111
+ mstore(add(ptr, mul(0x20, i)), item)
50
112
  }
51
113
  }
52
114
  }
53
- return output;
54
115
  }
55
116
 
56
- /// @dev Array push back `account` operation on storage `self`.
57
- function push(Data storage self, address account) internal returns (uint256) {
58
- unchecked {
59
- uint256 lengthAndFirst = self._raw[0];
60
- uint256 len = lengthAndFirst >> 160;
61
- if (len == 0) {
62
- self._raw[0] = (1 << 160) + uint160(account);
63
- } else {
64
- self._raw[0] = lengthAndFirst + (1 << 160);
65
- self._raw[len] = uint160(account);
117
+ /**
118
+ * @notice Adds an address to the end of the array.
119
+ * @param self The instance of the Data struct.
120
+ * @param account The address to add.
121
+ * @return res The new length of the array.
122
+ */
123
+ function push(Data storage self, address account) internal returns (uint256 res) {
124
+ assembly ("memory-safe") { // solhint-disable-line no-inline-assembly
125
+ let lengthAndFirst := sload(self.slot)
126
+ let len := shr(_LENGTH_OFFSET, and(lengthAndFirst, _LENGTH_MASK))
127
+
128
+ switch len
129
+ case 0 {
130
+ sstore(self.slot, or(account, _ONE_LENGTH))
131
+ }
132
+ default {
133
+ sstore(self.slot, add(lengthAndFirst, _ONE_LENGTH))
134
+ sstore(add(self.slot, len), or(account, _ZERO_ADDRESS))
66
135
  }
67
- return len + 1;
136
+ res := add(len, 1)
68
137
  }
69
138
  }
70
139
 
71
- /// @dev Array pop back operation for storage `self`.
140
+ /**
141
+ * @notice Removes the last address from the array.
142
+ * @param self The instance of the Data struct.
143
+ */
72
144
  function pop(Data storage self) internal {
73
- unchecked {
74
- uint256 lengthAndFirst = self._raw[0];
75
- uint256 len = lengthAndFirst >> 160;
76
- if (len == 0) revert PopFromEmptyArray();
77
- self._raw[len - 1] = 0;
78
- if (len > 1) {
79
- self._raw[0] = lengthAndFirst - (1 << 160);
145
+ bytes4 err = PopFromEmptyArray.selector;
146
+ assembly ("memory-safe") { // solhint-disable-line no-inline-assembly
147
+ let lengthAndFirst := sload(self.slot)
148
+ let len := shr(_LENGTH_OFFSET, and(lengthAndFirst, _LENGTH_MASK))
149
+
150
+ switch len
151
+ case 0 {
152
+ mstore(0, err)
153
+ revert(0, 4)
154
+ }
155
+ case 1 {
156
+ sstore(self.slot, _ZERO_ADDRESS)
157
+ }
158
+ default {
159
+ sstore(self.slot, sub(lengthAndFirst, _ONE_LENGTH))
160
+ }
161
+ }
162
+ }
163
+
164
+ /**
165
+ * @notice Array pop back operation for storage `self` that returns popped element.
166
+ * @param self The instance of the Data struct.
167
+ * @return res The address that was removed from the array.
168
+ */
169
+ function popGet(Data storage self) internal returns(address res) {
170
+ bytes4 err = PopFromEmptyArray.selector;
171
+ assembly ("memory-safe") { // solhint-disable-line no-inline-assembly
172
+ let lengthAndFirst := sload(self.slot)
173
+ let len := shr(_LENGTH_OFFSET, and(lengthAndFirst, _LENGTH_MASK))
174
+
175
+ switch len
176
+ case 0 {
177
+ mstore(0, err)
178
+ revert(0, 4)
179
+ }
180
+ case 1 {
181
+ res := and(lengthAndFirst, _ADDRESS_MASK)
182
+ sstore(self.slot, _ZERO_ADDRESS)
183
+ }
184
+ default {
185
+ res := and(sload(add(self.slot, sub(len, 1))), _ADDRESS_MASK)
186
+ sstore(self.slot, sub(lengthAndFirst, _ONE_LENGTH))
187
+ }
188
+ }
189
+ }
190
+
191
+ /**
192
+ * @notice Sets the address at a specified index in the array.
193
+ * @param self The instance of the Data struct.
194
+ * @param index The index at which to set the address.
195
+ * @param account The address to set at the specified index.
196
+ */
197
+ function set(Data storage self, uint256 index, address account) internal {
198
+ bytes4 err = IndexOutOfBounds.selector;
199
+ assembly ("memory-safe") { // solhint-disable-line no-inline-assembly
200
+ let lengthAndFirst := sload(self.slot)
201
+ let len := shr(_LENGTH_OFFSET, and(lengthAndFirst, _LENGTH_MASK))
202
+ let fst := and(lengthAndFirst, _ADDRESS_MASK)
203
+
204
+ if iszero(lt(index, len)) {
205
+ mstore(0, err)
206
+ revert(0, 4)
207
+ }
208
+
209
+ switch index
210
+ case 0 {
211
+ sstore(self.slot, or(xor(lengthAndFirst, fst), account))
212
+ }
213
+ default {
214
+ sstore(add(self.slot, index), or(account, _ZERO_ADDRESS))
80
215
  }
81
216
  }
82
217
  }
83
218
 
84
- /// @dev Set element for storage `self` at `index` to `account`.
85
- function set(
86
- Data storage self,
87
- uint256 index,
88
- address account
89
- ) internal {
90
- uint256 len = length(self);
91
- if (index >= len) revert IndexOutOfBounds();
92
-
93
- if (index == 0) {
94
- self._raw[0] = (len << 160) | uint160(account);
95
- } else {
96
- self._raw[index] = uint160(account);
219
+ /**
220
+ * @notice Erase length of the array.
221
+ * @param self The instance of the Data struct.
222
+ */
223
+ function erase(Data storage self) internal {
224
+ assembly ("memory-safe") { // solhint-disable-line no-inline-assembly
225
+ sstore(self.slot, _ADDRESS_MASK)
97
226
  }
98
227
  }
99
228
  }
@@ -5,7 +5,8 @@ pragma solidity ^0.8.0;
5
5
  type Address is uint256;
6
6
 
7
7
  /**
8
- * @dev Library for working with addresses encoded as uint256 values, which can include flags in the highest bits.
8
+ * @notice AddressLib
9
+ * @notice Library for working with addresses encoded as uint256 values, which can include flags in the highest bits.
9
10
  */
10
11
  library AddressLib {
11
12
  uint256 private constant _LOW_160_BIT_MASK = (1 << 160) - 1;
@@ -4,16 +4,18 @@ pragma solidity ^0.8.0;
4
4
 
5
5
  import "./AddressArray.sol";
6
6
 
7
- /** @title Library that is using AddressArray library for AddressArray.Data
8
- * and allows Set operations on address storage data:
9
- * 1. add
10
- * 2. remove
11
- * 3. contains
7
+ /**
8
+ * @title AddressSet
9
+ * @notice Library for managing sets of addresses, allowing operations such as add, remove, and contains.
10
+ * Utilizes the AddressArray library for underlying data storage.
12
11
  */
13
12
  library AddressSet {
14
13
  using AddressArray for AddressArray.Data;
15
14
 
16
- /** @dev Data struct from AddressArray.Data items
15
+ uint256 internal constant _NULL_INDEX = type(uint256).max;
16
+
17
+ /**
18
+ * @dev Data struct from AddressArray.Data items
17
19
  * and lookup mapping address => index in data array.
18
20
  */
19
21
  struct Data {
@@ -21,45 +23,107 @@ library AddressSet {
21
23
  mapping(address => uint256) lookup;
22
24
  }
23
25
 
24
- /// @dev Length of data storage.
26
+ /**
27
+ * @notice Determines the number of addresses in the set.
28
+ * @param s The set of addresses.
29
+ * @return The number of addresses in the set.
30
+ */
25
31
  function length(Data storage s) internal view returns (uint256) {
26
32
  return s.items.length();
27
33
  }
28
34
 
29
- /// @dev Returns data item from `s` storage at `index`.
35
+ /**
36
+ * @notice Retrieves the address at a specified index in the set.
37
+ * @param s The set of addresses.
38
+ * @param index The index of the address to retrieve.
39
+ * @return The address at the specified index.
40
+ */
30
41
  function at(Data storage s, uint256 index) internal view returns (address) {
31
42
  return s.items.at(index);
32
43
  }
33
44
 
34
- /// @dev Returns true if storage `s` has `item`.
45
+ /**
46
+ * @notice Checks if the set contains the specified address.
47
+ * @param s The set of addresses.
48
+ * @param item The address to check for.
49
+ * @return True if the set contains the address, false otherwise.
50
+ */
35
51
  function contains(Data storage s, address item) internal view returns (bool) {
36
- return s.lookup[item] != 0;
52
+ uint256 index = s.lookup[item];
53
+ return index != 0 && index != _NULL_INDEX;
54
+ }
55
+
56
+ /**
57
+ * @notice Returns list of addresses from storage `s`.
58
+ * @param s The set of addresses.
59
+ * @return The array of addresses stored in `s`.
60
+ */
61
+ function get(Data storage s) internal view returns (address[] memory) {
62
+ return s.items.get();
63
+ }
64
+
65
+ /**
66
+ * @notice Puts list of addresses from `s` storage into `output` array.
67
+ * @param s The set of addresses.
68
+ * @return The provided output array filled with addresses.
69
+ */
70
+ function get(Data storage s, address[] memory input) internal view returns (address[] memory) {
71
+ return s.items.get(input);
37
72
  }
38
73
 
39
- /// @dev Adds `item` into storage `s` and returns true if successful.
74
+ /**
75
+ * @notice Adds an address to the set if it is not already present.
76
+ * @param s The set of addresses.
77
+ * @param item The address to add.
78
+ * @return True if the address was added to the set, false if it was already present.
79
+ */
40
80
  function add(Data storage s, address item) internal returns (bool) {
41
- if (s.lookup[item] > 0) {
81
+ uint256 index = s.lookup[item];
82
+ if (index != 0 && index != _NULL_INDEX) {
42
83
  return false;
43
84
  }
44
85
  s.lookup[item] = s.items.push(item);
45
86
  return true;
46
87
  }
47
88
 
48
- /// @dev Removes `item` from storage `s` and returns true if successful.
89
+ /**
90
+ * @notice Removes an address from the set if it exists.
91
+ * @param s The set of addresses.
92
+ * @param item The address to remove.
93
+ * @return True if the address was removed from the set, false if it was not found.
94
+ */
49
95
  function remove(Data storage s, address item) internal returns (bool) {
50
96
  uint256 index = s.lookup[item];
51
- if (index == 0) {
97
+ s.lookup[item] = _NULL_INDEX;
98
+ if (index == 0 || index == _NULL_INDEX) {
52
99
  return false;
53
100
  }
54
- if (index < s.items.length()) {
101
+
102
+ address lastItem = s.items.popGet();
103
+ if (lastItem != item) {
55
104
  unchecked {
56
- address lastItem = s.items.at(s.items.length() - 1);
57
105
  s.items.set(index - 1, lastItem);
58
106
  s.lookup[lastItem] = index;
59
107
  }
60
108
  }
61
- s.items.pop();
62
- delete s.lookup[item];
63
109
  return true;
64
110
  }
111
+
112
+ /**
113
+ * @notice Erases set from storage `s`.
114
+ * @param s The set of addresses.
115
+ * @return items All removed items.
116
+ */
117
+ function erase(Data storage s) internal returns(address[] memory items) {
118
+ items = s.items.get();
119
+ uint256 len = items.length;
120
+ if (len > 0) {
121
+ s.items.erase();
122
+ unchecked {
123
+ for (uint256 i = 0; i < len; i++) {
124
+ s.lookup[items[i]] = _NULL_INDEX;
125
+ }
126
+ }
127
+ }
128
+ }
65
129
  }
@@ -0,0 +1,46 @@
1
+ // SPDX-License-Identifier: MIT
2
+
3
+ pragma solidity ^0.8.0;
4
+
5
+ library BySigTraits {
6
+ error WrongNonceType();
7
+
8
+ // 2 bits for type
9
+ // 6 bits reserved for future use
10
+ // 40 bits for deadline
11
+ // 80 bits for relayer address lower bits
12
+ // 128 bits for nonce value
13
+ type Value is uint256;
14
+
15
+ enum NonceType {
16
+ Account,
17
+ Selector,
18
+ Unique
19
+ }
20
+
21
+ uint256 constant internal TYPE_BIT_SHIFT = 254;
22
+ uint256 constant internal DEADLINE_BIT_SHIFT = 208;
23
+ uint256 constant internal DEADLINE_BIT_MASK = (1 << 40) - 1;
24
+ uint256 constant internal RELAYER_BIT_SHIFT = 128;
25
+ uint256 constant internal RELAYER_BIT_MASK = (1 << 80) - 1;
26
+ uint256 constant internal NONCE_MASK = (1 << 128) - 1;
27
+
28
+ function nonceType(Value traits) internal pure returns(NonceType) {
29
+ uint256 _type = Value.unwrap(traits) >> TYPE_BIT_SHIFT;
30
+ if (_type > uint256(NonceType.Unique)) revert WrongNonceType();
31
+ return NonceType(_type);
32
+ }
33
+
34
+ function deadline(Value traits) internal pure returns(uint256) {
35
+ return (Value.unwrap(traits) >> DEADLINE_BIT_SHIFT) & DEADLINE_BIT_MASK;
36
+ }
37
+
38
+ function isRelayerAllowed(Value traits, address relayer) internal pure returns(bool) {
39
+ uint256 relayerBits = (Value.unwrap(traits) >> RELAYER_BIT_SHIFT) & RELAYER_BIT_MASK;
40
+ return relayerBits == 0 || (uint160(relayer) & RELAYER_BIT_MASK) == relayerBits;
41
+ }
42
+
43
+ function nonce(Value traits) internal pure returns(uint256) {
44
+ return Value.unwrap(traits) & NONCE_MASK;
45
+ }
46
+ }
@@ -3,7 +3,8 @@
3
3
  pragma solidity ^0.8.0;
4
4
 
5
5
  /**
6
- * @title A library for operating on bytes memory slices without copying.
6
+ * @title BytesMemory
7
+ * @notice A library for operating on bytes memory slices without copying.
7
8
  */
8
9
  library BytesMemory {
9
10
  error OutOfBounds();
@@ -3,7 +3,8 @@
3
3
  pragma solidity ^0.8.0;
4
4
 
5
5
  /**
6
- * @title A library for operating on bytes storage slices.
6
+ * @title BytesStorage
7
+ * @notice A library for operating on bytes storage slices.
7
8
  */
8
9
  library BytesStorage {
9
10
  error OutOfBounds();