@etherisc/gif-next 0.0.2-baec8d5-329 → 0.0.2-bafc958-412

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 (388) hide show
  1. package/README.md +19 -2
  2. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  3. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +21 -21
  4. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  5. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  6. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
  7. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  8. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  10. package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
  11. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  12. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
  14. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  16. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  17. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +42 -248
  18. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  19. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +2 -2
  20. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  21. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +0 -222
  22. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  23. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +134 -294
  24. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +53 -124
  26. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +0 -37
  28. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +49 -62
  30. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
  31. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1463 -0
  32. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
  33. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
  34. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
  35. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1660 -0
  36. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
  37. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +410 -0
  38. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
  39. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
  40. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
  41. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1411 -0
  42. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
  43. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1171 -0
  44. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
  45. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1517 -0
  46. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
  47. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +1978 -0
  48. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  49. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +2 -2
  50. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  51. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  52. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  53. package/artifacts/contracts/instance/Instance.sol/Instance.json +10 -99
  54. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  55. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +71 -71
  56. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  57. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +14 -14
  58. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  59. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +238 -123
  60. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  61. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +34 -146
  62. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  63. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +30 -81
  64. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  65. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +215 -219
  66. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  67. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  68. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  69. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  70. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  71. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  72. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  73. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  74. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +2 -2
  75. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  76. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  78. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  80. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  81. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  82. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  83. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  84. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +32 -238
  85. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  86. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +2 -2
  87. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  88. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  89. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +0 -37
  90. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  91. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  92. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +0 -222
  93. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  94. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +32 -144
  95. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  96. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +29 -80
  97. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  98. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +12 -284
  99. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  100. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
  101. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  102. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +263 -201
  103. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  104. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +82 -97
  105. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  106. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +125 -23
  107. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  108. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +2 -95
  109. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  110. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +220 -100
  111. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  112. package/artifacts/contracts/pool/Pool.sol/Pool.json +2 -280
  113. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  114. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +264 -248
  115. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  116. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +35 -82
  117. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  118. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +31 -162
  119. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  120. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +26 -89
  121. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  122. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +3 -225
  123. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  124. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +2 -2
  125. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  126. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +185 -175
  127. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  128. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +53 -100
  129. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  130. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
  131. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  132. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +114 -0
  133. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  134. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +184 -119
  135. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  136. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
  137. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  138. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +0 -37
  139. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
  140. package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
  141. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  142. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +242 -321
  143. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  144. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +50 -101
  145. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  146. package/artifacts/contracts/product/PricingService.sol/PricingService.json +113 -265
  147. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  148. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +52 -123
  149. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  150. package/artifacts/contracts/product/Product.sol/Product.json +3 -225
  151. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
  152. package/artifacts/contracts/product/RiskService.sol/RiskService.json +583 -0
  153. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
  154. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +651 -0
  155. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  156. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
  157. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  158. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +221 -21
  159. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  160. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  161. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  162. package/artifacts/contracts/registry/Registry.sol/Registry.json +419 -82
  163. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  164. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +229 -114
  165. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  166. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +18 -130
  167. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  168. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +22 -73
  169. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  170. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  171. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  172. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +24 -14
  173. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  174. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  175. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  176. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  177. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  178. package/artifacts/contracts/shared/Component.sol/Component.json +0 -211
  179. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  180. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +127 -199
  181. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  182. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +55 -114
  183. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  184. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +0 -112
  185. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  186. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +0 -26
  187. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  188. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +56 -0
  189. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  190. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +0 -37
  191. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  192. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  193. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  194. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  195. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +0 -42
  196. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  197. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  198. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  199. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +1 -1
  200. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
  201. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
  202. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  203. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +0 -222
  204. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  205. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  206. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  207. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  208. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  209. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -57
  210. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  211. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +4 -136
  212. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  213. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -97
  214. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  215. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
  216. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  217. package/artifacts/contracts/shared/Service.sol/Service.json +0 -112
  218. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  219. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
  220. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
  221. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
  222. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  223. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +27 -27
  224. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  225. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  226. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +73 -93
  227. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  228. package/artifacts/contracts/staking/Staking.sol/Staking.json +85 -262
  229. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  230. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  231. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  232. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +42 -89
  233. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  234. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -6
  235. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  236. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +26 -138
  237. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  238. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +26 -77
  239. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  240. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +89 -84
  241. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  242. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
  243. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  244. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  245. package/artifacts/contracts/type/Amount.sol/AmountLib.json +13 -8
  246. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  247. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
  248. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  249. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  250. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  251. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  252. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  253. package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
  254. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  255. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  256. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  257. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
  258. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  259. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  260. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  261. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  262. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  263. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  264. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  265. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  266. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  267. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  268. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  269. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
  270. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  271. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
  272. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  273. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
  274. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  275. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  276. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  277. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  278. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  279. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  280. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
  281. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  282. package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
  283. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  284. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +39 -2
  285. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  286. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  287. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  288. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  289. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +14 -65
  290. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  291. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  292. package/contracts/authorization/AccessAdmin.sol +1 -3
  293. package/contracts/authorization/Authorization.sol +0 -1
  294. package/contracts/distribution/BasicDistribution.sol +4 -15
  295. package/contracts/distribution/Distribution.sol +4 -10
  296. package/contracts/distribution/DistributionService.sol +35 -44
  297. package/contracts/distribution/IDistributionService.sol +9 -5
  298. package/contracts/examples/fire/FirePool.sol +76 -0
  299. package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
  300. package/contracts/examples/fire/FireProduct.sol +316 -0
  301. package/contracts/examples/fire/FireProductAuthorization.sol +16 -0
  302. package/contracts/examples/fire/FireUSD.sol +26 -0
  303. package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
  304. package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
  305. package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
  306. package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
  307. package/contracts/instance/IInstance.sol +7 -30
  308. package/contracts/instance/Instance.sol +10 -35
  309. package/contracts/instance/InstanceAdmin.sol +23 -4
  310. package/contracts/instance/InstanceAuthorizationV3.sol +3 -3
  311. package/contracts/instance/InstanceReader.sol +32 -7
  312. package/contracts/instance/InstanceService.sol +60 -36
  313. package/contracts/instance/InstanceStore.sol +12 -1
  314. package/contracts/instance/base/ObjectLifecycle.sol +9 -4
  315. package/contracts/instance/module/IBundle.sol +1 -1
  316. package/contracts/instance/module/IComponents.sol +1 -6
  317. package/contracts/instance/module/IDistribution.sol +0 -1
  318. package/contracts/instance/module/IPolicy.sol +22 -22
  319. package/contracts/mock/Dip.sol +1 -1
  320. package/contracts/oracle/Oracle.sol +4 -7
  321. package/contracts/oracle/OracleService.sol +4 -3
  322. package/contracts/pool/BasicPool.sol +7 -5
  323. package/contracts/pool/BasicPoolAuthorization.sol +5 -2
  324. package/contracts/pool/BundleService.sol +138 -42
  325. package/contracts/pool/IBundleService.sol +22 -8
  326. package/contracts/pool/IPoolService.sol +36 -26
  327. package/contracts/pool/Pool.sol +22 -24
  328. package/contracts/pool/PoolService.sol +155 -82
  329. package/contracts/product/ApplicationService.sol +41 -23
  330. package/contracts/product/BasicProduct.sol +3 -32
  331. package/contracts/product/ClaimService.sol +116 -45
  332. package/contracts/product/IApplicationService.sol +1 -0
  333. package/contracts/product/IClaimService.sol +28 -5
  334. package/contracts/product/IPolicyService.sol +27 -32
  335. package/contracts/product/IPricingService.sol +7 -7
  336. package/contracts/product/IProductComponent.sol +0 -1
  337. package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
  338. package/contracts/product/PolicyService.sol +280 -182
  339. package/contracts/product/PricingService.sol +44 -43
  340. package/contracts/product/Product.sol +67 -34
  341. package/contracts/product/{ProductService.sol → RiskService.sol} +5 -7
  342. package/contracts/product/{ProductServiceManager.sol → RiskServiceManager.sol} +8 -8
  343. package/contracts/registry/ChainNft.sol +65 -32
  344. package/contracts/registry/IRegistry.sol +49 -15
  345. package/contracts/registry/Registry.sol +321 -195
  346. package/contracts/registry/RegistryAdmin.sol +150 -51
  347. package/contracts/registry/RegistryService.sol +2 -2
  348. package/contracts/registry/ReleaseRegistry.sol +12 -8
  349. package/contracts/registry/ServiceAuthorizationV3.sol +2 -3
  350. package/contracts/shared/Component.sol +17 -29
  351. package/contracts/shared/ComponentService.sol +46 -27
  352. package/contracts/shared/ComponentVerifyingService.sol +1 -1
  353. package/contracts/shared/IComponent.sol +4 -4
  354. package/contracts/shared/IComponentService.sol +5 -9
  355. package/contracts/shared/IInstanceLinkedComponent.sol +8 -15
  356. package/contracts/shared/IPolicyHolder.sol +0 -9
  357. package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
  358. package/contracts/shared/InstanceLinkedComponent.sol +4 -4
  359. package/contracts/shared/NftOwnable.sol +7 -7
  360. package/contracts/shared/PolicyHolder.sol +7 -53
  361. package/contracts/shared/Registerable.sol +4 -4
  362. package/contracts/shared/RegistryLinked.sol +3 -2
  363. package/contracts/shared/Service.sol +5 -5
  364. package/contracts/shared/TokenHandler.sol +100 -19
  365. package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
  366. package/contracts/staking/IStaking.sol +2 -1
  367. package/contracts/staking/StakeManagerLib.sol +18 -25
  368. package/contracts/staking/Staking.sol +10 -26
  369. package/contracts/staking/StakingService.sol +10 -14
  370. package/contracts/staking/TargetManagerLib.sol +7 -3
  371. package/contracts/type/Amount.sol +5 -3
  372. package/contracts/type/Blocknumber.sol +7 -1
  373. package/contracts/type/ObjectType.sol +15 -11
  374. package/contracts/type/Referral.sol +1 -0
  375. package/contracts/type/RiskId.sol +15 -1
  376. package/contracts/type/Seconds.sol +21 -1
  377. package/contracts/type/StateId.sol +1 -0
  378. package/contracts/type/Timestamp.sol +11 -1
  379. package/contracts/type/UFixed.sol +29 -10
  380. package/contracts/upgradeability/ProxyManager.sol +1 -1
  381. package/package.json +1 -1
  382. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
  383. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
  384. package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
  385. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
  386. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
  387. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
  388. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
