@etherisc/gif-next 0.0.2-83d1db6-607 → 0.0.2-83e248c-054

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 (233) hide show
  1. package/README.md +6 -83
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +10 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +26 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +100 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +100 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +110 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +100 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +20 -0
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +10 -0
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +1 -1
  19. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
  21. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
  22. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  23. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +380 -116
  24. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +80 -14
  26. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  27. package/artifacts/contracts/instance/Instance.sol/Instance.json +310 -303
  28. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +76 -57
  30. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +171 -47
  32. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  33. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +208 -101
  34. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  35. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +62 -22
  36. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  37. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
  38. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
  39. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +85 -30
  40. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  42. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +8 -8
  44. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +6 -6
  46. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  47. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +6 -6
  48. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  49. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  50. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  51. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  52. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  53. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
  54. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
  55. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  56. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +175 -83
  57. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  58. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +29 -13
  59. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
  60. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +333 -160
  61. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  62. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +78 -14
  63. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
  64. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +372 -86
  65. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  66. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +55 -7
  67. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  68. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +183 -141
  69. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  70. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +45 -57
  71. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  72. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +111 -40
  73. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
  74. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +169 -113
  75. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
  76. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +251 -58
  77. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  78. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +101 -24
  79. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  80. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +438 -41
  81. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  82. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +430 -14
  83. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  84. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -14
  85. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
  86. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +575 -85
  87. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +71 -19
  89. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +468 -55
  91. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +18 -14
  93. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +114 -51
  95. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +16 -12
  97. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  98. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  99. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  100. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -24
  101. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  102. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  103. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  104. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
  105. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
  106. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  107. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +17 -36
  108. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  109. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +7 -7
  110. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  111. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
  112. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
  114. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
  115. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  116. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  117. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  118. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  119. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  120. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  121. package/artifacts/contracts/shared/IService.sol/IService.json +80 -14
  122. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  123. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  125. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  126. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  127. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  128. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
  129. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  130. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
  131. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  132. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  133. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  134. package/artifacts/contracts/shared/Service.sol/Service.json +86 -15
  135. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  136. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  138. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  139. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  140. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  141. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  142. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  143. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
  144. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  145. package/artifacts/contracts/test/TestService.sol/TestService.json +101 -26
  146. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  147. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  149. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  150. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  151. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  152. package/artifacts/contracts/types/Amount.sol/AmountLib.json +185 -0
  153. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  154. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  155. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  156. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +83 -4
  157. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
  159. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
  161. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  162. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  163. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  165. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  166. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  167. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  170. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +116 -7
  172. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
  174. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  175. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
  176. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  177. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
  178. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +1 -1
  179. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  180. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  181. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  182. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +17 -4
  183. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
  184. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  186. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  187. package/contracts/components/Component.sol +4 -2
  188. package/contracts/components/Distribution.sol +6 -2
  189. package/contracts/components/IComponent.sol +3 -1
  190. package/contracts/components/IPoolComponent.sol +1 -1
  191. package/contracts/components/Pool.sol +11 -8
  192. package/contracts/components/Product.sol +137 -59
  193. package/contracts/instance/BundleManager.sol +3 -4
  194. package/contracts/instance/IInstance.sol +25 -21
  195. package/contracts/instance/IInstanceService.sol +0 -4
  196. package/contracts/instance/Instance.sol +85 -102
  197. package/contracts/instance/InstanceAccessManager.sol +16 -11
  198. package/contracts/instance/InstanceReader.sol +31 -4
  199. package/contracts/instance/InstanceService.sol +29 -46
  200. package/contracts/instance/base/ComponentService.sol +17 -30
  201. package/contracts/instance/base/KeyValueStore.sol +8 -3
  202. package/contracts/instance/base/Lifecycle.sol +12 -4
  203. package/contracts/instance/module/IAccess.sol +2 -2
  204. package/contracts/instance/module/IBundle.sol +6 -4
  205. package/contracts/instance/module/IComponents.sol +6 -0
  206. package/contracts/instance/module/IPolicy.sol +11 -6
  207. package/contracts/instance/service/ApplicationService.sol +19 -14
  208. package/contracts/instance/service/BundleService.sol +163 -63
  209. package/contracts/instance/service/ClaimService.sol +114 -26
  210. package/contracts/instance/service/DistributionService.sol +38 -74
  211. package/contracts/instance/service/IApplicationService.sol +3 -7
  212. package/contracts/instance/service/IBundleService.sol +56 -22
  213. package/contracts/instance/service/IClaimService.sol +46 -15
  214. package/contracts/instance/service/IDistributionService.sol +1 -0
  215. package/contracts/instance/service/IPolicyService.sol +70 -5
  216. package/contracts/instance/service/IPoolService.sol +65 -1
  217. package/contracts/instance/service/PolicyService.sol +254 -116
  218. package/contracts/instance/service/PoolService.sol +132 -49
  219. package/contracts/instance/service/ProductService.sol +21 -52
  220. package/contracts/registry/IRegistryService.sol +4 -3
  221. package/contracts/registry/RegistryService.sol +10 -11
  222. package/contracts/registry/ReleaseManager.sol +20 -18
  223. package/contracts/shared/IService.sol +4 -6
  224. package/contracts/shared/Service.sol +21 -7
  225. package/contracts/test/TestService.sol +1 -1
  226. package/contracts/types/Amount.sol +65 -0
  227. package/contracts/types/ClaimId.sol +25 -2
  228. package/contracts/types/Fee.sol +12 -5
  229. package/contracts/types/ObjectType.sol +5 -5
  230. package/contracts/types/PayoutId.sol +33 -5
  231. package/contracts/types/StateId.sol +6 -2
  232. package/contracts/types/Timestamp.sol +5 -0
  233. package/package.json +1 -1
