@sudobility/contracts 1.16.4 → 1.17.10

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 (663) hide show
  1. package/README.md +16 -2
  2. package/artifacts/contracts/Mailer.sol/Mailer.d.ts +242 -16
  3. package/artifacts/contracts/Mailer.sol/Mailer.dbg.json +1 -1
  4. package/artifacts/contracts/Mailer.sol/Mailer.json +237 -11
  5. package/artifacts/contracts/MockUSDC.sol/MockUSDC.d.ts +2 -2
  6. package/artifacts/contracts/MockUSDC.sol/MockUSDC.dbg.json +1 -1
  7. package/artifacts/contracts/MockUSDC.sol/MockUSDC.json +2 -2
  8. package/artifacts/contracts/examples/MailerIntegrationExample.sol/MailerIntegrationExample.d.ts +299 -0
  9. package/artifacts/contracts/examples/MailerIntegrationExample.sol/MailerIntegrationExample.dbg.json +4 -0
  10. package/artifacts/contracts/examples/MailerIntegrationExample.sol/MailerIntegrationExample.json +249 -0
  11. package/artifacts/contracts/examples/MailerIntegrationExample.sol/artifacts.d.ts +21 -0
  12. package/artifacts/contracts/interfaces/IERC20.sol/IERC20.dbg.json +1 -1
  13. package/artifacts/contracts/interfaces/IMailer.sol/IMailer.d.ts +216 -0
  14. package/artifacts/contracts/interfaces/IMailer.sol/IMailer.dbg.json +4 -0
  15. package/artifacts/contracts/interfaces/IMailer.sol/IMailer.json +166 -0
  16. package/artifacts/contracts/interfaces/IMailer.sol/artifacts.d.ts +21 -0
  17. package/contracts/Mailer.sol +922 -0
  18. package/contracts/MockUSDC.sol +106 -0
  19. package/contracts/examples/MailerIntegrationExample.sol +189 -0
  20. package/contracts/interfaces/IERC20.sol +33 -0
  21. package/contracts/interfaces/IMailer.sol +86 -0
  22. package/dist/evm/src/evm/evm-mailer-client.d.ts +184 -8
  23. package/dist/evm/src/evm/evm-mailer-client.d.ts.map +1 -1
  24. package/dist/evm/src/evm/evm-mailer-client.js +3 -2
  25. package/dist/evm/src/evm/evm-mailer-client.js.map +1 -1
  26. package/dist/evm/src/evm/index.d.ts +2 -2
  27. package/dist/evm/src/evm/index.d.ts.map +1 -1
  28. package/dist/evm/src/evm/index.js +1 -1
  29. package/dist/evm/src/evm/index.js.map +1 -1
  30. package/dist/evm/typechain-types/@openzeppelin/contracts/index.d.ts +7 -0
  31. package/dist/evm/typechain-types/@openzeppelin/contracts/index.d.ts.map +1 -0
  32. package/dist/evm/typechain-types/@openzeppelin/contracts/index.js +3 -0
  33. package/dist/evm/typechain-types/@openzeppelin/contracts/index.js.map +1 -0
  34. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/IERC1967.d.ts +66 -0
  35. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/IERC1967.d.ts.map +1 -0
  36. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/IERC1967.js +3 -0
  37. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/IERC1967.js.map +1 -0
  38. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.d.ts +26 -0
  39. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.d.ts.map +1 -0
  40. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.js +3 -0
  41. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.js.map +1 -0
  42. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.d.ts +2 -0
  43. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.d.ts.map +1 -0
  44. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.js +3 -0
  45. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.js.map +1 -0
  46. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/index.d.ts +4 -0
  47. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/index.d.ts.map +1 -0
  48. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/index.js +3 -0
  49. package/dist/evm/typechain-types/@openzeppelin/contracts/interfaces/index.js.map +1 -0
  50. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.d.ts +21 -0
  51. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.d.ts.map +1 -0
  52. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.js +3 -0
  53. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.js.map +1 -0
  54. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/ERC1967/index.d.ts +2 -0
  55. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/ERC1967/index.d.ts.map +1 -0
  56. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/ERC1967/index.js +3 -0
  57. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/ERC1967/index.js.map +1 -0
  58. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/beacon/IBeacon.d.ts +26 -0
  59. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/beacon/IBeacon.d.ts.map +1 -0
  60. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/beacon/IBeacon.js +3 -0
  61. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/beacon/IBeacon.js.map +1 -0
  62. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/beacon/index.d.ts +2 -0
  63. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/beacon/index.d.ts.map +1 -0
  64. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/beacon/index.js +3 -0
  65. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/beacon/index.js.map +1 -0
  66. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/index.d.ts +5 -0
  67. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/index.d.ts.map +1 -0
  68. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/index.js +3 -0
  69. package/dist/evm/typechain-types/@openzeppelin/contracts/proxy/index.js.map +1 -0
  70. package/dist/evm/typechain-types/@openzeppelin/contracts/utils/Address.d.ts +21 -0
  71. package/dist/evm/typechain-types/@openzeppelin/contracts/utils/Address.d.ts.map +1 -0
  72. package/dist/evm/typechain-types/@openzeppelin/contracts/utils/Address.js +3 -0
  73. package/dist/evm/typechain-types/@openzeppelin/contracts/utils/Address.js.map +1 -0
  74. package/dist/evm/typechain-types/@openzeppelin/contracts/utils/Errors.d.ts +21 -0
  75. package/dist/evm/typechain-types/@openzeppelin/contracts/utils/Errors.d.ts.map +1 -0
  76. package/dist/evm/typechain-types/@openzeppelin/contracts/utils/Errors.js +3 -0
  77. package/dist/evm/typechain-types/@openzeppelin/contracts/utils/Errors.js.map +1 -0
  78. package/dist/evm/typechain-types/@openzeppelin/contracts/utils/index.d.ts +3 -0
  79. package/dist/evm/typechain-types/@openzeppelin/contracts/utils/index.d.ts.map +1 -0
  80. package/dist/evm/typechain-types/@openzeppelin/contracts/utils/index.js +3 -0
  81. package/dist/evm/typechain-types/@openzeppelin/contracts/utils/index.js.map +1 -0
  82. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.d.ts +69 -0
  83. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.d.ts.map +1 -0
  84. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.js +3 -0
  85. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.js.map +1 -0
  86. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/access/index.d.ts +2 -0
  87. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/access/index.d.ts.map +1 -0
  88. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/access/index.js.map +1 -0
  89. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/index.d.ts +7 -0
  90. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/index.d.ts.map +1 -0
  91. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/index.js +3 -0
  92. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/index.js.map +1 -0
  93. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/index.d.ts +3 -0
  94. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/index.d.ts.map +1 -0
  95. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/index.js +3 -0
  96. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/index.js.map +1 -0
  97. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.d.ts +37 -0
  98. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.d.ts.map +1 -0
  99. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.js +3 -0
  100. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.js.map +1 -0
  101. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.d.ts +74 -0
  102. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.d.ts.map +1 -0
  103. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.js +3 -0
  104. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.js.map +1 -0
  105. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/index.d.ts +3 -0
  106. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/index.d.ts.map +1 -0
  107. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/index.js +3 -0
  108. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/index.js.map +1 -0
  109. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.d.ts +37 -0
  110. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.d.ts.map +1 -0
  111. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.js +3 -0
  112. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.js.map +1 -0
  113. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/utils/index.d.ts +2 -0
  114. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/utils/index.d.ts.map +1 -0
  115. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/utils/index.js +3 -0
  116. package/dist/evm/typechain-types/@openzeppelin/contracts-upgradeable/utils/index.js.map +1 -0
  117. package/dist/evm/typechain-types/@openzeppelin/index.d.ts +5 -0
  118. package/dist/evm/typechain-types/@openzeppelin/index.d.ts.map +1 -0
  119. package/dist/evm/typechain-types/@openzeppelin/index.js +3 -0
  120. package/dist/evm/typechain-types/@openzeppelin/index.js.map +1 -0
  121. package/dist/evm/typechain-types/{Mailer.d.ts → contracts/Mailer.d.ts} +135 -21
  122. package/dist/evm/typechain-types/contracts/Mailer.d.ts.map +1 -0
  123. package/dist/evm/typechain-types/contracts/Mailer.js.map +1 -0
  124. package/dist/evm/typechain-types/{MockUSDC.d.ts → contracts/MockUSDC.d.ts} +1 -1
  125. package/dist/evm/typechain-types/contracts/MockUSDC.d.ts.map +1 -0
  126. package/dist/evm/typechain-types/contracts/MockUSDC.js.map +1 -0
  127. package/dist/evm/typechain-types/contracts/examples/MailerIntegrationExample.d.ts +170 -0
  128. package/dist/evm/typechain-types/contracts/examples/MailerIntegrationExample.d.ts.map +1 -0
  129. package/dist/evm/typechain-types/contracts/examples/MailerIntegrationExample.js +3 -0
  130. package/dist/evm/typechain-types/contracts/examples/MailerIntegrationExample.js.map +1 -0
  131. package/dist/evm/typechain-types/contracts/examples/index.d.ts +2 -0
  132. package/dist/evm/typechain-types/contracts/examples/index.d.ts.map +1 -0
  133. package/dist/evm/typechain-types/contracts/examples/index.js +3 -0
  134. package/dist/evm/typechain-types/contracts/examples/index.js.map +1 -0
  135. package/dist/evm/typechain-types/contracts/index.d.ts +7 -0
  136. package/dist/evm/typechain-types/contracts/index.d.ts.map +1 -0
  137. package/dist/evm/typechain-types/contracts/index.js +3 -0
  138. package/dist/evm/typechain-types/contracts/index.js.map +1 -0
  139. package/dist/{unified/typechain-types → evm/typechain-types/contracts}/interfaces/IERC20.d.ts +1 -1
  140. package/dist/evm/typechain-types/contracts/interfaces/IERC20.d.ts.map +1 -0
  141. package/dist/evm/typechain-types/contracts/interfaces/IERC20.js.map +1 -0
  142. package/dist/evm/typechain-types/contracts/interfaces/IMailer.d.ts +118 -0
  143. package/dist/evm/typechain-types/contracts/interfaces/IMailer.d.ts.map +1 -0
  144. package/dist/evm/typechain-types/contracts/interfaces/IMailer.js +3 -0
  145. package/dist/evm/typechain-types/contracts/interfaces/IMailer.js.map +1 -0
  146. package/dist/evm/typechain-types/contracts/interfaces/index.d.ts +3 -0
  147. package/dist/evm/typechain-types/contracts/interfaces/index.d.ts.map +1 -0
  148. package/dist/evm/typechain-types/contracts/interfaces/index.js +3 -0
  149. package/dist/evm/typechain-types/contracts/interfaces/index.js.map +1 -0
  150. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/index.d.ts +4 -0
  151. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/index.d.ts.map +1 -0
  152. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/index.js +43 -0
  153. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/index.js.map +1 -0
  154. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1967__factory.d.ts +43 -0
  155. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1967__factory.d.ts.map +1 -0
  156. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1967__factory.js +65 -0
  157. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1967__factory.js.map +1 -0
  158. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.d.ts +18 -0
  159. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.d.ts.map +1 -0
  160. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.js +33 -0
  161. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.js.map +1 -0
  162. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.d.ts +2 -0
  163. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.d.ts.map +1 -0
  164. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.js +9 -0
  165. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.js.map +1 -0
  166. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/index.d.ts +3 -0
  167. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/index.d.ts.map +1 -0
  168. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/index.js +43 -0
  169. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/interfaces/index.js.map +1 -0
  170. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.d.ts +51 -0
  171. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.d.ts.map +1 -0
  172. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.js +78 -0
  173. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.js.map +1 -0
  174. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/index.d.ts +2 -0
  175. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/index.d.ts.map +1 -0
  176. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/index.js +9 -0
  177. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/index.js.map +1 -0
  178. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.d.ts +18 -0
  179. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.d.ts.map +1 -0
  180. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.js +33 -0
  181. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.js.map +1 -0
  182. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/index.d.ts +2 -0
  183. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/index.d.ts.map +1 -0
  184. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/index.js +9 -0
  185. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/index.js.map +1 -0
  186. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/index.d.ts +3 -0
  187. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/index.d.ts.map +1 -0
  188. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/index.js +42 -0
  189. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/proxy/index.js.map +1 -0
  190. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.d.ts +31 -0
  191. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.d.ts.map +1 -0
  192. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.js +51 -0
  193. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.js.map +1 -0
  194. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/utils/Errors__factory.d.ts +51 -0
  195. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/utils/Errors__factory.d.ts.map +1 -0
  196. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/utils/Errors__factory.js +77 -0
  197. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/utils/Errors__factory.js.map +1 -0
  198. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/utils/index.d.ts +3 -0
  199. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/utils/index.d.ts.map +1 -0
  200. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/utils/index.js +11 -0
  201. package/dist/evm/typechain-types/factories/@openzeppelin/contracts/utils/index.js.map +1 -0
  202. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.d.ts +83 -0
  203. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.d.ts.map +1 -0
  204. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.js +117 -0
  205. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.js.map +1 -0
  206. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/index.d.ts +2 -0
  207. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/index.d.ts.map +1 -0
  208. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/index.js +9 -0
  209. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/index.js.map +1 -0
  210. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/index.d.ts +4 -0
  211. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/index.d.ts.map +1 -0
  212. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/index.js +43 -0
  213. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/index.js.map +1 -0
  214. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/index.d.ts +2 -0
  215. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/index.d.ts.map +1 -0
  216. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/index.js +41 -0
  217. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/index.js.map +1 -0
  218. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.d.ts +26 -0
  219. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.d.ts.map +1 -0
  220. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.js +43 -0
  221. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.js.map +1 -0
  222. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable__factory.d.ts +106 -0
  223. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable__factory.d.ts.map +1 -0
  224. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable__factory.js +148 -0
  225. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable__factory.js.map +1 -0
  226. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.d.ts +3 -0
  227. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.d.ts.map +1 -0
  228. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.js +11 -0
  229. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.js.map +1 -0
  230. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.d.ts +26 -0
  231. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.d.ts.map +1 -0
  232. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.js +43 -0
  233. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.js.map +1 -0
  234. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/index.d.ts +2 -0
  235. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/index.d.ts.map +1 -0
  236. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/index.js +9 -0
  237. package/dist/evm/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/index.js.map +1 -0
  238. package/dist/evm/typechain-types/factories/@openzeppelin/index.d.ts +3 -0
  239. package/dist/evm/typechain-types/factories/@openzeppelin/index.d.ts.map +1 -0
  240. package/dist/evm/typechain-types/factories/@openzeppelin/index.js +42 -0
  241. package/dist/evm/typechain-types/factories/@openzeppelin/index.js.map +1 -0
  242. package/dist/evm/typechain-types/factories/contracts/Mailer__factory.d.ts +1061 -0
  243. package/dist/evm/typechain-types/factories/contracts/Mailer__factory.d.ts.map +1 -0
  244. package/dist/evm/typechain-types/factories/contracts/Mailer__factory.js +1364 -0
  245. package/dist/evm/typechain-types/factories/contracts/Mailer__factory.js.map +1 -0
  246. package/dist/evm/typechain-types/factories/{MockUSDC__factory.d.ts → contracts/MockUSDC__factory.d.ts} +3 -3
  247. package/dist/evm/typechain-types/factories/contracts/MockUSDC__factory.d.ts.map +1 -0
  248. package/dist/evm/typechain-types/factories/{MockUSDC__factory.js → contracts/MockUSDC__factory.js} +1 -1
  249. package/dist/evm/typechain-types/factories/contracts/MockUSDC__factory.js.map +1 -0
  250. package/dist/evm/typechain-types/factories/contracts/examples/MailerIntegrationExample__factory.d.ts +209 -0
  251. package/dist/evm/typechain-types/factories/contracts/examples/MailerIntegrationExample__factory.d.ts.map +1 -0
  252. package/dist/evm/typechain-types/factories/contracts/examples/MailerIntegrationExample__factory.js +278 -0
  253. package/dist/evm/typechain-types/factories/contracts/examples/MailerIntegrationExample__factory.js.map +1 -0
  254. package/dist/evm/typechain-types/factories/contracts/examples/index.d.ts +2 -0
  255. package/dist/evm/typechain-types/factories/contracts/examples/index.d.ts.map +1 -0
  256. package/dist/evm/typechain-types/factories/contracts/examples/index.js +9 -0
  257. package/dist/evm/typechain-types/factories/contracts/examples/index.js.map +1 -0
  258. package/dist/evm/typechain-types/factories/contracts/index.d.ts +5 -0
  259. package/dist/evm/typechain-types/factories/contracts/index.d.ts.map +1 -0
  260. package/dist/evm/typechain-types/factories/contracts/index.js +46 -0
  261. package/dist/evm/typechain-types/factories/contracts/index.js.map +1 -0
  262. package/dist/evm/typechain-types/factories/{interfaces → contracts/interfaces}/IERC20__factory.d.ts +1 -1
  263. package/dist/evm/typechain-types/factories/contracts/interfaces/IERC20__factory.d.ts.map +1 -0
  264. package/dist/evm/typechain-types/factories/contracts/interfaces/IERC20__factory.js.map +1 -0
  265. package/dist/evm/typechain-types/factories/contracts/interfaces/IMailer__factory.d.ts +130 -0
  266. package/dist/evm/typechain-types/factories/contracts/interfaces/IMailer__factory.d.ts.map +1 -0
  267. package/dist/evm/typechain-types/factories/contracts/interfaces/IMailer__factory.js +175 -0
  268. package/dist/evm/typechain-types/factories/contracts/interfaces/IMailer__factory.js.map +1 -0
  269. package/dist/evm/typechain-types/factories/contracts/interfaces/index.d.ts +3 -0
  270. package/dist/evm/typechain-types/factories/contracts/interfaces/index.d.ts.map +1 -0
  271. package/dist/evm/typechain-types/factories/{interfaces → contracts/interfaces}/index.js +3 -1
  272. package/dist/evm/typechain-types/factories/contracts/interfaces/index.js.map +1 -0
  273. package/dist/evm/typechain-types/factories/index.d.ts +2 -3
  274. package/dist/evm/typechain-types/factories/index.d.ts.map +1 -1
  275. package/dist/evm/typechain-types/factories/index.js +3 -6
  276. package/dist/evm/typechain-types/factories/index.js.map +1 -1
  277. package/dist/evm/typechain-types/index.d.ts +34 -8
  278. package/dist/evm/typechain-types/index.d.ts.map +1 -1
  279. package/dist/evm/typechain-types/index.js +28 -4
  280. package/dist/evm/typechain-types/index.js.map +1 -1
  281. package/dist/unified/src/evm/evm-mailer-client.d.ts +184 -8
  282. package/dist/unified/src/evm/evm-mailer-client.d.ts.map +1 -1
  283. package/dist/unified/src/evm/evm-mailer-client.js +3 -2
  284. package/dist/unified/src/evm/evm-mailer-client.js.map +1 -1
  285. package/dist/unified/src/evm/index.d.ts +2 -2
  286. package/dist/unified/src/evm/index.d.ts.map +1 -1
  287. package/dist/unified/src/evm/index.js +1 -1
  288. package/dist/unified/src/evm/index.js.map +1 -1
  289. package/dist/unified/typechain-types/@openzeppelin/contracts/index.d.ts +7 -0
  290. package/dist/unified/typechain-types/@openzeppelin/contracts/index.d.ts.map +1 -0
  291. package/dist/unified/typechain-types/@openzeppelin/contracts/index.js +2 -0
  292. package/dist/unified/typechain-types/@openzeppelin/contracts/index.js.map +1 -0
  293. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/IERC1967.d.ts +66 -0
  294. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/IERC1967.d.ts.map +1 -0
  295. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/IERC1967.js +2 -0
  296. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/IERC1967.js.map +1 -0
  297. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.d.ts +26 -0
  298. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.d.ts.map +1 -0
  299. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.js +2 -0
  300. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.js.map +1 -0
  301. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.d.ts +2 -0
  302. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.d.ts.map +1 -0
  303. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.js +2 -0
  304. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.js.map +1 -0
  305. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/index.d.ts +4 -0
  306. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/index.d.ts.map +1 -0
  307. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/index.js +2 -0
  308. package/dist/unified/typechain-types/@openzeppelin/contracts/interfaces/index.js.map +1 -0
  309. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.d.ts +21 -0
  310. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.d.ts.map +1 -0
  311. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.js +2 -0
  312. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.js.map +1 -0
  313. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/ERC1967/index.d.ts +2 -0
  314. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/ERC1967/index.d.ts.map +1 -0
  315. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/ERC1967/index.js +2 -0
  316. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/ERC1967/index.js.map +1 -0
  317. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/beacon/IBeacon.d.ts +26 -0
  318. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/beacon/IBeacon.d.ts.map +1 -0
  319. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/beacon/IBeacon.js +2 -0
  320. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/beacon/IBeacon.js.map +1 -0
  321. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/beacon/index.d.ts +2 -0
  322. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/beacon/index.d.ts.map +1 -0
  323. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/beacon/index.js +2 -0
  324. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/beacon/index.js.map +1 -0
  325. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/index.d.ts +5 -0
  326. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/index.d.ts.map +1 -0
  327. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/index.js +2 -0
  328. package/dist/unified/typechain-types/@openzeppelin/contracts/proxy/index.js.map +1 -0
  329. package/dist/unified/typechain-types/@openzeppelin/contracts/utils/Address.d.ts +21 -0
  330. package/dist/unified/typechain-types/@openzeppelin/contracts/utils/Address.d.ts.map +1 -0
  331. package/dist/unified/typechain-types/@openzeppelin/contracts/utils/Address.js +2 -0
  332. package/dist/unified/typechain-types/@openzeppelin/contracts/utils/Address.js.map +1 -0
  333. package/dist/unified/typechain-types/@openzeppelin/contracts/utils/Errors.d.ts +21 -0
  334. package/dist/unified/typechain-types/@openzeppelin/contracts/utils/Errors.d.ts.map +1 -0
  335. package/dist/unified/typechain-types/@openzeppelin/contracts/utils/Errors.js +2 -0
  336. package/dist/unified/typechain-types/@openzeppelin/contracts/utils/Errors.js.map +1 -0
  337. package/dist/unified/typechain-types/@openzeppelin/contracts/utils/index.d.ts +3 -0
  338. package/dist/unified/typechain-types/@openzeppelin/contracts/utils/index.d.ts.map +1 -0
  339. package/dist/unified/typechain-types/@openzeppelin/contracts/utils/index.js +2 -0
  340. package/dist/unified/typechain-types/@openzeppelin/contracts/utils/index.js.map +1 -0
  341. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.d.ts +69 -0
  342. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.d.ts.map +1 -0
  343. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.js +2 -0
  344. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.js.map +1 -0
  345. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/access/index.d.ts +2 -0
  346. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/access/index.d.ts.map +1 -0
  347. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/access/index.js.map +1 -0
  348. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/index.d.ts +7 -0
  349. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/index.d.ts.map +1 -0
  350. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/index.js +2 -0
  351. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/index.js.map +1 -0
  352. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/index.d.ts +3 -0
  353. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/index.d.ts.map +1 -0
  354. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/index.js +2 -0
  355. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/index.js.map +1 -0
  356. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.d.ts +37 -0
  357. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.d.ts.map +1 -0
  358. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.js +2 -0
  359. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.js.map +1 -0
  360. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.d.ts +74 -0
  361. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.d.ts.map +1 -0
  362. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.js +2 -0
  363. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.js.map +1 -0
  364. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/index.d.ts +3 -0
  365. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/index.d.ts.map +1 -0
  366. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/index.js +2 -0
  367. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/index.js.map +1 -0
  368. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.d.ts +37 -0
  369. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.d.ts.map +1 -0
  370. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.js +2 -0
  371. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.js.map +1 -0
  372. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/utils/index.d.ts +2 -0
  373. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/utils/index.d.ts.map +1 -0
  374. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/utils/index.js +2 -0
  375. package/dist/unified/typechain-types/@openzeppelin/contracts-upgradeable/utils/index.js.map +1 -0
  376. package/dist/unified/typechain-types/@openzeppelin/index.d.ts +5 -0
  377. package/dist/unified/typechain-types/@openzeppelin/index.d.ts.map +1 -0
  378. package/dist/unified/typechain-types/@openzeppelin/index.js +2 -0
  379. package/dist/unified/typechain-types/@openzeppelin/index.js.map +1 -0
  380. package/dist/unified/typechain-types/{Mailer.d.ts → contracts/Mailer.d.ts} +135 -21
  381. package/dist/unified/typechain-types/contracts/Mailer.d.ts.map +1 -0
  382. package/dist/unified/typechain-types/contracts/Mailer.js.map +1 -0
  383. package/dist/unified/typechain-types/{MockUSDC.d.ts → contracts/MockUSDC.d.ts} +1 -1
  384. package/dist/unified/typechain-types/contracts/MockUSDC.d.ts.map +1 -0
  385. package/dist/unified/typechain-types/contracts/MockUSDC.js.map +1 -0
  386. package/dist/unified/typechain-types/contracts/examples/MailerIntegrationExample.d.ts +170 -0
  387. package/dist/unified/typechain-types/contracts/examples/MailerIntegrationExample.d.ts.map +1 -0
  388. package/dist/unified/typechain-types/contracts/examples/MailerIntegrationExample.js +2 -0
  389. package/dist/unified/typechain-types/contracts/examples/MailerIntegrationExample.js.map +1 -0
  390. package/dist/unified/typechain-types/contracts/examples/index.d.ts +2 -0
  391. package/dist/unified/typechain-types/contracts/examples/index.d.ts.map +1 -0
  392. package/dist/unified/typechain-types/contracts/examples/index.js +2 -0
  393. package/dist/unified/typechain-types/contracts/examples/index.js.map +1 -0
  394. package/dist/unified/typechain-types/contracts/index.d.ts +7 -0
  395. package/dist/unified/typechain-types/contracts/index.d.ts.map +1 -0
  396. package/dist/unified/typechain-types/contracts/index.js +2 -0
  397. package/dist/unified/typechain-types/contracts/index.js.map +1 -0
  398. package/dist/{evm/typechain-types → unified/typechain-types/contracts}/interfaces/IERC20.d.ts +1 -1
  399. package/dist/unified/typechain-types/contracts/interfaces/IERC20.d.ts.map +1 -0
  400. package/dist/unified/typechain-types/contracts/interfaces/IERC20.js.map +1 -0
  401. package/dist/unified/typechain-types/contracts/interfaces/IMailer.d.ts +118 -0
  402. package/dist/unified/typechain-types/contracts/interfaces/IMailer.d.ts.map +1 -0
  403. package/dist/unified/typechain-types/contracts/interfaces/IMailer.js +2 -0
  404. package/dist/unified/typechain-types/contracts/interfaces/IMailer.js.map +1 -0
  405. package/dist/unified/typechain-types/contracts/interfaces/index.d.ts +3 -0
  406. package/dist/unified/typechain-types/contracts/interfaces/index.d.ts.map +1 -0
  407. package/dist/unified/typechain-types/contracts/interfaces/index.js +2 -0
  408. package/dist/unified/typechain-types/contracts/interfaces/index.js.map +1 -0
  409. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/index.d.ts +4 -0
  410. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/index.d.ts.map +1 -0
  411. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/index.js +7 -0
  412. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/index.js.map +1 -0
  413. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1967__factory.d.ts +43 -0
  414. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1967__factory.d.ts.map +1 -0
  415. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1967__factory.js +61 -0
  416. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1967__factory.js.map +1 -0
  417. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.d.ts +18 -0
  418. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.d.ts.map +1 -0
  419. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.js +29 -0
  420. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.js.map +1 -0
  421. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.d.ts +2 -0
  422. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.d.ts.map +1 -0
  423. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.js +5 -0
  424. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.js.map +1 -0
  425. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/index.d.ts +3 -0
  426. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/index.d.ts.map +1 -0
  427. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/index.js +6 -0
  428. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/interfaces/index.js.map +1 -0
  429. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.d.ts +51 -0
  430. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.d.ts.map +1 -0
  431. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.js +74 -0
  432. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.js.map +1 -0
  433. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/index.d.ts +2 -0
  434. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/index.d.ts.map +1 -0
  435. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/index.js +5 -0
  436. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/index.js.map +1 -0
  437. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.d.ts +18 -0
  438. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.d.ts.map +1 -0
  439. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.js +29 -0
  440. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.js.map +1 -0
  441. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/index.d.ts +2 -0
  442. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/index.d.ts.map +1 -0
  443. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/index.js +5 -0
  444. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/index.js.map +1 -0
  445. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/index.d.ts +3 -0
  446. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/index.d.ts.map +1 -0
  447. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/index.js +6 -0
  448. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/proxy/index.js.map +1 -0
  449. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.d.ts +31 -0
  450. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.d.ts.map +1 -0
  451. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.js +47 -0
  452. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.js.map +1 -0
  453. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/utils/Errors__factory.d.ts +51 -0
  454. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/utils/Errors__factory.d.ts.map +1 -0
  455. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/utils/Errors__factory.js +73 -0
  456. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/utils/Errors__factory.js.map +1 -0
  457. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/utils/index.d.ts +3 -0
  458. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/utils/index.d.ts.map +1 -0
  459. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/utils/index.js +6 -0
  460. package/dist/unified/typechain-types/factories/@openzeppelin/contracts/utils/index.js.map +1 -0
  461. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.d.ts +83 -0
  462. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.d.ts.map +1 -0
  463. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.js +113 -0
  464. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.js.map +1 -0
  465. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/index.d.ts +2 -0
  466. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/index.d.ts.map +1 -0
  467. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/index.js +5 -0
  468. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/index.js.map +1 -0
  469. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/index.d.ts +4 -0
  470. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/index.d.ts.map +1 -0
  471. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/index.js +7 -0
  472. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/index.js.map +1 -0
  473. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/index.d.ts +2 -0
  474. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/index.d.ts.map +1 -0
  475. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/index.js +5 -0
  476. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/index.js.map +1 -0
  477. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.d.ts +26 -0
  478. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.d.ts.map +1 -0
  479. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.js +39 -0
  480. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.js.map +1 -0
  481. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable__factory.d.ts +106 -0
  482. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable__factory.d.ts.map +1 -0
  483. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable__factory.js +144 -0
  484. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable__factory.js.map +1 -0
  485. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.d.ts +3 -0
  486. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.d.ts.map +1 -0
  487. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.js +6 -0
  488. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.js.map +1 -0
  489. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.d.ts +26 -0
  490. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.d.ts.map +1 -0
  491. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.js +39 -0
  492. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.js.map +1 -0
  493. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/index.d.ts +2 -0
  494. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/index.d.ts.map +1 -0
  495. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/index.js +5 -0
  496. package/dist/unified/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/index.js.map +1 -0
  497. package/dist/unified/typechain-types/factories/@openzeppelin/index.d.ts +3 -0
  498. package/dist/unified/typechain-types/factories/@openzeppelin/index.d.ts.map +1 -0
  499. package/dist/unified/typechain-types/factories/@openzeppelin/index.js +6 -0
  500. package/dist/unified/typechain-types/factories/@openzeppelin/index.js.map +1 -0
  501. package/dist/unified/typechain-types/factories/contracts/Mailer__factory.d.ts +1061 -0
  502. package/dist/unified/typechain-types/factories/contracts/Mailer__factory.d.ts.map +1 -0
  503. package/dist/unified/typechain-types/factories/contracts/Mailer__factory.js +1360 -0
  504. package/dist/unified/typechain-types/factories/contracts/Mailer__factory.js.map +1 -0
  505. package/dist/unified/typechain-types/factories/{MockUSDC__factory.d.ts → contracts/MockUSDC__factory.d.ts} +3 -3
  506. package/dist/unified/typechain-types/factories/contracts/MockUSDC__factory.d.ts.map +1 -0
  507. package/dist/unified/typechain-types/factories/{MockUSDC__factory.js → contracts/MockUSDC__factory.js} +1 -1
  508. package/dist/unified/typechain-types/factories/contracts/MockUSDC__factory.js.map +1 -0
  509. package/dist/unified/typechain-types/factories/contracts/examples/MailerIntegrationExample__factory.d.ts +209 -0
  510. package/dist/unified/typechain-types/factories/contracts/examples/MailerIntegrationExample__factory.d.ts.map +1 -0
  511. package/dist/unified/typechain-types/factories/contracts/examples/MailerIntegrationExample__factory.js +274 -0
  512. package/dist/unified/typechain-types/factories/contracts/examples/MailerIntegrationExample__factory.js.map +1 -0
  513. package/dist/unified/typechain-types/factories/contracts/examples/index.d.ts +2 -0
  514. package/dist/unified/typechain-types/factories/contracts/examples/index.d.ts.map +1 -0
  515. package/dist/unified/typechain-types/factories/contracts/examples/index.js +5 -0
  516. package/dist/unified/typechain-types/factories/contracts/examples/index.js.map +1 -0
  517. package/dist/unified/typechain-types/factories/contracts/index.d.ts +5 -0
  518. package/dist/unified/typechain-types/factories/contracts/index.d.ts.map +1 -0
  519. package/dist/unified/typechain-types/factories/contracts/index.js +8 -0
  520. package/dist/unified/typechain-types/factories/contracts/index.js.map +1 -0
  521. package/dist/unified/typechain-types/factories/{interfaces → contracts/interfaces}/IERC20__factory.d.ts +1 -1
  522. package/dist/unified/typechain-types/factories/contracts/interfaces/IERC20__factory.d.ts.map +1 -0
  523. package/dist/unified/typechain-types/factories/contracts/interfaces/IERC20__factory.js.map +1 -0
  524. package/dist/unified/typechain-types/factories/contracts/interfaces/IMailer__factory.d.ts +130 -0
  525. package/dist/unified/typechain-types/factories/contracts/interfaces/IMailer__factory.d.ts.map +1 -0
  526. package/dist/unified/typechain-types/factories/contracts/interfaces/IMailer__factory.js +171 -0
  527. package/dist/unified/typechain-types/factories/contracts/interfaces/IMailer__factory.js.map +1 -0
  528. package/dist/unified/typechain-types/factories/contracts/interfaces/index.d.ts +3 -0
  529. package/dist/unified/typechain-types/factories/contracts/interfaces/index.d.ts.map +1 -0
  530. package/dist/unified/typechain-types/factories/{interfaces → contracts/interfaces}/index.js +1 -0
  531. package/dist/unified/typechain-types/factories/contracts/interfaces/index.js.map +1 -0
  532. package/dist/unified/typechain-types/factories/index.d.ts +2 -3
  533. package/dist/unified/typechain-types/factories/index.d.ts.map +1 -1
  534. package/dist/unified/typechain-types/factories/index.js +2 -3
  535. package/dist/unified/typechain-types/factories/index.js.map +1 -1
  536. package/dist/unified/typechain-types/index.d.ts +34 -8
  537. package/dist/unified/typechain-types/index.d.ts.map +1 -1
  538. package/dist/unified/typechain-types/index.js +15 -3
  539. package/dist/unified/typechain-types/index.js.map +1 -1
  540. package/package.json +9 -3
  541. package/programs/mailer/Cargo.toml +13 -0
  542. package/programs/mailer/src/cpi.rs +330 -0
  543. package/programs/mailer/src/lib.rs +252 -114
  544. package/programs/mailer/tests/integration_tests.rs +8399 -146
  545. package/programs/mailer/tests/integration_tests.rs.backup +5124 -0
  546. package/programs/mailer-integration-example/Cargo.toml +23 -0
  547. package/programs/mailer-integration-example/src/lib.rs +362 -0
  548. package/typechain-types/@openzeppelin/contracts/index.ts +9 -0
  549. package/typechain-types/@openzeppelin/contracts/interfaces/IERC1967.ts +168 -0
  550. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.ts +90 -0
  551. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts +4 -0
  552. package/typechain-types/@openzeppelin/contracts/interfaces/index.ts +6 -0
  553. package/typechain-types/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.ts +69 -0
  554. package/typechain-types/@openzeppelin/contracts/proxy/ERC1967/index.ts +4 -0
  555. package/typechain-types/@openzeppelin/contracts/proxy/beacon/IBeacon.ts +90 -0
  556. package/typechain-types/@openzeppelin/contracts/proxy/beacon/index.ts +4 -0
  557. package/typechain-types/@openzeppelin/contracts/proxy/index.ts +7 -0
  558. package/typechain-types/@openzeppelin/contracts/utils/Address.ts +69 -0
  559. package/typechain-types/@openzeppelin/contracts/utils/Errors.ts +69 -0
  560. package/typechain-types/@openzeppelin/contracts/utils/index.ts +5 -0
  561. package/typechain-types/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.ts +186 -0
  562. package/typechain-types/@openzeppelin/contracts-upgradeable/access/index.ts +4 -0
  563. package/typechain-types/@openzeppelin/contracts-upgradeable/index.ts +9 -0
  564. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/index.ts +5 -0
  565. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.ts +105 -0
  566. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.ts +196 -0
  567. package/typechain-types/@openzeppelin/contracts-upgradeable/proxy/utils/index.ts +5 -0
  568. package/typechain-types/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.ts +105 -0
  569. package/typechain-types/@openzeppelin/contracts-upgradeable/utils/index.ts +4 -0
  570. package/typechain-types/@openzeppelin/index.ts +7 -0
  571. package/typechain-types/{Mailer.ts → contracts/Mailer.ts} +237 -19
  572. package/typechain-types/{MockUSDC.ts → contracts/MockUSDC.ts} +1 -1
  573. package/typechain-types/contracts/examples/MailerIntegrationExample.ts +352 -0
  574. package/typechain-types/contracts/examples/index.ts +4 -0
  575. package/typechain-types/contracts/index.ts +9 -0
  576. package/typechain-types/{interfaces → contracts/interfaces}/IERC20.ts +1 -1
  577. package/typechain-types/contracts/interfaces/IMailer.ts +225 -0
  578. package/typechain-types/{interfaces → contracts/interfaces}/index.ts +1 -0
  579. package/typechain-types/factories/@openzeppelin/contracts/index.ts +6 -0
  580. package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC1967__factory.ts +67 -0
  581. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable__factory.ts +38 -0
  582. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/index.ts +4 -0
  583. package/typechain-types/factories/@openzeppelin/contracts/interfaces/index.ts +5 -0
  584. package/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils__factory.ts +105 -0
  585. package/typechain-types/factories/@openzeppelin/contracts/proxy/ERC1967/index.ts +4 -0
  586. package/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/IBeacon__factory.ts +35 -0
  587. package/typechain-types/factories/@openzeppelin/contracts/proxy/beacon/index.ts +4 -0
  588. package/typechain-types/factories/@openzeppelin/contracts/proxy/index.ts +5 -0
  589. package/typechain-types/factories/@openzeppelin/contracts/utils/Address__factory.ts +75 -0
  590. package/typechain-types/factories/@openzeppelin/contracts/utils/Errors__factory.ts +101 -0
  591. package/typechain-types/factories/@openzeppelin/contracts/utils/index.ts +5 -0
  592. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable__factory.ts +122 -0
  593. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/access/index.ts +4 -0
  594. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/index.ts +6 -0
  595. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/index.ts +4 -0
  596. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable__factory.ts +48 -0
  597. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable__factory.ts +153 -0
  598. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/proxy/utils/index.ts +5 -0
  599. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable__factory.ts +48 -0
  600. package/typechain-types/factories/@openzeppelin/contracts-upgradeable/utils/index.ts +4 -0
  601. package/typechain-types/factories/@openzeppelin/index.ts +5 -0
  602. package/typechain-types/factories/contracts/Mailer__factory.ts +1385 -0
  603. package/typechain-types/factories/{MockUSDC__factory.ts → contracts/MockUSDC__factory.ts} +3 -3
  604. package/typechain-types/factories/contracts/examples/MailerIntegrationExample__factory.ts +330 -0
  605. package/typechain-types/factories/contracts/examples/index.ts +4 -0
  606. package/typechain-types/factories/contracts/index.ts +7 -0
  607. package/typechain-types/factories/{interfaces → contracts/interfaces}/IERC20__factory.ts +4 -1
  608. package/typechain-types/factories/contracts/interfaces/IMailer__factory.ts +177 -0
  609. package/typechain-types/factories/{interfaces → contracts/interfaces}/index.ts +1 -0
  610. package/typechain-types/factories/index.ts +2 -3
  611. package/typechain-types/hardhat.d.ts +216 -0
  612. package/typechain-types/index.ts +34 -8
  613. package/dist/evm/typechain-types/Mailer.d.ts.map +0 -1
  614. package/dist/evm/typechain-types/Mailer.js.map +0 -1
  615. package/dist/evm/typechain-types/MockUSDC.d.ts.map +0 -1
  616. package/dist/evm/typechain-types/MockUSDC.js.map +0 -1
  617. package/dist/evm/typechain-types/factories/Mailer__factory.d.ts +0 -885
  618. package/dist/evm/typechain-types/factories/Mailer__factory.d.ts.map +0 -1
  619. package/dist/evm/typechain-types/factories/Mailer__factory.js +0 -1138
  620. package/dist/evm/typechain-types/factories/Mailer__factory.js.map +0 -1
  621. package/dist/evm/typechain-types/factories/MockUSDC__factory.d.ts.map +0 -1
  622. package/dist/evm/typechain-types/factories/MockUSDC__factory.js.map +0 -1
  623. package/dist/evm/typechain-types/factories/interfaces/IERC20__factory.d.ts.map +0 -1
  624. package/dist/evm/typechain-types/factories/interfaces/IERC20__factory.js.map +0 -1
  625. package/dist/evm/typechain-types/factories/interfaces/index.d.ts +0 -2
  626. package/dist/evm/typechain-types/factories/interfaces/index.d.ts.map +0 -1
  627. package/dist/evm/typechain-types/factories/interfaces/index.js.map +0 -1
  628. package/dist/evm/typechain-types/interfaces/IERC20.d.ts.map +0 -1
  629. package/dist/evm/typechain-types/interfaces/IERC20.js.map +0 -1
  630. package/dist/evm/typechain-types/interfaces/index.d.ts +0 -2
  631. package/dist/evm/typechain-types/interfaces/index.d.ts.map +0 -1
  632. package/dist/evm/typechain-types/interfaces/index.js.map +0 -1
  633. package/dist/unified/typechain-types/Mailer.d.ts.map +0 -1
  634. package/dist/unified/typechain-types/Mailer.js.map +0 -1
  635. package/dist/unified/typechain-types/MockUSDC.d.ts.map +0 -1
  636. package/dist/unified/typechain-types/MockUSDC.js.map +0 -1
  637. package/dist/unified/typechain-types/factories/Mailer__factory.d.ts +0 -885
  638. package/dist/unified/typechain-types/factories/Mailer__factory.d.ts.map +0 -1
  639. package/dist/unified/typechain-types/factories/Mailer__factory.js +0 -1134
  640. package/dist/unified/typechain-types/factories/Mailer__factory.js.map +0 -1
  641. package/dist/unified/typechain-types/factories/MockUSDC__factory.d.ts.map +0 -1
  642. package/dist/unified/typechain-types/factories/MockUSDC__factory.js.map +0 -1
  643. package/dist/unified/typechain-types/factories/interfaces/IERC20__factory.d.ts.map +0 -1
  644. package/dist/unified/typechain-types/factories/interfaces/IERC20__factory.js.map +0 -1
  645. package/dist/unified/typechain-types/factories/interfaces/index.d.ts +0 -2
  646. package/dist/unified/typechain-types/factories/interfaces/index.d.ts.map +0 -1
  647. package/dist/unified/typechain-types/factories/interfaces/index.js.map +0 -1
  648. package/dist/unified/typechain-types/interfaces/IERC20.d.ts.map +0 -1
  649. package/dist/unified/typechain-types/interfaces/IERC20.js.map +0 -1
  650. package/dist/unified/typechain-types/interfaces/index.d.ts +0 -2
  651. package/dist/unified/typechain-types/interfaces/index.d.ts.map +0 -1
  652. package/dist/unified/typechain-types/interfaces/index.js.map +0 -1
  653. package/typechain-types/factories/Mailer__factory.ts +0 -1170
  654. /package/dist/evm/typechain-types/{interfaces → @openzeppelin/contracts-upgradeable/access}/index.js +0 -0
  655. /package/dist/evm/typechain-types/{Mailer.js → contracts/Mailer.js} +0 -0
  656. /package/dist/evm/typechain-types/{MockUSDC.js → contracts/MockUSDC.js} +0 -0
  657. /package/dist/evm/typechain-types/{interfaces → contracts/interfaces}/IERC20.js +0 -0
  658. /package/dist/evm/typechain-types/factories/{interfaces → contracts/interfaces}/IERC20__factory.js +0 -0
  659. /package/dist/unified/typechain-types/{interfaces → @openzeppelin/contracts-upgradeable/access}/index.js +0 -0
  660. /package/dist/unified/typechain-types/{Mailer.js → contracts/Mailer.js} +0 -0
  661. /package/dist/unified/typechain-types/{MockUSDC.js → contracts/MockUSDC.js} +0 -0
  662. /package/dist/unified/typechain-types/{interfaces → contracts/interfaces}/IERC20.js +0 -0
  663. /package/dist/unified/typechain-types/factories/{interfaces → contracts/interfaces}/IERC20__factory.js +0 -0
