@etherisc/gif-next 0.0.2-7b65ccc-404 → 0.0.2-7bc90c5-046

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