@@ -13,16 +13,11 @@ import {BundleManager} from "./BundleManager.sol";
13
13
  import {AccessManagerUpgradeableInitializeable} from "./AccessManagerUpgradeableInitializeable.sol";
14
14
  import {IRegistry} from "../registry/IRegistry.sol";
15
15
  import {IRegistryService} from "../registry/IRegistryService.sol";
16
- import {ChainNft} from "../registry/ChainNft.sol";
17
16
  import {Service} from "../../contracts/shared/Service.sol";
18
- import {IService} from "../shared/IService.sol";
19
17
  import {NftId} from "../../contracts/types/NftId.sol";
20
18
  import {RoleId} from "../types/RoleId.sol";
21
19
  import {ADMIN_ROLE, INSTANCE_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, POOL_OWNER_ROLE, PRODUCT_OWNER_ROLE, INSTANCE_SERVICE_ROLE, DISTRIBUTION_SERVICE_ROLE, POOL_SERVICE_ROLE, PRODUCT_SERVICE_ROLE, APPLICATION_SERVICE_ROLE, POLICY_SERVICE_ROLE, CLAIM_SERVICE_ROLE, BUNDLE_SERVICE_ROLE, INSTANCE_ROLE} from "../types/RoleId.sol";
22
20
  import {ObjectType, INSTANCE, BUNDLE, APPLICATION, POLICY, CLAIM, PRODUCT, DISTRIBUTION, REGISTRY, POOL} from "../types/ObjectType.sol";
23
- import {IDistributionComponent} from "../components/IDistributionComponent.sol";
24
- import {IPoolComponent} from "../components/IPoolComponent.sol";
25
- import {IProductComponent} from "../components/IProductComponent.sol";
26
21
 
27
22
  contract InstanceService is
28
23
  Service,