@@ -0,0 +1,922 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.24;
3
+
4
+ /**
5
+ * @title Mailer
6
+ * @notice Decentralized messaging system with delegation management, USDC fees and revenue sharing
7
+ * @dev Two-tier messaging fee system + delegation management with rejection capability
8
+ * Upgradable contract using UUPS proxy pattern
9
+ * @author Mailer Team
10
+ */
11
+
12
+ import "./interfaces/IERC20.sol";
13
+ import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
14
+ import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
15
+ import "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol";
16
+
17
+ contract Mailer is Initializable, OwnableUpgradeable, UUPSUpgradeable {
18
+ /// @notice USDC token contract for fee payments
19
+ IERC20 public usdcToken;
20
+
21
+ /// @notice Time limit for recipients to claim their revenue share (60 days)
22
+ uint256 public constant CLAIM_PERIOD = 60 days;
23
+
24
+ /// @notice Percentage of fee that goes to message sender as revenue share
25
+ uint8 internal constant RECIPIENT_SHARE = 90; // 90%
26
+
27
+ /// @notice Percentage of fee that goes to contract owner
28
+ uint8 internal constant OWNER_SHARE = 10; // 10%
29
+
30
+ // ============================================
31
+ // STORAGE LAYOUT - OPTIMIZED FOR GAS EFFICIENCY
32
+ // ============================================
33
+ // Slot 0 (32 bytes): sendFee (16) + delegationFee (16) = 32 bytes ✅
34
+ // Slot 1 (19 bytes): ownerClaimable (16) + _status (1) + paused (1) + feePaused (1) = 19 bytes ✅
35
+ // Total: 2 storage slots for all state variables
36
+ // This packing saves ~40,000 gas per deployment and ~5,000 gas per write operation
37
+ // ============================================
38
+
39
+ /// @notice Base sending fee (0.1 USDC with 6 decimals) - packed with delegationFee in Slot 0
40
+ uint128 public sendFee;
41
+
42
+ /// @notice Fee required for delegation operations (10 USDC with 6 decimals) - packed with sendFee in Slot 0
43
+ uint128 public delegationFee;
44
+
45
+ /// @notice Total USDC amount claimable by contract owner - packed with status/bools in Slot 1
46
+ uint128 public ownerClaimable;
47
+
48
+ /// @notice Reentrancy guard status - packed with ownerClaimable in Slot 1
49
+ uint8 private _status;
50
+
51
+ /// @notice Contract pause state - packed with ownerClaimable in Slot 1
52
+ bool public paused;
53
+
54
+ /// @notice Fee pause state - packed with ownerClaimable in Slot 1
55
+ bool public feePaused;
56
+
57
+ /// @notice Structure for tracking claimable amounts with timestamp
58
+ /// @dev STORAGE OPTIMIZATION: Packed into 1 slot (32 bytes total)
59
+ /// - amount: uint192 (24 bytes) - max ~6.2e57, far exceeds total USDC supply (~6e16)
60
+ /// - timestamp: uint64 (8 bytes) - valid until year 584,942,417,355 AD
61
+ /// This packing saves 20,000 gas per new recipient vs using uint256 for both
62
+ /// @param amount USDC amount claimable by recipient
63
+ /// @param timestamp Unix timestamp when claimable amount was last updated
64
+ struct ClaimableAmount {
65
+ uint192 amount; // 24 bytes
66
+ uint64 timestamp; // 8 bytes
67
+ } // Total: 32 bytes = 1 slot ✅
68
+
69
+ /// @notice Mapping of recipient addresses to their claimable revenue shares
70
+ mapping(address => ClaimableAmount) public recipientClaims;
71
+
72
+ /// @notice Mapping of addresses to their custom fee discount (0-100)
73
+ /// @dev 0 = no discount (full fee), 100 = full discount (free)
74
+ /// Internally stores discount instead of percentage for cleaner logic
75
+ mapping(address => uint8) public customFeeDiscount;
76
+
77
+ /// @notice Mapping of contract addresses to authorized wallet addresses that can pay fees
78
+ /// @dev Allows smart contracts to send messages while authorized wallets pay the fees
79
+ /// permissions[contractAddress][walletAddress] = true/false
80
+ /// Multiple wallets can be authorized per contract for security
81
+ mapping(address => mapping(address => bool)) public permissions;
82
+
83
+ event MailSent(
84
+ address indexed from,
85
+ address indexed to,
86
+ string subject,
87
+ string body,
88
+ bool revenueShareToReceiver,
89
+ bool resolveSenderToName,
90
+ bool feePaid
91
+ );
92
+
93
+ event PreparedMailSent(
94
+ address indexed from,
95
+ address indexed to,
96
+ string indexed mailId,
97
+ bool revenueShareToReceiver,
98
+ bool resolveSenderToName,
99
+ bool feePaid
100
+ );
101
+
102
+ event MailSentToEmail(
103
+ address indexed from,
104
+ string toEmail,
105
+ string subject,
106
+ string body,
107
+ bool feePaid
108
+ );
109
+
110
+ event PreparedMailSentToEmail(
111
+ address indexed from,
112
+ string toEmail,
113
+ string indexed mailId,
114
+ bool feePaid
115
+ );
116
+
117
+ event WebhookMailSent(
118
+ address indexed from,
119
+ address indexed to,
120
+ string indexed webhookId,
121
+ bool revenueShareToReceiver,
122
+ bool resolveSenderToName,
123
+ bool feePaid
124
+ );
125
+
126
+ event FeeUpdated(uint256 oldFee, uint256 newFee);
127
+ event SharesRecorded(address indexed recipient, uint256 recipientAmount, uint256 ownerAmount);
128
+ event RecipientClaimed(address indexed recipient, uint256 amount);
129
+ event OwnerClaimed(uint256 amount);
130
+ event ExpiredSharesClaimed(address indexed recipient, uint256 amount);
131
+
132
+ /// @notice Emitted when delegation is set or cleared
133
+ /// @param delegator The address setting the delegation
134
+ /// @param delegate The delegate address (address(0) for clearing)
135
+ event DelegationSet(address indexed delegator, address indexed delegate);
136
+
137
+ /// @notice Emitted when delegation fee is updated
138
+ /// @param oldFee Previous fee amount
139
+ /// @param newFee New fee amount
140
+ event DelegationFeeUpdated(uint256 oldFee, uint256 newFee);
141
+
142
+ /// @notice Emitted when contract is paused and funds are distributed
143
+ event ContractPaused();
144
+
145
+ /// @notice Emitted when contract is unpaused
146
+ event ContractUnpaused();
147
+
148
+ /// @notice Emitted when contract is emergency unpaused without fund distribution
149
+ event EmergencyUnpaused();
150
+
151
+ /// @notice Emitted when fee collection is toggled
152
+ /// @param feePaused True if fees are paused, false otherwise
153
+ event FeePauseToggled(bool feePaused);
154
+
155
+ /// @notice Emitted when funds are auto-distributed during pause
156
+ /// @param recipient Address receiving funds
157
+ /// @param amount Amount distributed
158
+ event FundsDistributed(address indexed recipient, uint256 amount);
159
+
160
+ /// @notice Emitted when custom fee percentage is set for an address
161
+ /// @param account Address that received custom fee percentage
162
+ /// @param percentage Fee percentage (0-100)
163
+ event CustomFeePercentageSet(address indexed account, uint256 percentage);
164
+
165
+ /// @notice Emitted when a wallet grants permission for a contract to send messages
166
+ /// @param contractAddress The contract being granted permission
167
+ /// @param wallet The wallet that will pay fees for the contract
168
+ event PermissionGranted(address indexed contractAddress, address indexed wallet);
169
+
170
+ /// @notice Emitted when permission is revoked
171
+ /// @param contractAddress The contract having permission revoked
172
+ /// @param wallet The wallet that was paying fees
173
+ event PermissionRevoked(address indexed contractAddress, address indexed wallet);
174
+
175
+ error OnlyOwner();
176
+ error NoClaimableAmount();
177
+ error ClaimPeriodNotExpired();
178
+ error FeePaymentRequired();
179
+ error TransferFailed();
180
+ error ReentrancyGuard();
181
+ error InvalidAddress();
182
+ error MathOverflow();
183
+ error ContractIsPaused();
184
+ error ContractNotPaused();
185
+ error InvalidPercentage();
186
+ error UnpermittedPayer();
187
+
188
+ modifier nonReentrant() {
189
+ if (_status == 1) {
190
+ revert ReentrancyGuard();
191
+ }
192
+ _status = 1;
193
+ _;
194
+ _status = 0;
195
+ }
196
+
197
+ modifier whenNotPaused() {
198
+ if (paused) {
199
+ revert ContractIsPaused();
200
+ }
201
+ _;
202
+ }
203
+
204
+ /// @custom:oz-upgrades-unsafe-allow constructor
205
+ constructor() {
206
+ _disableInitializers();
207
+ }
208
+
209
+ /**
210
+ * @notice Initialize the contract (replaces constructor for upgradeable pattern)
211
+ * @param _usdcToken Address of the USDC token contract
212
+ * @param _owner Address of the contract owner
213
+ */
214
+ function initialize(address _usdcToken, address _owner) public initializer {
215
+ if (_usdcToken == address(0) || _owner == address(0)) {
216
+ revert InvalidAddress();
217
+ }
218
+
219
+ __Ownable_init(_owner);
220
+ __UUPSUpgradeable_init();
221
+
222
+ usdcToken = IERC20(_usdcToken);
223
+ sendFee = 100000; // 0.1 USDC with 6 decimals
224
+ delegationFee = 10000000; // 10 USDC with 6 decimals
225
+ }
226
+
227
+ /**
228
+ * @notice Authorize contract upgrades (UUPS requirement)
229
+ * @dev Only owner can authorize upgrades
230
+ */
231
+ function _authorizeUpgrade(address newImplementation) internal override onlyOwner {}
232
+
233
+
234
+ /**
235
+ * @notice Send a message with optional revenue sharing
236
+ * @dev Two modes based on revenueShareToReceiver flag:
237
+ * - true (Priority): Charges full sendFee (0.1 USDC), receiver gets 90% back as claimable within 60 days of the last reward
238
+ * - false (Standard): Charges only 10% of sendFee (0.01 USDC), no claimable amount
239
+ *
240
+ * IMPORTANT - SOFT-FAIL BEHAVIOR:
241
+ * This function is designed for composability with other smart contracts.
242
+ * If fee payment fails (insufficient balance, no approval, etc.), the transaction
243
+ * WILL NOT REVERT. Instead, no event is emitted and the message is silently dropped.
244
+ * This allows calling contracts to continue execution without failing.
245
+ *
246
+ * For off-chain applications: Monitor the MailSent event. If the transaction succeeds
247
+ * but no event is emitted, the message was not sent due to fee payment failure.
248
+ *
249
+ * @param to Recipient address who receives the message and potential revenue share
250
+ * @param subject Message subject line
251
+ * @param body Message body content
252
+ * @param payer Address that will pay the USDC fee (must be authorized if msg.sender is a contract)
253
+ * @param revenueShareToReceiver If true, receiver gets 90% revenue share; if false, no revenue share
254
+ * @param resolveSenderToName If true, resolve sender address to name via off-chain service
255
+ *
256
+ * Cost for payer:
257
+ * - Priority (revenueShareToReceiver=true): Payer pays 0.1 USDC, receiver gets 0.09 USDC claimable
258
+ * - Standard (revenueShareToReceiver=false): Payer pays 0.01 USDC only
259
+ *
260
+ * Why use Standard? Lower upfront cost, no revenue tracking needed.
261
+ * Why use Priority? Reward the recipient with claimable revenue share.
262
+ *
263
+ * Requirements:
264
+ * - Contract must not be paused
265
+ * - Payer must have approved this contract to spend required USDC amount
266
+ * - Payer must have sufficient USDC balance
267
+ * - If msg.sender is a contract, payer must be in permissions[msg.sender]
268
+ */
269
+ function send(
270
+ address to,
271
+ string calldata subject,
272
+ string calldata body,
273
+ address payer,
274
+ bool revenueShareToReceiver,
275
+ bool resolveSenderToName
276
+ ) external nonReentrant whenNotPaused {
277
+ // Process fee and capture whether it succeeded
278
+ bool feePaid = _processFee(payer, to, revenueShareToReceiver);
279
+ // Always emit event, with feePaid indicating success/failure
280
+ emit MailSent(msg.sender, to, subject, body, revenueShareToReceiver, resolveSenderToName, feePaid);
281
+ }
282
+
283
+ /**
284
+ * @notice Send a message using pre-prepared content (referenced by mailId)
285
+ * @dev Same as send but references off-chain stored content via mailId
286
+ * SOFT-FAIL BEHAVIOR: Does not revert on fee payment failure. No event emitted if payment fails.
287
+ * See send() function documentation for detailed explanation.
288
+ * @param to Recipient address who receives the message and potential revenue share
289
+ * @param mailId Reference ID to pre-prepared message content
290
+ * @param payer Address that will pay the USDC fee (must be authorized if msg.sender is a contract)
291
+ * @param revenueShareToReceiver If true, receiver gets 90% revenue share; if false, no revenue share
292
+ * @param resolveSenderToName If true, resolve sender address to name via off-chain service
293
+ *
294
+ * Use case: For large messages or repeated templates, store content off-chain
295
+ * and reference it here to save gas costs on transaction data.
296
+ */
297
+ function sendPrepared(
298
+ address to,
299
+ string calldata mailId,
300
+ address payer,
301
+ bool revenueShareToReceiver,
302
+ bool resolveSenderToName
303
+ ) external nonReentrant whenNotPaused {
304
+ // Process fee and capture whether it succeeded
305
+ bool feePaid = _processFee(payer, to, revenueShareToReceiver);
306
+ // Always emit event, with feePaid indicating success/failure
307
+ emit PreparedMailSent(msg.sender, to, mailId, revenueShareToReceiver, resolveSenderToName, feePaid);
308
+ }
309
+
310
+ /**
311
+ * @notice Send a message to an email address (no wallet address known)
312
+ * @dev Always charges standard 10% fee (0.01 USDC) since there's no recipient wallet for revenue sharing
313
+ * SOFT-FAIL BEHAVIOR: Does not revert on fee payment failure. No event emitted if payment fails.
314
+ * See send() function documentation for detailed explanation.
315
+ * @param toEmail Email address of the recipient
316
+ * @param subject Message subject line
317
+ * @param body Message body content
318
+ * @param payer Address that will pay the USDC fee (must be authorized if msg.sender is a contract)
319
+ *
320
+ * Use case: Send to users who haven't set up a wallet yet
321
+ * Cost: 0.01 USDC (10% of sendFee), all goes to owner
322
+ *
323
+ * Requirements:
324
+ * - Contract must not be paused
325
+ * - Payer must have approved this contract to spend required USDC amount
326
+ * - Payer must have sufficient USDC balance
327
+ * - If msg.sender is a contract, payer must be in permissions[msg.sender]
328
+ */
329
+ function sendToEmailAddress(
330
+ string calldata toEmail,
331
+ string calldata subject,
332
+ string calldata body,
333
+ address payer
334
+ ) external nonReentrant whenNotPaused {
335
+ // Process fee and capture whether it succeeded
336
+ bool feePaid = _processFee(payer, address(0), false);
337
+ // Always emit event, with feePaid indicating success/failure
338
+ emit MailSentToEmail(msg.sender, toEmail, subject, body, feePaid);
339
+ }
340
+
341
+ /**
342
+ * @notice Send a pre-prepared message to an email address (no wallet address known)
343
+ * @dev Always charges standard 10% fee (0.01 USDC) since there's no recipient wallet for revenue sharing
344
+ * SOFT-FAIL BEHAVIOR: Does not revert on fee payment failure. No event emitted if payment fails.
345
+ * See send() function documentation for detailed explanation.
346
+ * @param toEmail Email address of the recipient
347
+ * @param mailId Reference ID to pre-prepared message content
348
+ * @param payer Address that will pay the USDC fee (must be authorized if msg.sender is a contract)
349
+ *
350
+ * Use case: For large messages or repeated templates, store content off-chain
351
+ * and reference it here to save gas costs on transaction data.
352
+ */
353
+ function sendPreparedToEmailAddress(
354
+ string calldata toEmail,
355
+ string calldata mailId,
356
+ address payer
357
+ ) external nonReentrant whenNotPaused {
358
+ // Process fee and capture whether it succeeded
359
+ bool feePaid = _processFee(payer, address(0), false);
360
+ // Always emit event, with feePaid indicating success/failure
361
+ emit PreparedMailSentToEmail(msg.sender, toEmail, mailId, feePaid);
362
+ }
363
+
364
+ /**
365
+ * @notice Send a message through webhook (referenced by webhookId)
366
+ * @dev Same as sendPrepared but for webhook-triggered messages
367
+ * SOFT-FAIL BEHAVIOR: Does not revert on fee payment failure. No event emitted if payment fails.
368
+ * See send() function documentation for detailed explanation.
369
+ * @param to Recipient address who receives the message and potential revenue share
370
+ * @param webhookId Reference ID to webhook configuration
371
+ * @param payer Address that will pay the USDC fee (must be authorized if msg.sender is a contract)
372
+ * @param revenueShareToReceiver If true, receiver gets 90% revenue share; if false, no revenue share
373
+ * @param resolveSenderToName If true, resolve sender address to name via off-chain service
374
+ *
375
+ * Use case: For webhook-triggered automated messages where content is generated dynamically
376
+ * based on webhook configuration.
377
+ */
378
+ function sendThroughWebhook(
379
+ address to,
380
+ string calldata webhookId,
381
+ address payer,
382
+ bool revenueShareToReceiver,
383
+ bool resolveSenderToName
384
+ ) external nonReentrant whenNotPaused {
385
+ // Process fee and capture whether it succeeded
386
+ bool feePaid = _processFee(payer, to, revenueShareToReceiver);
387
+ // Always emit event, with feePaid indicating success/failure
388
+ emit WebhookMailSent(msg.sender, to, webhookId, revenueShareToReceiver, resolveSenderToName, feePaid);
389
+ }
390
+
391
+ /**
392
+ * @notice Update the base sending fee (owner only)
393
+ * @dev WARNING: Fee changes take effect IMMEDIATELY with no time delay or user notification.
394
+ * This design allows the owner to respond quickly to market conditions, spam attacks, or operational needs.
395
+ *
396
+ * IMPORTANT IMPLICATIONS FOR USERS:
397
+ * - Fee can increase at any time without warning
398
+ * - No maximum fee cap enforced by contract
399
+ * - Users should monitor FeeUpdated events
400
+ * - Consider the trust assumption: owner will not abuse instant fee changes
401
+ * - Smart contracts calling send functions should implement their own fee caps if needed
402
+ *
403
+ * FRONT-RUNNING RISK:
404
+ * - Owner could potentially front-run user transactions by changing fees
405
+ * - Users with pending transactions may pay different fees than expected
406
+ * - Integrating contracts should set appropriate USDC approvals and handle failures gracefully
407
+ *
408
+ * @param usdcAmount New fee amount in USDC (6 decimals). No maximum enforced.
409
+ */
410
+ function setFee(uint256 usdcAmount) external onlyOwner whenNotPaused {
411
+ if (usdcAmount > type(uint128).max) {
412
+ revert MathOverflow();
413
+ }
414
+ uint128 oldFee = sendFee;
415
+ sendFee = uint128(usdcAmount);
416
+ emit FeeUpdated(oldFee, usdcAmount);
417
+ }
418
+
419
+ function getFee() external view returns (uint256) {
420
+ return sendFee;
421
+ }
422
+
423
+ /**
424
+ * @notice Internal function to record revenue shares for priority messages
425
+ * @dev Splits totalAmount into 90% for recipient (message receiver) and 10% for owner
426
+ * @param recipient Address that will be able to claim the 90% share (the message recipient)
427
+ * @param totalAmount Total fee amount to split (typically sendFee = 0.1 USDC)
428
+ *
429
+ * Split logic:
430
+ * - Owner gets exactly 10% (calculated first for precision)
431
+ * - Recipient gets remainder (totalAmount - ownerAmount) to handle any rounding
432
+ *
433
+ * Timestamp behavior:
434
+ * - Every call updates timestamp to current block time, extending the 60-day claim window
435
+ *
436
+ * Safety:
437
+ * - Explicit overflow checks on type conversions (defense-in-depth)
438
+ * - Practically impossible to overflow with USDC (max supply ~6×10^16, uint128 max ~3.4×10^38)
439
+ * - Uses optimized uint192 for amount and uint64 for timestamp
440
+ */
441
+ function _recordShares(address recipient, uint256 totalAmount) internal {
442
+ // Calculate owner amount first to ensure precision
443
+ uint256 ownerAmountCalc = (totalAmount * OWNER_SHARE) / 100;
444
+ if (ownerAmountCalc > type(uint128).max) {
445
+ revert MathOverflow();
446
+ }
447
+ uint128 ownerAmount = uint128(ownerAmountCalc);
448
+
449
+ // Calculate recipient amount
450
+ uint256 recipientAmountCalc = totalAmount - ownerAmount;
451
+ if (recipientAmountCalc > type(uint192).max) {
452
+ revert MathOverflow();
453
+ }
454
+ uint192 recipientAmount = uint192(recipientAmountCalc);
455
+
456
+ // Update recipient's claimable amount and refresh timestamp to extend the claim window
457
+ recipientClaims[recipient].amount += recipientAmount;
458
+ recipientClaims[recipient].timestamp = uint64(block.timestamp);
459
+
460
+ // Update owner's claimable amount
461
+ _increaseOwnerClaimable(ownerAmount);
462
+
463
+ emit SharesRecorded(recipient, recipientAmount, ownerAmount);
464
+ }
465
+
466
+ /**
467
+ * @notice Process fee payment for any send operation
468
+ * @dev Unified fee processing with revenue sharing support
469
+ * Gas optimized with unchecked math and early return for zero fees
470
+ * @param recipient Address to receive revenue share (use address(0) for email sends with no revenue share)
471
+ * @param revenueShareToReceiver If true, splits fee 90/10; if false, charges 10% owner fee only
472
+ *
473
+ * Fee logic:
474
+ * - Priority mode (revenueShareToReceiver=true):
475
+ * - Charges full fee
476
+ * - If recipient != address(0): 90% to recipient, 10% to owner
477
+ * - If recipient == address(0): 100% to owner (email case)
478
+ * - Standard mode (revenueShareToReceiver=false):
479
+ * - Charges 10% fee only, all to owner
480
+ *
481
+ * Gas optimizations:
482
+ * - Ternary operator for conditional assignment (cheaper than if/else)
483
+ * - Unchecked math for safe operations (division/multiplication cannot overflow)
484
+ * - Early return on zero fee (avoids unnecessary transfer and storage write)
485
+ */
486
+ /**
487
+ * @notice Internal function to process fees with permission checking
488
+ * @dev Verifies that the payer is authorized to pay for msg.sender (if msg.sender != payer)
489
+ * @param payer Address that will pay the USDC fee
490
+ * @param recipient Address that receives revenue share (or address(0) for email sends)
491
+ * @param revenueShareToReceiver Whether to enable revenue sharing
492
+ */
493
+ function _processFee(address payer, address recipient, bool revenueShareToReceiver) internal returns (bool) {
494
+ // Short-circuit permission check: only load mapping if sender != payer (saves ~2100 gas in common case)
495
+ if (msg.sender != payer) {
496
+ if (!permissions[msg.sender][payer]) {
497
+ revert UnpermittedPayer();
498
+ }
499
+ }
500
+
501
+ // Early return if fee collection is paused (success - no fee required)
502
+ if (feePaused) return true;
503
+
504
+ uint256 effectiveFee = _calculateFeeForAddress(payer, sendFee);
505
+
506
+ // Early return if no fee (success - no fee required)
507
+ if (effectiveFee == 0) return true;
508
+
509
+ // Calculate fee to charge
510
+ uint256 feeToCharge;
511
+ unchecked {
512
+ // Safe: division by 100 reduces value, multiplication by 10 then division cannot overflow
513
+ feeToCharge = revenueShareToReceiver ? effectiveFee : (effectiveFee * OWNER_SHARE) / 100;
514
+ }
515
+
516
+ // Transfer fee from payer to contract
517
+ // If transfer fails (including ERC20 reverts), return false instead of bubbling up
518
+ if (!_safeTransferFrom(payer, feeToCharge)) {
519
+ return false;
520
+ }
521
+
522
+ // Handle revenue sharing or direct owner payment
523
+ if (revenueShareToReceiver && recipient != address(0)) {
524
+ // Split fee between recipient (90%) and owner (10%)
525
+ _recordShares(recipient, effectiveFee);
526
+ } else {
527
+ // All fees go to owner (standard mode or email send)
528
+ _increaseOwnerClaimable(feeToCharge);
529
+ }
530
+
531
+ return true;
532
+ }
533
+
534
+ /**
535
+ * @notice Attempt to transfer USDC from payer to this contract without propagating reverts
536
+ * @param payer Address that should pay the fee
537
+ * @param amount Amount of USDC to transfer
538
+ * @return success True if transfer succeeded, false if transferFrom reverted or returned false
539
+ */
540
+ function _safeTransferFrom(address payer, uint256 amount) internal returns (bool) {
541
+ if (amount == 0) {
542
+ return true;
543
+ }
544
+
545
+ try usdcToken.transferFrom(payer, address(this), amount) returns (bool success) {
546
+ return success;
547
+ } catch {
548
+ return false;
549
+ }
550
+ }
551
+
552
+ /**
553
+ * @notice Claim your accumulated revenue share from priority messages received
554
+ * @dev Must be called within 60 days of the most recent reward being recorded
555
+ *
556
+ * TIMESTAMP DEPENDENCY WARNING:
557
+ * This function uses block.timestamp for expiration checks. Miners/validators can manipulate
558
+ * block.timestamp by ±15 seconds (Ethereum) or more (other chains). This means:
559
+ * - Claims near the 60-day deadline have a small risk of being denied via timestamp manipulation
560
+ * - Recommended: Claim well before the deadline (e.g., within 55 days) to avoid edge cases
561
+ * - The 60-day period is approximate and may vary by a few seconds
562
+ *
563
+ * Claim period logic:
564
+ * - Clock refreshes on every priority message received (when timestamp is updated)
565
+ * - Multiple priority messages extend the timer, keeping all rewards available as long as one is received every 60 days
566
+ * - After 60 days with no new rewards, funds become permanently unclaimable (owner can recover via claimExpiredShares)
567
+ *
568
+ * Example timeline:
569
+ * Day 0: Receive priority message, get 0.09 USDC claimable, timer starts
570
+ * Day 60: Receive another priority message, now 0.18 USDC claimable, timer refreshes
571
+ * Day 119: Can still claim all 0.18 USDC because the second reward reset the timer
572
+ * Day 121: Too late, funds expired if no new rewards arrived after Day 60
573
+ */
574
+ function claimRecipientShare() external nonReentrant {
575
+ ClaimableAmount storage claim = recipientClaims[msg.sender];
576
+ if (claim.amount == 0) {
577
+ revert NoClaimableAmount();
578
+ }
579
+
580
+ // Check if claim period has expired (60 days from the most recent reward)
581
+ if (block.timestamp > claim.timestamp + CLAIM_PERIOD) {
582
+ revert NoClaimableAmount();
583
+ }
584
+
585
+ // Store amount and delete claim data (saves ~15000 gas via storage refund)
586
+ uint256 amount = claim.amount;
587
+ delete recipientClaims[msg.sender];
588
+
589
+ // Transfer USDC to claimer
590
+ bool success = usdcToken.transfer(msg.sender, amount);
591
+ if (!success) {
592
+ revert TransferFailed();
593
+ }
594
+
595
+ emit RecipientClaimed(msg.sender, amount);
596
+ }
597
+
598
+ function claimOwnerShare() external onlyOwner nonReentrant {
599
+ if (ownerClaimable == 0) {
600
+ revert NoClaimableAmount();
601
+ }
602
+
603
+ uint256 amount = ownerClaimable;
604
+ ownerClaimable = 0;
605
+
606
+ bool success = usdcToken.transfer(owner(), amount);
607
+ if (!success) {
608
+ revert TransferFailed();
609
+ }
610
+
611
+ emit OwnerClaimed(amount);
612
+ }
613
+
614
+ function claimExpiredShares(address recipient) external onlyOwner nonReentrant {
615
+ ClaimableAmount storage claim = recipientClaims[recipient];
616
+ if (claim.amount == 0) {
617
+ revert NoClaimableAmount();
618
+ }
619
+
620
+ if (block.timestamp <= claim.timestamp + CLAIM_PERIOD) {
621
+ revert ClaimPeriodNotExpired();
622
+ }
623
+
624
+ uint256 amount = claim.amount;
625
+ delete recipientClaims[recipient];
626
+
627
+ _increaseOwnerClaimable(amount);
628
+
629
+ emit ExpiredSharesClaimed(recipient, amount);
630
+ }
631
+
632
+ function getRecipientClaimable(address recipient) external view returns (uint256 amount, uint256 expiresAt, bool isExpired) {
633
+ ClaimableAmount storage claim = recipientClaims[recipient];
634
+ amount = claim.amount;
635
+ expiresAt = claim.timestamp + CLAIM_PERIOD;
636
+ isExpired = claim.amount > 0 && block.timestamp > expiresAt;
637
+ }
638
+
639
+ function getOwnerClaimable() external view returns (uint256) {
640
+ return ownerClaimable;
641
+ }
642
+
643
+ /// @notice Delegate mail handling to another address
644
+ /// @dev Charges delegation fee in USDC unless feePaused is true. Emits event for indexer tracking
645
+ /// WARNING: Delegation fee is NON-REFUNDABLE, even if the delegate rejects the delegation.
646
+ /// The fee is an anti-spam measure and goes to the contract owner regardless of delegation outcome.
647
+ /// @param delegate Address to delegate to, or address(0) to clear
648
+ function delegateTo(address delegate) external nonReentrant whenNotPaused {
649
+ // If clearing delegation (setting to address(0)), no fee required
650
+ // If feePaused is true, skip fee collection
651
+ if (delegate != address(0) && !feePaused) {
652
+ uint128 fee = delegationFee;
653
+ if (!usdcToken.transferFrom(msg.sender, address(this), fee)) {
654
+ revert FeePaymentRequired();
655
+ }
656
+ _increaseOwnerClaimable(fee);
657
+ }
658
+ emit DelegationSet(msg.sender, delegate);
659
+ }
660
+
661
+ /// @notice Reject a delegation made to you by another address
662
+ /// @dev Emits event for indexer tracking. No validation - relies on off-chain logic.
663
+ /// NOTE: Rejecting a delegation does NOT refund the delegation fee paid by the delegator.
664
+ /// The fee is an anti-spam measure and is non-refundable by design.
665
+ /// @param delegatingAddress Address that delegated to msg.sender
666
+ function rejectDelegation(address delegatingAddress) external nonReentrant whenNotPaused {
667
+ emit DelegationSet(delegatingAddress, address(0));
668
+ }
669
+
670
+ /**
671
+ * @notice Update the delegation fee (owner only)
672
+ * @dev WARNING: Fee changes take effect IMMEDIATELY with no time delay or user notification.
673
+ * Users who are in the process of delegating may pay a different fee than expected.
674
+ * See setFee() documentation for detailed implications of instant fee changes.
675
+ * @param usdcAmount New fee amount in USDC (6 decimals). No maximum enforced.
676
+ */
677
+ function setDelegationFee(uint256 usdcAmount) external onlyOwner whenNotPaused {
678
+ if (usdcAmount > type(uint128).max) {
679
+ revert MathOverflow();
680
+ }
681
+ uint128 oldFee = delegationFee;
682
+ delegationFee = uint128(usdcAmount);
683
+ emit DelegationFeeUpdated(oldFee, usdcAmount);
684
+ }
685
+
686
+ /// @notice Get current delegation fee
687
+ /// @return Current delegation fee in USDC (6 decimals)
688
+ function getDelegationFee() external view returns (uint256) {
689
+ return delegationFee;
690
+ }
691
+
692
+ /// @notice Set custom fee percentage for a specific address
693
+ /// @dev Only owner can set. Percentage must be between 0-100 (inclusive)
694
+ /// 0 = free (no fee), 100 = full fee, anything in between reduces the fee proportionally
695
+ /// Internally stores as discount (100 - percentage) for cleaner logic
696
+ /// @param account Address to set custom fee percentage for
697
+ /// @param percentage Fee percentage (0-100). Set to 0 for free messages, 100 for full fee
698
+ function setCustomFeePercentage(address account, uint256 percentage) external onlyOwner whenNotPaused {
699
+ if (account == address(0)) {
700
+ revert InvalidAddress();
701
+ }
702
+ if (percentage > 100) {
703
+ revert InvalidPercentage();
704
+ }
705
+
706
+ // Store as discount: 0% fee = 100 discount, 100% fee = 0 discount
707
+ customFeeDiscount[account] = uint8(100 - percentage);
708
+ emit CustomFeePercentageSet(account, percentage);
709
+ }
710
+
711
+ /// @notice Clear custom fee percentage for a specific address
712
+ /// @dev Only owner can clear. After clearing, address will use default fee structure (100%)
713
+ /// @param account Address to clear custom fee percentage for
714
+ function clearCustomFeePercentage(address account) external onlyOwner whenNotPaused {
715
+ if (account == address(0)) {
716
+ revert InvalidAddress();
717
+ }
718
+
719
+ // Set discount to 0 (no discount = 100% fee = default behavior)
720
+ customFeeDiscount[account] = 0;
721
+ emit CustomFeePercentageSet(account, 100);
722
+ }
723
+
724
+ /// @notice Get custom fee percentage for an address
725
+ /// @param account Address to check
726
+ /// @return percentage Fee percentage (0-100), 100 means default (full fee)
727
+ function getCustomFeePercentage(address account) external view returns (uint256) {
728
+ // Convert discount back to percentage: 0 discount = 100% fee, 100 discount = 0% fee
729
+ return 100 - customFeeDiscount[account];
730
+ }
731
+
732
+ /// @notice Calculate the effective fee for an address based on custom discount
733
+ /// @dev Internal helper function with early returns for common cases (gas optimization)
734
+ /// Default discount of 0 means full fee (100%)
735
+ /// @param account Address to calculate fee for
736
+ /// @param baseFee Base fee amount to apply discount to
737
+ /// @return Calculated fee amount
738
+ function _calculateFeeForAddress(address account, uint128 baseFee) internal view returns (uint256) {
739
+ // Get discount (0-100): 0 = no discount (full fee), 100 = full discount (free)
740
+ uint8 discount = customFeeDiscount[account];
741
+
742
+ // Early return for no discount (most common case - saves ~200 gas)
743
+ if (discount == 0) return baseFee;
744
+
745
+ // Early return for full discount (free - saves ~200 gas)
746
+ if (discount == 100) return 0;
747
+
748
+ // Apply discount: fee = baseFee * (100 - discount) / 100
749
+ // Examples: discount=50 → 50% fee, discount=25 → 75% fee
750
+ unchecked {
751
+ // Safe: baseFee is uint128, discount is 0-99, cannot overflow
752
+ return (uint256(baseFee) * (100 - discount)) / 100;
753
+ }
754
+ }
755
+
756
+ /// @notice Pause the contract and distribute all claimable funds to their rightful owners
757
+ /// @dev Only owner can pause. All recipient shares and owner claimable funds are distributed
758
+ function pause() external onlyOwner nonReentrant {
759
+ if (paused) {
760
+ revert ContractIsPaused();
761
+ }
762
+
763
+ paused = true;
764
+
765
+ // Cache storage read (saves ~2100 gas)
766
+ uint128 _ownerClaimable = ownerClaimable;
767
+
768
+ // Distribute owner claimable funds first
769
+ if (_ownerClaimable > 0) {
770
+ ownerClaimable = 0;
771
+
772
+ bool success = usdcToken.transfer(owner(), _ownerClaimable);
773
+ if (success) {
774
+ emit FundsDistributed(owner(), _ownerClaimable);
775
+ } else {
776
+ // If transfer fails, restore the balance
777
+ ownerClaimable = _ownerClaimable;
778
+ }
779
+ }
780
+
781
+ emit ContractPaused();
782
+ }
783
+
784
+ /// @notice Distribute a specific recipient's claimable funds during pause
785
+ /// @dev Can only be called when paused. Anyone can call this function to help distribute funds.
786
+ /// Funds are always sent to their rightful owner (recipient), so this is safe for public access.
787
+ /// Distributes funds regardless of expiration to prevent fund loss during emergency.
788
+ /// @param recipient Address to distribute funds for
789
+ function distributeClaimableFunds(address recipient) external nonReentrant {
790
+ if (!paused) {
791
+ revert ContractNotPaused();
792
+ }
793
+
794
+ ClaimableAmount storage claim = recipientClaims[recipient];
795
+ if (claim.amount == 0) {
796
+ revert NoClaimableAmount();
797
+ }
798
+
799
+ uint256 amount = claim.amount;
800
+ uint64 lastTimestamp = claim.timestamp;
801
+ delete recipientClaims[recipient];
802
+
803
+ bool success = usdcToken.transfer(recipient, amount);
804
+ if (success) {
805
+ emit FundsDistributed(recipient, amount);
806
+ } else {
807
+ // If transfer fails, restore the balance
808
+ recipientClaims[recipient].amount = uint192(amount);
809
+ recipientClaims[recipient].timestamp = lastTimestamp;
810
+ }
811
+ }
812
+
813
+ /// @notice Unpause the contract to resume normal operations
814
+ /// @dev Only owner can unpause
815
+ function unpause() external onlyOwner {
816
+ if (!paused) {
817
+ revert ContractNotPaused();
818
+ }
819
+
820
+ paused = false;
821
+ emit ContractUnpaused();
822
+ }
823
+
824
+ /// @notice Emergency unpause without fund distribution (owner only)
825
+ /// @dev Use when pause() failed due to transfer issues. Owner can still manually claim funds later
826
+ function emergencyUnpause() external onlyOwner {
827
+ if (!paused) {
828
+ revert ContractNotPaused();
829
+ }
830
+
831
+ paused = false;
832
+ emit EmergencyUnpaused();
833
+ }
834
+
835
+ /// @notice Toggle fee collection on or off (owner only)
836
+ /// @dev When feePaused is true, send functions will not charge fees
837
+ /// @param _feePaused True to pause fee collection, false to enable
838
+ function setFeePaused(bool _feePaused) external onlyOwner {
839
+ feePaused = _feePaused;
840
+ emit FeePauseToggled(_feePaused);
841
+ }
842
+
843
+ function _increaseOwnerClaimable(uint256 amount) internal {
844
+ if (amount == 0) {
845
+ return;
846
+ }
847
+ uint256 newOwnerClaimable = uint256(ownerClaimable) + amount;
848
+ if (newOwnerClaimable > type(uint128).max) {
849
+ revert MathOverflow();
850
+ }
851
+ ownerClaimable = uint128(newOwnerClaimable);
852
+ }
853
+
854
+ /// @notice Grant permission for a contract to send messages using caller's USDC balance
855
+ /// @dev Allows smart contracts to send messages while the wallet pays fees
856
+ /// If permission already exists, emits PermissionRevoked for the old wallet
857
+ /// @param contractAddress The contract address to grant permission to
858
+ ///
859
+ /// Requirements:
860
+ /// - contractAddress must not be address(0)
861
+ /// - Caller must have approved this Mailer contract to spend their USDC
862
+ ///
863
+ /// Usage:
864
+ /// 1. Wallet calls: usdc.approve(mailer, largeAmount)
865
+ /// 2. Wallet calls: mailer.setPermission(myContract)
866
+ /// 3. Contract can now call: mailer.send(...) and fees are paid by wallet
867
+ /**
868
+ * @notice Grant permission for a contract to send messages using caller's USDC balance
869
+ * @dev Adds caller to the set of authorized payers for the contract
870
+ * Multiple wallets can be authorized per contract for security and flexibility
871
+ * @param contractAddress The contract address to grant permission to
872
+ *
873
+ * Requirements:
874
+ * - contractAddress must not be address(0)
875
+ * - Contract must not be paused
876
+ * - Caller must have approved Mailer to spend their USDC
877
+ *
878
+ * Events:
879
+ * - PermissionGranted(contractAddress, msg.sender)
880
+ */
881
+ function setPermission(address contractAddress) external whenNotPaused {
882
+ if (contractAddress == address(0)) {
883
+ revert InvalidAddress();
884
+ }
885
+
886
+ permissions[contractAddress][msg.sender] = true;
887
+ emit PermissionGranted(contractAddress, msg.sender);
888
+ }
889
+
890
+ /**
891
+ * @notice Remove permission for a contract to use caller's USDC balance
892
+ * @dev Removes caller from the set of authorized payers for the contract
893
+ * @param contractAddress The contract address to remove permission from
894
+ *
895
+ * Requirements:
896
+ * - Contract must not be paused
897
+ * - Caller must have previously granted permission
898
+ *
899
+ * Events:
900
+ * - PermissionRevoked(contractAddress, msg.sender)
901
+ */
902
+ function removePermission(address contractAddress) external whenNotPaused {
903
+ if (contractAddress == address(0)) {
904
+ revert InvalidAddress();
905
+ }
906
+
907
+ permissions[contractAddress][msg.sender] = false;
908
+ emit PermissionRevoked(contractAddress, msg.sender);
909
+ }
910
+
911
+ /// @notice Check if contract is currently paused
912
+ /// @return True if contract is paused, false otherwise
913
+ function isPaused() external view returns (bool) {
914
+ return paused;
915
+ }
916
+
917
+ /**
918
+ * @dev Reserved storage space to allow for layout changes in future upgrades
919
+ * @notice This gap reserves 50 storage slots for future state variables
920
+ */
921
+ uint256[50] private __gap;
922
+ }