@@ -1,8 +1,6 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
-
6
4
  import {IRegistry} from "../registry/IRegistry.sol";
7
5
  import {IInstance} from "../instance/IInstance.sol";
8
6
  import {IComponentService} from "../shared/IComponentService.sol";
@@ -14,31 +12,22 @@ import {IPolicy} from "../instance/module/IPolicy.sol";
14
12
 
15
13
  import {Amount, AmountLib} from "../type/Amount.sol";
16
14
  import {NftId, NftIdLib} from "../type/NftId.sol";
17
- import {Fee, FeeLib} from "../type/Fee.sol";
18
15
  import {KEEP_STATE} from "../type/StateId.sol";
19
16
  import {ObjectType, COMPONENT, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR, REGISTRY} from "../type/ObjectType.sol";
20
17
  import {ComponentVerifyingService} from "../shared/ComponentVerifyingService.sol";
21
18
  import {IDistributionService} from "./IDistributionService.sol";
22
- import {UFixed, UFixedLib} from "../type/UFixed.sol";
19
+ import {UFixed} from "../type/UFixed.sol";
23
20
  import {DistributorType, DistributorTypeLib} from "../type/DistributorType.sol";
24
21
  import {ReferralId, ReferralLib} from "../type/Referral.sol";
25
22
  import {Timestamp, TimestampLib} from "../type/Timestamp.sol";