@@ -72,10 +67,9 @@ contract InstanceService is
72
67
  {
73
68
  address instanceOwner = msg.sender;
74
69
  IRegistry registry = getRegistry();
75
- address registryAddress = address(registry);
76
- NftId registryNftId = registry.getNftId(registryAddress);
77
- address registryServiceAddress = registry.getServiceAddress(REGISTRY(), getMajorVersion());
78
- IRegistryService registryService = IRegistryService(registryServiceAddress);
70
+ IRegistryService registryService = IRegistryService(
71
+ registry.getServiceAddress(
72
+ REGISTRY(), getVersion().toMajorPart()));
79
73
 
80
74
  clonedOzAccessManager = AccessManagerUpgradeableInitializeable(
81
75
  Clones.clone(_masterOzAccessManager));
@@ -89,7 +83,7 @@ contract InstanceService is
89
83
  clonedInstance = Instance(Clones.clone(_masterInstance));
90
84
  clonedInstance.initialize(
91
85
  address(clonedOzAccessManager),
92
- registryAddress,
86
+ address(registry),
93
87
  instanceOwner);
94
88
 
95
89
  clonedInstanceReader = InstanceReader(Clones.clone(address(_masterInstanceReader)));
@@ -113,7 +107,6 @@ contract InstanceService is
113
107
 
114
108
  IRegistry.ObjectInfo memory info = registryService.registerInstance(clonedInstance, instanceOwner);
115
109
  clonedInstanceNftId = info.nftId;
116
- // clonedInstance.linkToRegisteredNftId();
117
110
 
118
111
  emit LogInstanceCloned(
119
112
  address(clonedOzAccessManager),
@@ -169,7 +162,7 @@ contract InstanceService is
169
162
 
170
163
  function _grantDistributionServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
171
164
  // configure authorization for distribution service on instance
172
- address distributionServiceAddress = getRegistry().getServiceAddress(DISTRIBUTION(), getMajorVersion());
165
+ address distributionServiceAddress = getRegistry().getServiceAddress(DISTRIBUTION(), getVersion().toMajorPart());
173
166
  clonedAccessManager.grantRole(DISTRIBUTION_SERVICE_ROLE(), distributionServiceAddress);
174
167
  bytes4[] memory instanceDistributionServiceSelectors = new bytes4[](11);
175
168
  instanceDistributionServiceSelectors[0] = clonedInstance.createDistributionSetup.selector;
@@ -191,7 +184,7 @@ contract InstanceService is
191
184
 
192
185
  function _grantPoolServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
193
186
  // configure authorization for pool service on instance
194
- address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getMajorVersion());
187
+ address poolServiceAddress = getRegistry().getServiceAddress(POOL(), getVersion().toMajorPart());
195
188
  clonedAccessManager.grantRole(POOL_SERVICE_ROLE(), address(poolServiceAddress));
196
189
  bytes4[] memory instancePoolServiceSelectors = new bytes4[](4);
197
190
  instancePoolServiceSelectors[0] = clonedInstance.createPoolSetup.selector;
@@ -204,7 +197,7 @@ contract InstanceService is
204
197
 
205
198
  function _grantProductServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
206
199
  // configure authorization for product service on instance
207
- address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getMajorVersion());
200
+ address productServiceAddress = getRegistry().getServiceAddress(PRODUCT(), getVersion().toMajorPart());
208
201
  clonedAccessManager.grantRole(PRODUCT_SERVICE_ROLE(), address(productServiceAddress));
209
202
  bytes4[] memory instanceProductServiceSelectors = new bytes4[](5);
210
203
  instanceProductServiceSelectors[0] = clonedInstance.createProductSetup.selector;
@@ -220,7 +213,7 @@ contract InstanceService is
220
213
 
221
214
  function _grantApplicationServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
222
215
  // configure authorization for application services on instance
223
- address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getMajorVersion());
216
+ address applicationServiceAddress = getRegistry().getServiceAddress(APPLICATION(), getVersion().toMajorPart());
224
217
  clonedAccessManager.grantRole(APPLICATION_SERVICE_ROLE(), applicationServiceAddress);
225
218
  bytes4[] memory instanceApplicationServiceSelectors = new bytes4[](3);
226
219
  instanceApplicationServiceSelectors[0] = clonedInstance.createApplication.selector;
@@ -234,7 +227,7 @@ contract InstanceService is
234
227
 
235
228
  function _grantPolicyServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
236
229
  // configure authorization for policy services on instance
237
- address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getMajorVersion());
230
+ address policyServiceAddress = getRegistry().getServiceAddress(POLICY(), getVersion().toMajorPart());
238
231
  clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), policyServiceAddress);
239
232
  bytes4[] memory instancePolicyServiceSelectors = new bytes4[](2);
240
233
  instancePolicyServiceSelectors[0] = clonedInstance.updatePolicy.selector;
@@ -247,12 +240,13 @@ contract InstanceService is
247
240
 
248
241
  function _grantClaimServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
249
242
  // configure authorization for claim/payout services on instance
250
- address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getMajorVersion());
251
- clonedAccessManager.grantRole(POLICY_SERVICE_ROLE(), claimServiceAddress);
252
- // TODO add claims function authz
253
- bytes4[] memory instanceClaimServiceSelectors = new bytes4[](0);
254
- // instanceClaimServiceSelectors[0] = clonedInstance.updatePolicy.selector;
255
- // instanceClaimServiceSelectors[1] = clonedInstance.updatePolicyState.selector;
243
+ address claimServiceAddress = getRegistry().getServiceAddress(CLAIM(), getVersion().toMajorPart());
244
+ clonedAccessManager.grantRole(CLAIM_SERVICE_ROLE(), claimServiceAddress);
245
+ bytes4[] memory instanceClaimServiceSelectors = new bytes4[](4);
246
+ instanceClaimServiceSelectors[0] = clonedInstance.createClaim.selector;
247
+ instanceClaimServiceSelectors[1] = clonedInstance.updateClaim.selector;
248
+ instanceClaimServiceSelectors[2] = clonedInstance.createPayout.selector;
249
+ instanceClaimServiceSelectors[3] = clonedInstance.updatePayout.selector;
256
250
  clonedAccessManager.setCoreTargetFunctionRole(
257
251
  "Instance",
258
252
  instanceClaimServiceSelectors,
@@ -261,7 +255,7 @@ contract InstanceService is
261
255
 
262
256
  function _grantBundleServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance, BundleManager clonedBundleManager) internal {
263
257
  // configure authorization for bundle service on instance
264
- address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getMajorVersion());
258
+ address bundleServiceAddress = getRegistry().getServiceAddress(BUNDLE(), getVersion().toMajorPart());
265
259
  clonedAccessManager.grantRole(BUNDLE_SERVICE_ROLE(), address(bundleServiceAddress));
266
260
  bytes4[] memory instanceBundleServiceSelectors = new bytes4[](3);
267
261
  instanceBundleServiceSelectors[0] = clonedInstance.createBundle.selector;
@@ -287,7 +281,7 @@ contract InstanceService is
287
281
 
288
282
  function _grantInstanceServiceAuthorizations(InstanceAccessManager clonedAccessManager, Instance clonedInstance) internal {
289
283
  // configure authorization for instance service on instance
290
- address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
284
+ address instanceServiceAddress = getRegistry().getServiceAddress(INSTANCE(), getVersion().toMajorPart());
291
285
  clonedAccessManager.grantRole(INSTANCE_SERVICE_ROLE(), instanceServiceAddress);
292
286
  bytes4[] memory instanceInstanceServiceSelectors = new bytes4[](1);
293
287
  instanceInstanceServiceSelectors[0] = clonedInstance.setInstanceReader.selector;
@@ -359,7 +353,7 @@ contract InstanceService is
359
353
  _masterInstanceReader = instanceReaderAddress;
360
354
  _masterInstanceBundleManager = bundleManagerAddress;
361
355
 
362
- IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getMajorVersion()));
356
+ IRegistryService registryService = IRegistryService(getRegistry().getServiceAddress(REGISTRY(), getVersion().toMajorPart()));
363
357
  IInstance masterInstance = IInstance(_masterInstance);
364
358
  IRegistry.ObjectInfo memory info = registryService.registerInstance(masterInstance, getOwner());
365
359
  masterInstanceNftId = info.nftId;
@@ -395,20 +389,8 @@ contract InstanceService is
395
389
  return _masterInstanceReader;
396
390
  }
397
391
 
398
- function getMasterInstance() external view returns (address) {
399
- return _masterInstance;
400
- }
401
-
402
- function getMasterInstanceAccessManager() external view returns (address) {
403
- return _masterInstanceAccessManager;
404
- }
405
-
406
- function getMasterInstanceBundleManager() external view returns (address) {
407
- return _masterInstanceBundleManager;
408
- }
409
-
410
392
  // From IService
411
- function getDomain() public pure override(Service, IService) returns(ObjectType) {
393
+ function getDomain() public pure override returns(ObjectType) {
412
394
  return INSTANCE();
413
395
  }
414
396
 
@@ -426,7 +408,7 @@ contract InstanceService is
426
408
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
427
409
  // TODO while InstanceService is not deployed in InstanceServiceManager constructor
428
410
  // owner is InstanceServiceManager deployer
429
- initializeService(registryAddress, owner);
411
+ initializeService(registryAddress, address(0), owner);
430
412
  registerInterface(type(IInstanceService).interfaceId);
431
413
  }
432
414
 
@@ -459,18 +441,19 @@ contract InstanceService is
459
441
 
460
442
  // TODO called by component, but target can be component helper...so needs target name
461
443
  // TODO check that targetName associated with component...how???
462
- //function setTargetLocked(string memory targetName, bool locked) onlyComponent external {
463
444
  function setComponentLocked(bool locked) onlyComponent external {
445
+
464
446
  address componentAddress = msg.sender;
465
447
  IRegistry registry = getRegistry();
466
448
  NftId instanceNftId = registry.getObjectInfo(componentAddress).parentNftId;
467
- address instanceAddress = registry.getObjectInfo(instanceNftId).objectAddress;
468
- IInstance instance = IInstance(instanceAddress);
469
449
 
470
- InstanceAccessManager accessManager = instance.getInstanceAccessManager();
471
- // TODO setLocked by target address?
472
- string memory componentName = ShortStrings.toString(accessManager.getTargetInfo(componentAddress).name);
473
- accessManager.setTargetLocked(componentName, locked);
450
+ IInstance instance = IInstance(
451
+ registry.getObjectInfo(
452
+ instanceNftId).objectAddress);
453
+
454
+ instance.getInstanceAccessManager().setTargetLocked(
455
+ componentAddress,
456
+ locked);
474
457
  }
475
458
 
476
459
  function _validateInstanceAndComponent(NftId instanceNftId, address componentAddress)