26
23
  import {IDistribution} from "../instance/module/IDistribution.sol";
27
24
  import {InstanceStore} from "../instance/InstanceStore.sol";
28
- import {TokenHandler} from "../shared/TokenHandler.sol";
29
25
 
30
26
 
31
27
  contract DistributionService is
32
28
  ComponentVerifyingService,
33
29
  IDistributionService
34
30
  {
35
- using AmountLib for Amount;
36
- using NftIdLib for NftId;
37
- using TimestampLib for Timestamp;
38
- using UFixedLib for UFixed;
39
- using FeeLib for Fee;
40
- using ReferralLib for ReferralId;
41
-
42
31
  IComponentService private _componentService;
43
32
  IInstanceService private _instanceService;
44
33
  IRegistryService private _registryService;
@@ -48,21 +37,21 @@ contract DistributionService is
48
37
  bytes memory data
49
38
  )
50
39
  internal
51
- initializer
52
40
  virtual override
41
+ initializer()
53
42
  {
54
43
  address initialOwner;
55
44
  address registryAddress;
56
45
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
57
46
  // TODO while DistributionService is not deployed in DistributionServiceManager constructor
58
47
  // owner is DistributionServiceManager deployer
59
- initializeService(registryAddress, address(0), owner);
48
+ _initializeService(registryAddress, address(0), owner);
60
49
 
61
50
  _componentService = IComponentService(_getServiceAddress(COMPONENT()));
62
51
  _instanceService = IInstanceService(_getServiceAddress(INSTANCE()));
63
52
  _registryService = IRegistryService(_getServiceAddress(REGISTRY()));
64
53
 
65
- registerInterface(type(IDistributionService).interfaceId);
54
+ _registerInterface(type(IDistributionService).interfaceId);
66
55
  }
67
56
 
68
57
 