@@ -16,7 +16,6 @@ import {InstanceAccessManager} from "../InstanceAccessManager.sol";
16
16
 
17
17
  abstract contract ComponentService is Service {
18
18
 
19
- error ErrorComponentServiceAlreadyRegistered(address component, NftId nftId);
20
19
  error ErrorComponentServiceNotComponent(address component);
21
20
  error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
22
21
  error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
@@ -33,13 +32,15 @@ abstract contract ComponentService is Service {
33
32
  // view functions
34
33
 
35
34
  function getRegistryService() public view virtual returns (IRegistryService) {
36
- address service = getRegistry().getServiceAddress(REGISTRY(), getMajorVersion());
37
- return IRegistryService(service);
35
+ return IRegistryService(_getServiceAddress(REGISTRY()));
38
36
  }
39
37
 
40
38
  function getInstanceService() public view returns (InstanceService) {
41
- address service = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
42
- return InstanceService(service);
39
+ return InstanceService(_getServiceAddress(INSTANCE()));
40
+ }
41
+
42
+ function _getServiceAddress(ObjectType domain) internal view returns (address) {
43
+ return getRegistry().getServiceAddress(domain, getVersion().toMajorPart());
43
44
  }
44
45
 
45
46
  // internal functions
@@ -60,12 +61,6 @@ abstract contract ComponentService is Service {
60
61
  // component may only be registerd by initial owner of component
61
62
  owner = msg.sender;
62
63
 
63
- // check component has not already been registerd
64
- NftId compoentNftId = getRegistry().getNftId(componentAddress);
65
- if(compoentNftId.gtz()) {
66
- revert ErrorComponentServiceAlreadyRegistered(componentAddress, compoentNftId);
67
- }
68
-
69
64
  // check this is a component
70
65
  component = IComponent(componentAddress);
71
66
  if(!component.supportsInterface(type(IComponent).interfaceId)) {
@@ -87,48 +82,40 @@ abstract contract ComponentService is Service {
87
82
  // check instance has assigned required role to owner
88
83
  instanceNftId = componentInfo.parentNftId;
89
84
  instance = _getInstance(instanceNftId);
90
- InstanceAccessManager accessManager = instance.getInstanceAccessManager();
91
- bool hasRole = accessManager.hasRole(
92
- requiredRole,
93
- owner);
94
-
95
- if(!hasRole) {
85
+ if(!instance.getInstanceAccessManager().hasRole(requiredRole, owner)) {
96
86
  revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
97
87
  }
98
88
  }
99
89
 
100
90
  // internal view functions
101
91
 
102
- function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
103
- IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
104
- return IInstance(instanceInfo.objectAddress);
105
- }
106
-
107
92
  function _getAndVerifyComponentInfoAndInstance(
108
- //address component,
109
93
  ObjectType expectedType
110
94
  )
111
95
  internal
112
96
  view
113
97
  returns(
98
+ NftId nftId,
114
99
  IRegistry.ObjectInfo memory info,
115
100
  IInstance instance
116
101
  )
117
102
  {
118
103
  IRegistry registry = getRegistry();
119
- //TODO redundant check -> just check type
120
- //NftId componentNftId = registry.getNftId(component);
121
- //require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
122
104
 
123
105
  info = registry.getObjectInfo(msg.sender);
124
106
  require(info.objectType == expectedType, "OBJECT_TYPE_INVALID");
125
107
 
126
- address instanceAddress = registry.getObjectInfo(info.parentNftId).objectAddress;
127
- instance = IInstance(instanceAddress);
108
+ nftId = info.nftId;
109
+ instance = _getInstance(info.parentNftId);
128
110
 
129
- InstanceAccessManager accessManager = instance.getInstanceAccessManager();
130
- if (accessManager.isTargetLocked(info.objectAddress)) {
111
+ if (instance.getInstanceAccessManager().isTargetLocked(info.objectAddress)) {
131
112
  revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
132
113
  }
133
114
  }
115
+
116
+ function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
117
+ return IInstance(
118
+ getRegistry().getObjectInfo(
119
+ instanceNftId).objectAddress);
120
+ }
134
121
  }
@@ -5,7 +5,7 @@ import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blockn
5
5
  import {Key32, KeyId, Key32Lib} from "../../types/Key32.sol";
6
6
  import {NftId} from "../../types/NftId.sol";
7
7
  import {ObjectType} from "../../types/ObjectType.sol";
8
- import {StateId, ACTIVE} from "../../types/StateId.sol";
8
+ import {StateId, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
9
9
  import {Timestamp, TimestampLib} from "../../types/Timestamp.sol";
10
10
 
11
11
  import {Lifecycle} from "./Lifecycle.sol";
@@ -79,10 +79,15 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
79
79
  // update data
80
80
  _value[key32].data = data;
81
81
 
82
- // update metadata (and state)
82
+ // update state
83
+ if(state != KEEP_STATE()) {
84
+ metadata.state = state;
85
+ }
86
+
87
+ // update reest of metadata
83
88
  address updatedBy = msg.sender;
84
89
  Blocknumber lastUpdatedIn = metadata.updatedIn;
85
- metadata.state = state;
90
+
86
91
  metadata.updatedBy = updatedBy;
87
92
  metadata.updatedIn = blockBlocknumber();
88
93
 
@@ -4,8 +4,8 @@ pragma solidity ^0.8.20;
4
4
  import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
5
 
6
6
  import {NftId} from "../../types/NftId.sol";
7
- import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK} from "../../types/ObjectType.sol";
8
- import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, UNDERWRITTEN, REVOKED, DECLINED} from "../../types/StateId.sol";
7
+ import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK, CLAIM} from "../../types/ObjectType.sol";
8
+ import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, COLLATERALIZED, REVOKED, SUBMITTED, CONFIRMED, DECLINED} from "../../types/StateId.sol";
9
9
  import {ILifecycle} from "./ILifecycle.sol";
10
10
 
11
11
  contract Lifecycle is
@@ -25,6 +25,7 @@ contract Lifecycle is
25
25
  _setupBundleLifecycle();
26
26
  _setupComponentLifecycle();
27
27
  _setupPolicyLifecycle();
28
+ _setupClaimLifecycle();
28
29
  _setupRiskLifecycle();
29
30
  }
30
31
 
@@ -95,11 +96,18 @@ contract Lifecycle is
95
96
  _initialState[POLICY()] = APPLIED();
96
97
  _isValidTransition[POLICY()][APPLIED()][REVOKED()] = true;
97
98
  _isValidTransition[POLICY()][APPLIED()][DECLINED()] = true;
98
- _isValidTransition[POLICY()][APPLIED()][UNDERWRITTEN()] = true;
99
- _isValidTransition[POLICY()][UNDERWRITTEN()][ACTIVE()] = true;
99
+ _isValidTransition[POLICY()][APPLIED()][COLLATERALIZED()] = true;
100
+ _isValidTransition[POLICY()][COLLATERALIZED()][ACTIVE()] = true;
100
101
  _isValidTransition[POLICY()][ACTIVE()][CLOSED()] = true;
101
102
  }
102
103
 
104
+ function _setupClaimLifecycle() internal {
105
+ _initialState[CLAIM()] = SUBMITTED();
106
+ _isValidTransition[CLAIM()][SUBMITTED()][CONFIRMED()] = true;
107
+ _isValidTransition[CLAIM()][SUBMITTED()][DECLINED()] = true;
108
+ _isValidTransition[CLAIM()][CONFIRMED()][CLOSED()] = true;
109
+ }
110
+
103
111
  function _setupRiskLifecycle() internal {
104
112
  _initialState[RISK()] = ACTIVE();
105
113
  _isValidTransition[RISK()][ACTIVE()][PAUSED()] = true;
@@ -43,9 +43,9 @@ interface IAccess {
43
43
  error ErrorIAccessRoleTypeInvalid(RoleId roleId, Type rtype);
44
44
 
45
45
  error ErrorIAccessTargetAddressZero();
46
- error ErrorIAccessTargetDoesNotExist(ShortString name);
46
+ error ErrorIAccessTargetDoesNotExist(address target);
47
47
  error ErrorIAccessTargetExists(address target, ShortString name);
48
- error ErrorIAccessTargetTypeInvalid(ShortString name, Type ttype);
48
+ error ErrorIAccessTargetTypeInvalid(address target, Type ttype);
49
49
  error ErrorIAccessTargetNameEmpty(address target);
50
50
  error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
51
51
  error ErrorIAccessTargetLocked(address target);
@@ -1,21 +1,23 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {Amount} from "../../types/Amount.sol";
4
5
  import {NftId} from "../../types/NftId.sol";
5
6
  import {Fee} from "../../types/Fee.sol";
6
7
  import {Seconds} from "../../types/Seconds.sol";
7
8
  import {Timestamp} from "../../types/Timestamp.sol";
8
9
 
9
10
  interface IBundle {
11
+
10
12
  struct BundleInfo {
11
13
  NftId poolNftId;
12
14
  Fee fee; // bundle fee on net premium amounts
13
15
  bytes filter; // required conditions for applications to be considered for collateralization by this bundle
14
- uint256 capitalAmount; // net investment capital + net premiums - payouts
15
- uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
16
- uint256 balanceAmount; // total amount of funds: capitalAmount + fees (balance >= captial)
16
+ Amount capitalAmount; // net stakings + net premiums - payouts
17
+ Amount lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= capital amount)
18
+ Amount feeAmount; // accumulated fee amount
17
19
  Seconds lifetime;
18
- Timestamp expiredAt; // no new policies
20
+ Timestamp expiredAt; // no new policies starting with this timestamp
19
21
  Timestamp closedAt; // no open policies, locked amount = 0
20
22
  }
21
23
  }
@@ -3,6 +3,7 @@ pragma solidity ^0.8.20;
3
3
 
4
4
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
5
5
 
6
+ import {Amount} from "../../types/Amount.sol";
6
7
  import {Fee} from "../../types/Fee.sol";
7
8
  import {NftId} from "../../types/NftId.sol";
8
9
  import {RoleId} from "../../types/RoleId.sol";
@@ -16,13 +17,18 @@ interface IComponents {
16
17
  IERC20Metadata token;
17
18
  TokenHandler tokenHandler;
18
19
  address wallet;
20
+ Amount balanceAmount; // calculated balance (may not necessarily match withg wallet balance)
21
+ Amount feeAmount; // accumulated fees belonging to component owner
19
22
  bytes data; // will hold component type specific additional info (eg encoded pool info)
20
23
  }
21
24
 
22
25
  struct PoolInfo {
23
26
  NftId productNftId; // the nft of the product this pool is linked to
24
27
  RoleId bundleOwnerRole; // the required role for bundle owners
28
+ // TODO maxCapitalAmount -> maxBalanceAmount
25
29
  uint256 maxCapitalAmount; // max capital amount allowed for pool
30
+ uint256 balanceAmount; // current pool balance (accounting view)
31
+ uint256 feeAmount; // accumulated fee amount
26
32
  bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
27
33
  bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
28
34
  bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
@@ -1,6 +1,7 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
+ import {Amount} from "../../types/Amount.sol";
4
5
  import {NftId} from "../../types/NftId.sol";
5
6
  import {ClaimId} from "../../types/ClaimId.sol";
6
7
  import {ReferralId} from "../../types/Referral.sol";
@@ -42,13 +43,13 @@ interface IPolicy {
42
43
  RiskId riskId;
43
44
  uint256 sumInsuredAmount;
44
45
  uint256 premiumAmount;
45
- uint256 premiumPaidAmount;
46
+ uint256 premiumPaidAmount; // when lower than premium amount: max payout decreased accordingly
46
47
  Seconds lifetime;
47
48
  bytes applicationData;
48
49
  bytes policyData;
49
50
  uint16 claimsCount;
50
51
  uint16 openClaimsCount;
51
- uint256 payoutAmount;
52
+ Amount payoutAmount;
52
53
  Timestamp activatedAt; // time of underwriting
53
54
  Timestamp expiredAt; // no new claims (activatedAt + lifetime)
54
55
  Timestamp closedAt; // no locked capital (or declinedAt)
@@ -56,16 +57,20 @@ interface IPolicy {
56
57
 
57
58
  // claimId neeeds to be encoded policyNftId:claimId combination
58
59
  struct ClaimInfo {
59
- uint256 claimAmount;
60
- uint256 paidAmount;
60
+ Amount claimAmount;
61
+ Amount paidAmount;
62
+ uint8 payoutsCount;
63
+ uint8 openPayoutsCount;
61
64
  bytes data;
62
- Timestamp closedAt; // payoment of confirmed claim amount (or declinedAt)
65
+ // TODO consider to add processData that may include information supporting confirm or decline
66
+ Timestamp closedAt; // payment of confirmed claim amount (or declinedAt)
63
67
  }
64
68
 
65
69
  // claimId neeeds to be encoded policyNftId:claimId combination
66
70
  struct PayoutInfo {
67
71
  ClaimId claimId;
68
- uint256 amount;
72
+ Amount amount;
73
+ // TODO consider to add a beneficiary address that will be the receiver of the payout tokens
69
74
  bytes data;
70
75
  Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
71
76
  }
@@ -23,12 +23,13 @@ import {TokenHandler} from "../../shared/TokenHandler.sol";
23
23
  import {IVersionable} from "../../shared/IVersionable.sol";
24
24
  import {Versionable} from "../../shared/Versionable.sol";
25
25
 
26
+ import {AmountLib} from "../../types/Amount.sol";
26
27
  import {Seconds} from "../../types/Seconds.sol";
27
28
  import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
28
29
  import {UFixed, UFixedLib} from "../../types/UFixed.sol";
29
30
  import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
30
31
  import {ObjectType, DISTRIBUTION, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, BUNDLE} from "../../types/ObjectType.sol";
31
- import {APPLIED, REVOKED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
32
+ import {APPLIED, REVOKED, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
32
33
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
33
34
  import {Fee, FeeLib} from "../../types/Fee.sol";
34
35
  import {ReferralId} from "../../types/Referral.sol";
@@ -65,14 +66,14 @@ contract ApplicationService is
65
66
  address initialOwner;
66
67
  (registryAddress, initialOwner) = abi.decode(data, (address, address));
67
68
 
68
- initializeService(registryAddress, owner);
69
+ initializeService(registryAddress, address(0), owner);
69
70
  registerInterface(type(IApplicationService).interfaceId);
70
71
 
71
- _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), getMajorVersion()));
72
+ _distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), getVersion().toMajorPart()));
72
73
  }