@@ -142,7 +131,6 @@ contract DistributionService is
142
131
  distributorType,
143
132
  true, // active
144
133
  data,
145
- AmountLib.zero(),
146
134
  0);
147
135
 
148
136
  instance.getInstanceStore().createDistributor(distributorNftId, info);
@@ -218,11 +206,28 @@ contract DistributionService is
218
206
  return referralId;
219
207
  }
220
208
 
209
+ /// @inheritdoc IDistributionService
210
+ function processReferral(
211
+ NftId distributionNftId,
212
+ ReferralId referralId
213
+ )
214
+ external
215
+ virtual
216
+ restricted
217
+ {
218
+ if (referralIsValid(distributionNftId, referralId)) {
219
+ IInstance instance = _getInstanceForDistribution(distributionNftId);
220
+ // update book keeping for referral info
221
+ IDistribution.ReferralInfo memory referralInfo = instance.getInstanceReader().getReferralInfo(referralId);
222
+ referralInfo.usedReferrals += 1;
223
+ instance.getInstanceStore().updateReferral(referralId, referralInfo, KEEP_STATE());
224
+ }
225
+ }
221
226
 
222
227
  function processSale(
223
228
  NftId distributionNftId, // assume always of distribution type
224
229
  ReferralId referralId,
225
- IPolicy.Premium memory premium
230
+ IPolicy.PremiumInfo memory premium
226
231
  )
227
232
  external
228
233
  virtual
@@ -233,24 +238,22 @@ contract DistributionService is
233
238
  InstanceStore store = instance.getInstanceStore();
234
239
 
235
240
  // get distribution owner fee amount
236
- Amount distributionOwnerFee = AmountLib.toAmount(premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount);
241
+ Amount distributionOwnerFee = premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount;
237
242
 
238
243
  // update referral/distributor info if applicable
239
244
  if (referralIsValid(distributionNftId, referralId)) {
240
245
 
241
246
  // increase distribution balance by commission amount and distribution owner fee
242
- Amount commissionAmount = AmountLib.toAmount(premium.commissionAmount);
247
+ Amount commissionAmount = premium.commissionAmount;
243
248
  _componentService.increaseDistributionBalance(store, distributionNftId, commissionAmount, distributionOwnerFee);
244
249
 
245
250
  // update book keeping for referral info
246
251
  IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
247
- referralInfo.usedReferrals += 1;
248
- store.updateReferral(referralId, referralInfo, KEEP_STATE());
252
+
253
+ _componentService.increaseDistributorBalance(store, referralInfo.distributorNftId, AmountLib.zero(), commissionAmount);
249
254
 
250
255
  // update book keeping for distributor info
251
256
  IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
252
- // TODO refactor sum of commission amount into a fee balance for distributors
253
- distributorInfo.commissionAmount = distributorInfo.commissionAmount + commissionAmount;
254
257
  distributorInfo.numPoliciesSold += 1;
255
258
  store.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
256
259
  } else {
@@ -272,44 +275,32 @@ contract DistributionService is
272
275
  IComponents.ComponentInfo memory distributionInfo = reader.getComponentInfo(distributionNftId);
273
276
  address distributionWallet = distributionInfo.wallet;
274
277
 
275
- IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(distributorNftId);
278
+ Amount commissionAmount = reader.getFeeAmount(distributorNftId);
276
279
 
277
280
  // determine withdrawn amount
278
281
  withdrawnAmount = amount;
279
282
  if (withdrawnAmount.gte(AmountLib.max())) {
280
- withdrawnAmount = distributorInfo.commissionAmount;
283
+ withdrawnAmount = commissionAmount;
281
284
  } else {
282
- if (withdrawnAmount.gt(distributorInfo.commissionAmount)) {
283
- revert ErrorDistributionServiceCommissionWithdrawAmountExceedsLimit(withdrawnAmount, distributorInfo.commissionAmount);
285
+ if (withdrawnAmount.gt(commissionAmount)) {
286
+ revert ErrorDistributionServiceCommissionWithdrawAmountExceedsLimit(withdrawnAmount, commissionAmount);
284
287
  }
285
288
  }
286
289
 
287
- if (withdrawnAmount.eqz()) {
288
- revert ErrorDistributionServiceCommissionWithdrawAmountIsZero();
289
- }
290
-
291
- // check allowance
292
- IERC20Metadata token = IERC20Metadata(distributionInfo.token);
293
- uint256 tokenAllowance = token.allowance(distributionWallet, address(distributionInfo.tokenHandler));
294
- if (tokenAllowance < withdrawnAmount.toInt()) {
295
- revert ErrorDistributionServiceWalletAllowanceTooSmall(distributionWallet, address(distributionInfo.tokenHandler), tokenAllowance, withdrawnAmount.toInt());
296
- }
297
-
298
290
  // decrease fee counters by withdrawnAmount and update distributor info
299
291
  {
300
292
  InstanceStore store = instance.getInstanceStore();
293
+ // decrease fee counter for distribution balance
301
294
  _componentService.decreaseDistributionBalance(store, distributionNftId, withdrawnAmount, AmountLib.zero());
302
-
303
- distributorInfo.commissionAmount = distributorInfo.commissionAmount - withdrawnAmount;
304
- store.updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
295
+ // decrease fee counter for distributor fee
296
+ _componentService.decreaseDistributorBalance(store, distributorNftId, AmountLib.zero(), withdrawnAmount);
305
297
  }
306
298
 
307
299
  // transfer amount to distributor
308
300
  {
309
301
  address distributor = getRegistry().ownerOf(distributorNftId);
310
- distributionInfo.tokenHandler.transfer(distributionWallet, distributor, withdrawnAmount);
311
-
312
- emit LogDistributionServiceCommissionWithdrawn(distributorNftId, distributor, address(token), withdrawnAmount);
302
+ emit LogDistributionServiceCommissionWithdrawn(distributorNftId, distributor, address(distributionInfo.token), withdrawnAmount);
303
+ distributionInfo.tokenHandler.distributeTokens(distributionWallet, distributor, withdrawnAmount);
313
304
  }
314
305
  }
315
306
 
@@ -3,7 +3,6 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {Amount} from "../type/Amount.sol";
5
5
  import {NftId} from "../type/NftId.sol";
6
- import {Fee} from "../type/Fee.sol";
7
6
  import {IPolicy} from "../instance/module/IPolicy.sol";
8
7
  import {IService} from "../shared/IService.sol";
9
8
  import {UFixed} from "../type/UFixed.sol";
@@ -28,9 +27,7 @@ interface IDistributionService is IService {
28
27
  error ErrorIDistributionServiceMinFeeTooHigh(uint256 minFee, uint256 limit);
29
28
 
30
29
  error ErrorDistributionServiceCommissionWithdrawAmountExceedsLimit(Amount amount, Amount limit);
31
- error ErrorDistributionServiceCommissionWithdrawAmountIsZero();
32
- error ErrorDistributionServiceWalletAllowanceTooSmall(address wallet, address tokenHandler, uint256 allowance, uint256 amount);
33
-
30
+
34
31
  error ErrorDistributionServiceVariableFeesTooHight(uint256 maxDiscountPercentage, uint256 limit);
35
32
  error ErrorDistributionServiceMaxDiscountTooHigh(uint256 maxDiscountPercentage, uint256 limit);
36
33
 
@@ -77,11 +74,18 @@ interface IDistributionService is IService {
77
74
  external
78
75
  returns (ReferralId referralId);
79
76
 
77
+ /// @dev callback from product service when a referral is used.
78
+ /// Calling this will increment the referral usage counter.
79
+ function processReferral(
80
+ NftId distributionNftId,
81
+ ReferralId referralId
82
+ ) external;
83
+
80
84
  /// @dev callback from product service when selling a policy for a specific referralId
81
85
  function processSale(
82
86
  NftId distributionNftId,
83
87
  ReferralId referralId,
84
- IPolicy.Premium memory premium
88
+ IPolicy.PremiumInfo memory premium
85
89
  ) external;
86
90
 
87
91
  function referralIsValid(
@@ -0,0 +1,76 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {Amount, AmountLib} from "../../type/Amount.sol";
5
+ import {BasicPool} from "../../pool/BasicPool.sol";
6
+ import {BasicPoolAuthorization} from "../../pool/BasicPoolAuthorization.sol";
7
+ import {Fee} from "../../type/Fee.sol";
8
+ import {IAuthorization} from "../../authorization/IAuthorization.sol";
9
+ import {NftId} from "../../type/NftId.sol";
10
+ import {Seconds} from "../../type/Timestamp.sol";
11
+ import {UFixed} from "../../type/UFixed.sol";
12
+
13
+ contract FirePool is
14
+ BasicPool
15
+ {
16
+
17
+ constructor(
18
+ address registry,
19
+ NftId instanceNftId,
20
+ string memory componentName,
21
+ address token,
22
+ IAuthorization authorization
23
+ )
24
+ {
25
+ address initialOwner = msg.sender;
26
+ _intialize(
27
+ registry,
28
+ instanceNftId,
29
+ componentName,
30
+ token,
31
+ authorization,
32
+ initialOwner);
33
+ }
34
+
35
+ function _intialize(
36
+ address registry,
37
+ NftId instanceNftId,
38
+ string memory componentName,
39
+ address token,
40
+ IAuthorization authorization,
41
+ address initialOwner
42
+ )
43
+ internal
44
+ initializer
45
+ {
46
+ _initializeBasicPool(
47
+ registry,
48
+ instanceNftId,
49
+ authorization,
50
+ token,
51
+ componentName,
52
+ initialOwner);
53
+ }
54
+
55
+ function createBundle(
56
+ Fee memory fee,
57
+ Amount initialAmount,
58
+ Seconds lifetime
59
+ )
60
+ external
61
+ virtual
62
+ restricted()
63
+ returns(NftId bundleNftId, Amount netStakedAmount)
64
+ {
65
+ address owner = msg.sender;
66
+ Amount netStakedAmount;
67
+ bundleNftId = _createBundle(
68
+ owner,
69
+ fee,
70
+ lifetime,
71
+ "" // filter
72
+ );
73
+ netStakedAmount = _stake(bundleNftId, initialAmount);
74
+ }
75
+
76
+ }
@@ -0,0 +1,34 @@
1
+
2
+
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ pragma solidity ^0.8.20;
5
+
6
+ import {BasicPoolAuthorization} from "../../pool/BasicPoolAuthorization.sol";
7
+ import {FirePool} from "./FirePool.sol";
8
+ import {IAccess} from "../../../contracts/authorization/IAccess.sol";
9
+ import {PUBLIC_ROLE} from "../../../contracts/type/RoleId.sol";
10
+
11
+ contract FirePoolAuthorization
12
+ is BasicPoolAuthorization
13
+ {
14
+
15
+ constructor(string memory poolName)
16
+ BasicPoolAuthorization(poolName)
17
+ {}
18
+
19
+
20
+ function _setupTargetAuthorizations()
21
+ internal
22
+ virtual override
23
+ {
24
+ super._setupTargetAuthorizations();
25
+ IAccess.FunctionInfo[] storage functions;
26
+
27
+ // authorize public role (open access to any account, only allows to lock target)
28
+ functions = _authorizeForTarget(getTargetName(), PUBLIC_ROLE());
29
+ // TODO: FirePool.createBundle must require a custom role (e.g. INVESTOR) instead of PUBLIC_ROLE
30
+ _authorize(functions, FirePool.createBundle.selector, "createBundle");
31
+ }
32
+
33
+ }
34
+
@@ -0,0 +1,316 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {ACTIVE, PAUSED} from "../../type/StateId.sol";
5
+ import {Amount, AmountLib} from "../../type/Amount.sol";
6
+ import {BasicProduct} from "../../product/BasicProduct.sol";
7
+ import {ClaimId} from "../../type/ClaimId.sol";
8
+ import {IAuthorization} from "../../authorization/IAuthorization.sol";
9
+ import {IOracleService} from "../../oracle/IOracleService.sol";
10
+ import {ORACLE} from "../../type/ObjectType.sol";
11
+ import {NftId} from "../../type/NftId.sol";
12
+ import {PayoutId} from "../../type/PayoutId.sol";
13
+ import {ReferralId, ReferralLib} from "../../type/Referral.sol";
14
+ import {RequestId} from "../../type/RequestId.sol";
15
+ import {RiskId, RiskIdLib} from "../../type/RiskId.sol";
16
+ import {Seconds} from "../../type/Seconds.sol";
17
+ import {StateId} from "../../type/StateId.sol";
18
+ import {Timestamp, TimestampLib} from "../../type/Timestamp.sol";
19
+ import {UFixed, UFixedLib} from "../../type/UFixed.sol";
20
+
21
+ uint64 constant SPECIAL_ROLE_INT = 11111;
22
+
23
+ function HALF_YEAR() pure returns (Seconds) {
24
+ return Seconds.wrap(180 * 86400);
25
+ }
26
+
27
+ function ONE_YEAR() pure returns (Seconds) {
28
+ return Seconds.wrap(360 * 86400);
29
+ }
30
+
31
+ /// @dev This is the product component for the fire insurance example.
32
+ /// It show how to insure a house for a given suminsured in a city.
33
+ /// The risk is based on the city.
34
+ /// If a fire is reported in the city, the policy holder is able to submit a claim and get a payout.
35
+ contract FireProduct is
36
+ BasicProduct
37
+ {
38
+ string[] _cities;
39
+ // map from city name to the RiskId
40
+ mapping(string cityName => RiskId risk) private _riskMapping;
41
+
42
+ constructor(
43
+ address registry,
44
+ NftId instanceNftid,
45
+ string memory componentName,
46
+ address token,
47
+ address pool,
48
+ IAuthorization authorization
49
+ )
50
+ {
51
+ address initialOwner = msg.sender;
52
+ _initialize(
53
+ registry,
54
+ instanceNftid,
55
+ componentName,
56
+ token,
57
+ pool,
58
+ authorization,
59
+ initialOwner);
60
+ initializeCity("London");
61
+ }
62
+
63
+ function _initialize(
64
+ address registry,
65
+ NftId instanceNftid,
66
+ string memory componentName,
67
+ address token,
68
+ address pool,
69
+ IAuthorization authorization,
70
+ address initialOwner
71
+ )
72
+ internal
73
+ initializer
74
+ {
75
+ _initializeBasicProduct(
76
+ registry,
77
+ instanceNftid,
78
+ authorization,
79
+ initialOwner,
80
+ componentName,
81
+ token,
82
+ false,
83
+ pool,
84
+ address(0)); // no distribution
85
+ }
86
+
87
+ function pauseCity(
88
+ string memory cityName
89
+ )
90
+ public
91
+ restricted()
92
+ {
93
+ if (_riskMapping[cityName].eqz()) {
94
+ revert(); // TODO: custom error
95
+ }
96
+
97
+ _updateRiskState(
98
+ _riskMapping[cityName],
99
+ PAUSED()
100
+ );
101
+ }
102
+
103
+ function unpauseCity(
104
+ string memory cityName
105
+ )
106
+ public
107
+ restricted()
108
+ {
109
+ if (_riskMapping[cityName].eqz()) {
110
+ revert(); // TODO: custom error
111
+ }
112
+
113
+ _updateRiskState(
114
+ _riskMapping[cityName],
115
+ ACTIVE()
116
+ );
117
+ }
118
+
119
+ function calculatePremium(
120
+ string memory cityName,
121
+ Amount sumInsured,
122
+ Seconds lifetime,
123
+ NftId bundleNftId
124
+ )
125
+ public
126
+ view
127
+ returns (Amount premiumAmount)
128
+ {
129
+ RiskId riskId = _riskMapping[cityName];
130
+ if (riskId.eqz()) {
131
+ revert(); // TODO: custom error
132
+ }
133
+ premiumAmount = calculatePremium(
134
+ sumInsured,
135
+ riskId,
136
+ lifetime,
137
+ "",
138
+ bundleNftId,
139
+ ReferralLib.zero());
140
+ }
141
+
142
+ function calculateNetPremium(
143
+ Amount sumInsured,
144
+ RiskId,
145
+ Seconds lifetime,
146
+ bytes memory
147
+ )
148
+ external
149
+ view
150
+ virtual override
151
+ returns (Amount netPremiumAmount)
152
+ {
153
+ UFixed numDays = UFixedLib.toUFixed(lifetime.toInt() / 86400);
154
+ // to simplify time calculation we assume 360 days per year
155
+ UFixed pctOfYear = numDays / UFixedLib.toUFixed(360);
156
+ Amount premiumPerYear = AmountLib.toAmount(sumInsured.toInt() / 20);
157
+ return premiumPerYear.multiplyWith(pctOfYear);
158
+ }
159
+
160
+ function createApplication(
161
+ address applicationOwner,
162
+ string memory cityName,
163
+ Amount sumInsured,
164
+ Seconds lifetime,
165
+ NftId bundleNftId
166
+ )
167
+ public
168
+ restricted()
169
+ returns (NftId policyNftId)
170
+ {
171
+ address applicationOwner = msg.sender;
172
+ RiskId riskId = initializeCity(cityName);
173
+
174
+ Amount premiumAmount = calculatePremium(
175
+ sumInsured,
176
+ riskId,
177
+ lifetime,
178
+ "",
179
+ bundleNftId,
180
+ ReferralLib.zero());
181
+
182
+ return _createApplication(
183
+ applicationOwner,
184
+ riskId,
185
+ sumInsured,
186
+ premiumAmount,
187
+ lifetime,
188
+ bundleNftId,
189
+ ReferralLib.zero(),
190
+ ""
191
+ );
192
+ }
193
+
194
+ function initializeCity(
195
+ string memory cityName
196
+ )
197
+ public
198
+ returns (RiskId riskId)
199
+ {
200
+ if (! _riskMapping[cityName].eqz()) {
201
+ return _riskMapping[cityName];
202
+ }
203
+ _cities.push(cityName);
204
+ riskId = RiskIdLib.toRiskId(cityName);
205
+ _createRisk(riskId, "");
206
+ _riskMapping[cityName] = riskId;
207
+ }
208
+
209
+ function createPolicy(
210
+ NftId applicationNftId,
211
+ bool requirePremiumPayment,
212
+ Timestamp activateAt
213
+ ) public {
214
+ // TODO: implement createPolicy
215
+
216
+ // _createPolicy(applicationNftId, activateAt);
217
+ // if (requirePremiumPayment == true) {
218
+ // _collectPremium(applicationNftId, activateAt);
219
+ // }
220
+ }
221
+
222
+ function decline(
223
+ NftId policyNftId
224
+ )
225
+ public
226
+ restricted()
227
+ {
228
+ // TODO: implement decline
229
+ // _decline(policyNftId);
230
+ }
231
+
232
+ function expire(
233
+ NftId policyNftId,
234
+ Timestamp expireAt
235
+ )
236
+ public
237
+ restricted()
238
+ returns (Timestamp)
239
+ {
240
+ // TODO: implement expire
241
+ // return _expire(policyNftId, expireAt);
242
+ }
243
+
244
+ function close(
245
+ NftId policyNftId
246
+ )
247
+ public
248
+ restricted()
249
+ {
250
+ // TODO: implement close
251
+ // _close(policyNftId);
252
+ }
253
+
254
+ function submitClaim(
255
+ NftId policyNftId,
256
+ Amount claimAmount,
257
+ bytes memory submissionData
258
+ )
259
+ public
260
+ restricted()
261
+ returns (ClaimId)
262
+ {
263
+ // TODO: implement submitClaim
264
+ // return _submitClaim(policyNftId, claimAmount, submissionData);
265
+
266
+ // TODO: check if fire was reported in the city
267
+ // TODO: if yes, process payout and close claimn
268
+ // TODO: if no, decline claim
269
+
270
+ }
271
+
272
+ // TODO: no longer needed? -> remove
273
+ // function confirmClaim(
274
+ // NftId policyNftId,
275
+ // ClaimId claimId,
276
+ // Amount confirmedAmount,
277
+ // bytes memory processData
278
+ // ) public {
279
+ // // TODO: implement confirmClaim
280
+ // // _confirmClaim(policyNftId, claimId, confirmedAmount, processData);
281
+ // }
282
+
283
+ // TODO: no longer needed? -> remove
284
+ // function declineClaim(
285
+ // NftId policyNftId,
286
+ // ClaimId claimId,
287
+ // bytes memory processData
288
+ // ) public {
289
+ // // TODO: implement declineClaim
290
+ // // _declineClaim(policyNftId, claimId, processData);
291
+ // }
292
+
293
+ // TODO: no longer needed? -> remove
294
+ // function createPayout(
295
+ // NftId policyNftId,
296
+ // ClaimId claimId,
297
+ // Amount amount,
298
+ // bytes memory data
299
+ // ) public returns (PayoutId) {
300
+ // return _createPayout(policyNftId, claimId, amount, data);
301
+ // }
302
+
303
+ // TODO: add method to report fire per city with a percentage of payout
304
+
305
+
306
+ // TODO: no longer needed? -> remove
307
+ // function processPayout(
308
+ // NftId policyNftId,
309
+ // PayoutId payoutId
310
+ // ) public {
311
+ // TODO: implement process all pending payouts for a risk - arguments cityname and payout percentage
312
+ // _processPayout(policyNftId, payoutId);
313
+ // }
314
+
315
+
316
+ }
@@ -0,0 +1,16 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {BasicProductAuthorization} from "../../product/BasicProductAuthorization.sol";
5
+
6
+
7
+ contract FireProductAuthorization
8
+ is BasicProductAuthorization
9
+ {
10
+
11
+ constructor(string memory poolName)
12
+ BasicProductAuthorization(poolName)
13
+ {}
14
+
15
+ }
16
+
@@ -0,0 +1,26 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
5
+
6
+ /// @dev FireUSD is a stablecoin with 6 decimals and an initial supply of 1 Billion tokens.
7
+ contract FireUSD is ERC20 {
8
+
9
+ string public constant NAME = "FireUSD";
10
+ string public constant SYMBOL = "HOT";
11
+ uint8 public constant DECIMALS = 6;
12
+ uint256 public constant INITIAL_SUPPLY = 10**9 * 6**DECIMALS; // 1 Billion 1'000'000'000
13
+
14
+ constructor()
15
+ ERC20(NAME, SYMBOL)
16
+ {
17
+ _mint(
18
+ _msgSender(),
19
+ INITIAL_SUPPLY
20
+ );
21
+ }
22
+
23
+ function decimals() public pure override returns(uint8) {
24
+ return DECIMALS;
25
+ }
26
+ }