73
74
 
74
75
 
75
- function getDomain() public pure override(IService, Service) returns(ObjectType) {
76
+ function getDomain() public pure override returns(ObjectType) {
76
77
  return APPLICATION();
77
78
  }
78
79
 
@@ -90,13 +91,13 @@ contract ApplicationService is
90
91
  virtual
91
92
  returns (NftId applicationNftId)
92
93
  {
93
- (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
94
+ (NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
94
95
  // TODO: add validations (see create bundle in pool service)
95
96
 
96
97
  applicationNftId = getRegistryService().registerPolicy(
97
98
  IRegistry.ObjectInfo(
98
99
  zeroNftId(),
99
- productInfo.nftId,
100
+ productNftId,
100
101
  POLICY(),
101
102
  false, // intercepting property for policies is defined on product
102
103
  address(0),
@@ -107,7 +108,7 @@ contract ApplicationService is
107
108
 
108
109
  // (uint256 premiumAmount,,,,,) = calculatePremium(
109
110
  IPolicy.Premium memory premium = calculatePremium(
110
- productInfo.nftId,
111
+ productNftId,
111
112
  riskId,
112
113
  sumInsuredAmount,
113
114
  lifetime,
@@ -117,7 +118,7 @@ contract ApplicationService is
117
118
  );
118
119
 
119
120
  IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
120
- productInfo.nftId,
121
+ productNftId,
121
122
  bundleNftId,
122
123
  referralId,
123
124
  riskId,
@@ -129,7 +130,7 @@ contract ApplicationService is
129
130
  "",
130
131
  0,
131
132
  0,
132
- 0,
133
+ AmountLib.zero(),
133
134
  zeroTimestamp(),
134
135
  zeroTimestamp(),
135
136
  zeroTimestamp()
@@ -172,7 +173,7 @@ contract ApplicationService is
172
173
  external
173
174
  virtual override
174
175
  {
175
- (, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
176
+ (,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
176
177
  instance.updateApplicationState(applicationNftId, REVOKED());
177
178
  }
178
179
 
@@ -262,7 +263,7 @@ contract ApplicationService is
262
263
  {
263
264
  IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
264
265
  if(bundleInfo.poolNftId != poolNftId) {
265
- revert IApplicationServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
266
+ revert ErrorApplicationServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
266
267
  }
267
268
  uint256 t = bundleInfo.fee.fixedFee;
268
269
  premium.bundleFeeFixAmount = t;
@@ -316,7 +317,7 @@ contract ApplicationService is
316
317
  {
317
318
  IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
318
319
  if(bundleInfo.poolNftId != poolNftId) {
319
- revert IApplicationServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
320
+ revert ErrorApplicationServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
320
321
  }
321
322
  uint256 t = (UFixedLib.toUFixed(netPremiumAmount) * bundleInfo.fee.fractionalFee).toInt();
322
323
  premium.bundleFeeVarAmount = t;
@@ -337,14 +338,18 @@ contract ApplicationService is
337
338
 
338
339
  function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
339
340
  IRegistry.ObjectInfo memory productInfo;
340
- (productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
341
+ (, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
341
342
  product = Product(productInfo.objectAddress);
342
343
  }
343
344
 
344
345
  function _getAndVerifyProduct(NftId productNftId) internal view returns (Product product) {
345
346
  IRegistry registry = getRegistry();
346
347
  IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productNftId);
347
- require(productInfo.objectType == PRODUCT(), "OBJECT_TYPE_INVALID");
348
+
349
+ if(productInfo.objectType != PRODUCT()) {
350
+ revert ErrorApplicationServiceNotProduct(productNftId, productInfo.objectType);
351
+ }
352
+
348
353
  product = Product(productInfo.objectAddress);
349
354
  }
350
355
  }