@etherisc/gif-next 0.0.2-21cad4d-822 → 0.0.2-239d061-784

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 (416) hide show
  1. package/README.md +407 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +687 -34
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1114 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → components/IComponent.sol/IComponent.json} +281 -226
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +695 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +881 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +800 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1140 -141
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +1065 -160
  18. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
  19. package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
  20. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
  21. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
  22. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
  23. package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
  24. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
  26. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
  28. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
  30. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
  32. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  35. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  36. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  37. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  38. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  39. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  40. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  41. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  42. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  43. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
  44. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  45. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
  46. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  47. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
  48. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  49. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
  50. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  51. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
  52. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  53. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
  54. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  55. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1322 -806
  56. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  57. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +591 -0
  58. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  59. package/artifacts/contracts/instance/Instance.sol/Instance.json +2343 -892
  60. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  61. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +984 -0
  62. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  63. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1386 -0
  64. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  65. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1164 -0
  66. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  67. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +584 -0
  68. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
  70. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +728 -0
  72. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  73. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  74. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  75. package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
  76. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  77. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -0
  78. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  79. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
  80. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  81. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +254 -0
  82. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  83. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  84. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  85. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IDistribution.sol/IDistribution.json} +2 -2
  86. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  87. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  88. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  89. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  90. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  91. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  92. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  93. package/artifacts/contracts/instance/{treasury → module}/ITreasury.sol/ITreasury.json +1 -1
  94. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1091 -0
  96. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1292 -0
  98. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +560 -0
  100. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +897 -0
  102. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +548 -0
  104. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +625 -0
  106. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +785 -0
  108. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  109. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
  110. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  111. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +771 -0
  112. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  113. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +499 -0
  114. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  115. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +536 -0
  116. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  117. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1352 -0
  118. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  119. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +616 -0
  120. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  121. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +931 -0
  122. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  123. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +548 -0
  124. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  125. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +981 -0
  126. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  127. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +548 -0
  128. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  129. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +239 -2
  130. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  131. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +578 -29
  132. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  133. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +986 -0
  134. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  135. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  136. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  137. package/artifacts/contracts/registry/Registry.sol/Registry.json +651 -68
  138. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  139. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  140. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  141. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1325 -0
  142. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  143. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +575 -0
  144. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  145. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
  146. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  147. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +505 -0
  148. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  149. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  150. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  151. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
  152. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  153. package/artifacts/contracts/{registry/Registry.sol/Registerable.json → shared/INftOwnable.sol/INftOwnable.json} +61 -76
  154. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  155. package/artifacts/contracts/{instance/product/IProductService.sol/IProductService.json → shared/IPolicyHolder.sol/IPolicyHolder.json} +68 -66
  156. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  157. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +201 -0
  158. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  159. package/artifacts/contracts/shared/IService.sol/IService.json +421 -0
  160. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  161. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +205 -0
  162. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  163. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +277 -0
  164. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  165. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +172 -0
  166. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  167. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +473 -0
  168. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  169. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +389 -0
  170. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  171. package/artifacts/contracts/shared/Service.sol/Service.json +601 -0
  172. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  173. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  174. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  175. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  176. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  177. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +228 -0
  178. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  179. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  180. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  181. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +420 -0
  182. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  183. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  184. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  185. package/artifacts/contracts/test/TestService.sol/TestService.json +733 -0
  186. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  187. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  188. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  189. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  190. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  191. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +286 -0
  192. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  193. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  194. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  195. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  196. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  197. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
  198. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  199. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  200. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  202. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
  204. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  205. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  206. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  207. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
  208. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  209. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  210. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  212. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  213. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  214. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
  216. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  218. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  219. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  220. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  221. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
  222. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  223. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +77 -2
  224. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  225. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  226. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  227. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  228. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  229. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  230. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  231. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  232. package/contracts/components/Component.sol +200 -47
  233. package/contracts/components/Distribution.sol +156 -0
  234. package/contracts/components/IComponent.sol +50 -0
  235. package/contracts/components/IDistributionComponent.sol +47 -0
  236. package/contracts/components/IPoolComponent.sol +87 -0
  237. package/contracts/components/IProductComponent.sol +39 -0
  238. package/contracts/components/Pool.sol +229 -27
  239. package/contracts/components/Product.sol +236 -47
  240. package/contracts/experiment/cloning/Cloner.sol +47 -0
  241. package/contracts/instance/BundleManager.sol +125 -0
  242. package/contracts/instance/Cloneable.sol +46 -0
  243. package/contracts/instance/IInstance.sol +71 -24
  244. package/contracts/instance/IInstanceService.sol +41 -0
  245. package/contracts/instance/Instance.sol +247 -51
  246. package/contracts/instance/InstanceAccessManager.sol +297 -0
  247. package/contracts/instance/InstanceReader.sol +293 -0
  248. package/contracts/instance/InstanceService.sol +434 -0
  249. package/contracts/instance/InstanceServiceManager.sol +54 -0
  250. package/contracts/instance/ObjectManager.sol +84 -0
  251. package/contracts/instance/base/ComponentService.sol +134 -0
  252. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  253. package/contracts/instance/base/ILifecycle.sol +30 -0
  254. package/contracts/instance/base/KeyValueStore.sol +172 -0
  255. package/contracts/instance/base/Lifecycle.sol +100 -0
  256. package/contracts/instance/module/IAccess.sol +47 -0
  257. package/contracts/instance/module/IBundle.sol +20 -0
  258. package/contracts/instance/module/IDistribution.sol +39 -0
  259. package/contracts/instance/module/IPolicy.sol +45 -0
  260. package/contracts/instance/module/IRisk.sol +11 -0
  261. package/contracts/instance/module/ISetup.sol +47 -0
  262. package/contracts/instance/module/ITreasury.sol +23 -0
  263. package/contracts/instance/service/ApplicationService.sol +268 -0
  264. package/contracts/instance/service/BundleService.sol +298 -0
  265. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  266. package/contracts/instance/service/DistributionService.sol +105 -0
  267. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  268. package/contracts/instance/service/IApplicationService.sol +82 -0
  269. package/contracts/instance/service/IBundleService.sol +54 -0
  270. package/contracts/instance/service/IDistributionService.sol +12 -0
  271. package/contracts/instance/service/IPolicyService.sol +88 -0
  272. package/contracts/instance/service/IPoolService.sol +20 -0
  273. package/contracts/instance/service/IProductService.sol +40 -0
  274. package/contracts/instance/service/PolicyService.sol +524 -0
  275. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  276. package/contracts/instance/service/PoolService.sol +109 -0
  277. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  278. package/contracts/instance/service/ProductService.sol +233 -0
  279. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  280. package/contracts/registry/ChainNft.sol +129 -62
  281. package/contracts/registry/IRegistry.sol +73 -41
  282. package/contracts/registry/IRegistryService.sol +65 -0
  283. package/contracts/registry/ITransferInterceptor.sol +6 -0
  284. package/contracts/registry/Registry.sol +406 -126
  285. package/contracts/registry/RegistryAccessManager.sol +216 -0
  286. package/contracts/registry/RegistryService.sol +261 -0
  287. package/contracts/registry/RegistryServiceManager.sol +62 -0
  288. package/contracts/registry/ReleaseManager.sol +332 -0
  289. package/contracts/registry/TokenRegistry.sol +113 -0
  290. package/contracts/shared/ContractDeployerLib.sol +72 -0
  291. package/contracts/shared/ERC165.sol +26 -0
  292. package/contracts/shared/INftOwnable.sol +27 -0
  293. package/contracts/shared/IPolicyHolder.sol +26 -0
  294. package/contracts/shared/IRegisterable.sol +15 -0
  295. package/contracts/shared/IService.sol +16 -0
  296. package/contracts/shared/IVersionable.sol +96 -0
  297. package/contracts/shared/NftOwnable.sol +187 -0
  298. package/contracts/shared/PolicyHolder.sol +52 -0
  299. package/contracts/shared/ProxyManager.sol +95 -0
  300. package/contracts/shared/Registerable.sol +81 -0
  301. package/contracts/shared/Service.sol +60 -0
  302. package/contracts/shared/TokenHandler.sol +27 -0
  303. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  304. package/contracts/shared/Versionable.sol +148 -0
  305. package/contracts/test/TestFee.sol +25 -0
  306. package/contracts/test/TestRegisterable.sol +18 -0
  307. package/contracts/test/TestRoleId.sol +14 -0
  308. package/contracts/test/TestService.sol +25 -0
  309. package/contracts/test/TestToken.sol +26 -0
  310. package/contracts/test/TestVersion.sol +44 -0
  311. package/contracts/test/TestVersionable.sol +17 -0
  312. package/contracts/test/Usdc.sol +26 -0
  313. package/contracts/types/AddressSet.sol +58 -0
  314. package/contracts/types/DistributorType.sol +55 -0
  315. package/contracts/types/Fee.sol +44 -20
  316. package/contracts/types/Key32.sol +50 -0
  317. package/contracts/types/NftId.sol +22 -1
  318. package/contracts/types/NftIdSet.sol +62 -0
  319. package/contracts/types/NumberId.sol +52 -0
  320. package/contracts/types/ObjectType.sol +64 -15
  321. package/contracts/types/Referral.sol +85 -0
  322. package/contracts/types/RiskId.sol +43 -0
  323. package/contracts/types/RoleId.sol +90 -0
  324. package/contracts/types/StateId.sol +18 -4
  325. package/contracts/types/Timestamp.sol +29 -4
  326. package/contracts/types/UFixed.sol +150 -31
  327. package/contracts/types/Version.sol +107 -0
  328. package/package.json +14 -5
  329. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  330. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  331. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  332. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -255
  333. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  334. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
  335. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  336. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  337. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  338. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  339. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  340. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  341. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  342. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  343. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  344. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  345. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -299
  346. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  347. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
  348. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  349. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  350. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -205
  351. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  352. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -217
  353. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  354. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
  355. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  356. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  357. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
  358. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
  359. package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
  360. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
  361. package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
  362. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  363. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  364. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -254
  365. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  366. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -254
  367. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  368. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  369. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -129
  370. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  371. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -155
  372. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  373. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  374. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  375. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  376. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  377. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  378. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
  379. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
  380. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
  381. package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.json +0 -490
  382. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
  383. package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
  384. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
  385. package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.json +0 -490
  386. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  387. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  388. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  389. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  390. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  391. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  392. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
  393. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  394. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  395. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  396. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
  397. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
  398. package/contracts/components/IPool.sol +0 -15
  399. package/contracts/components/IProduct.sol +0 -16
  400. package/contracts/experiment/statemachine/README.md +0 -112
  401. package/contracts/instance/access/Access.sol +0 -165
  402. package/contracts/instance/access/IAccess.sol +0 -63
  403. package/contracts/instance/component/ComponentModule.sol +0 -274
  404. package/contracts/instance/component/IComponent.sol +0 -74
  405. package/contracts/instance/lifecycle/ILifecycle.sol +0 -47
  406. package/contracts/instance/lifecycle/LifecycleModule.sol +0 -88
  407. package/contracts/instance/policy/IPolicy.sol +0 -50
  408. package/contracts/instance/policy/PolicyModule.sol +0 -114
  409. package/contracts/instance/pool/IPoolModule.sol +0 -23
  410. package/contracts/instance/pool/PoolModule.sol +0 -81
  411. package/contracts/instance/product/IProductService.sol +0 -36
  412. package/contracts/instance/product/ProductService.sol +0 -136
  413. package/contracts/instance/treasury/ITreasury.sol +0 -91
  414. package/contracts/instance/treasury/TokenHandler.sol +0 -24
  415. package/contracts/instance/treasury/TreasuryModule.sol +0 -168
  416. package/contracts/registry/IChainNft.sol +0 -21
package/README.md CHANGED
@@ -1,4 +1,44 @@
1
- # gif-next (Generic Insurance Framework next version)
1
+ # GIF-Next (Generic Insurance Framework, next version)
2
+
3
+
4
+ ```mermaid
5
+ graph TD
6
+ IPoolComponent --> IComponent
7
+ IComponent --> IRegisterable
8
+ IComponent --> ITransferInterceptor
9
+ IRegistryService --> IService
10
+ IService-->IRegisterable
11
+ IService-->IVersionable
12
+ IRegisterable-->INftOwnable
13
+ INftOwnable-->IERC165
14
+ ```
15
+
16
+ ## Add OpenZeppelin V5 Dependencies
17
+
18
+ ```shell
19
+ forge install openzeppelin-contracts-500=OpenZeppelin/openzeppelin-contracts@v5.0.0
20
+ cd cd lib/openzeppelin-contracts-500
21
+ git checkout tags/v5.0.0
22
+ cd ../..
23
+ ```
24
+
25
+ See `remappings.txt` to see how to work with different OpenZeppelin versions in parallel
26
+
27
+ ```
28
+ cat remappings.txt
29
+ @openzeppelin5/contracts/=lib/openzeppelin-contracts-500/contracts/
30
+ @openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/
31
+ @openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/
32
+ ```
33
+
34
+
35
+ ## Submodules checkout
36
+
37
+ This repository uses submodules. To checkout or update to the latest submodules, run the following command after updating to any revision (or checking out the repository)
38
+
39
+ ```shell
40
+ git submodule update --recursive
41
+ ```
2
42
 
3
43
  ## Hardhat
4
44
 
@@ -13,17 +53,65 @@ npm run test-with-gas
13
53
  npm run coverage
14
54
  ```
15
55
 
16
- ### Deployment
56
+ ### Docgen
17
57
 
58
+ Produce `solidty-docgen` documentation using the command below.
59
+
60
+ ```shell
61
+ hh docgen
18
62
  ```
19
- hh run --network <networkname> scripts/deploy.ts
63
+
64
+ The resulting markdown files are written to `docs`
65
+
66
+
67
+ ### Full protocol deployment
68
+
69
+ Install the dependencies before running the script below for the first time.
70
+
71
+ ```bash
72
+ npm install
73
+ ```
74
+
75
+ The deploy script will deploy all required contracts and create a test instance with a test product and a test pool.
76
+
77
+ ```bash
78
+ # run deployment on a locally created ganache instance
79
+ export SKIP_VERIFICATION=true
80
+ hh run scripts/deploy_all.ts
20
81
  ```
21
82
 
22
- Networks:
23
- - hardhat (dynamically created network - https://hardhat.org/hardhat-network/docs/overview)
24
- - anvil (anvsil chain running in container next when using devcontainer)
25
- - mumbai (polygon testnet, requires WEB3_INFURA_PROJECT_ID)
26
- - mainnet (polygon mainnet, requires WEB3_INFURA_PROJECT_ID)
83
+ ```bash
84
+ # set appropriate values vor env variables (see below)
85
+
86
+ # run deployment on another network
87
+ hh run --network <networkname> scripts/deploy_all.ts
88
+ ```
89
+
90
+ Environment variables:
91
+
92
+ - `SKIP_VERIFICATION` set to `true` to skip etherscan verification (required for ganacht and anvil)
93
+ - `WEB3_INFURA_PROJECT_ID` set to infura project id (required for mumbai and mainnet)
94
+ - `WALLET_MNEMONIC` the mnemonic of the wallet to use for deployment (required for mumbai and mainnet)
95
+ - `ETHERSCAN_API_KEY` `POLYGONSCAN_API_KEY` the api key for etherscan/polygonscan (required for mumbai and mainnet)
96
+
97
+ ### Create a new instance
98
+
99
+ Requires previous step to be completed.
100
+
101
+ ```bash
102
+ # set appropriate values vor env variables (see below)
103
+
104
+ hh run --network <networkname> scripts/new_instance.ts
105
+ ```
106
+
107
+ Currently an HD wallet is expected to be used for the deployment. The mnemonic of the wallet needs to be provided via the `WALLET_MNEMONIC` environment variable.
108
+ The instance owner will be the 11th address of the wallet.
109
+
110
+ Environment variables:
111
+
112
+ - `WEB3_INFURA_PROJECT_ID` set to infura project id (required for mumbai and mainnet)
113
+ - `WALLET_MNEMONIC` the mnemonic of the wallet to use for deployment (required for mumbai and mainnet)
114
+ - `REGISTRY_ADDRESS` the address of the registry that is already deployed and configured and has a valid master instance
27
115
 
28
116
 
29
117
  ### Console
@@ -48,6 +136,9 @@ https://hardhat.org/hardhat-runner/docs/guides/compile-contracts
48
136
  ```shell
49
137
  forge build
50
138
 
139
+ # contract sizes
140
+ forge build --sizes | grep Instance
141
+
51
142
  forge test
52
143
 
53
144
  # run single test case
@@ -60,7 +151,11 @@ forge test -vvvv --mt test_decimals
60
151
  # provide gas report for a single test
61
152
  forge test --mt test_decimals --gas-report
62
153
 
154
+ # provide code coverage report
63
155
  forge coverage
156
+ forge coverage --report lcov
157
+
158
+
64
159
  ```
65
160
 
66
161
  Chisel session
@@ -119,7 +214,17 @@ uint256 lifetime =365*24*3600;
119
214
  uint256 policyNftId = ps.createApplicationForBundle(customer, bundleNftId, sumInsuredAmount, premiumAmount, lifetime);
120
215
 
121
216
  ```
217
+ ### Library Linking
218
+
219
+ https://ethereum.stackexchange.com/questions/153411/does-foundry-support-dynamical-library-linking-in-solidity
122
220
 
221
+ ```toml
222
+ # foundry.toml
223
+
224
+ [profile.default]
225
+ # expected format(example below): libraries = ["<path>:<lib name>:<address>"]
226
+ libraries = ["src/libraries/MyLibrary.sol:MyLibrary:0x..."]
227
+ ```
123
228
 
124
229
  ### Documentation
125
230
 
@@ -150,3 +255,297 @@ To execute formatting run `npm run styleFix`.
150
255
 
151
256
  We use solhint to lint the code.
152
257
  To execute linting run `npm run lint`.
258
+
259
+
260
+ ### Adding Brownie (Legacy)
261
+
262
+ python3 is already installed
263
+
264
+ ```bash
265
+ npm install -g ganache
266
+ sudo apt update
267
+ sudo apt install python3-pip
268
+ pip install eth-brownie
269
+ brownie pm install OpenZeppelin/openzeppelin-contracts@4.9.3
270
+ brownie pm install OpenZeppelin/openzeppelin-contracts@5.0.0
271
+ ```
272
+
273
+ ```bash
274
+ brownie compile --all
275
+ brownie console
276
+ ```
277
+
278
+ ```python
279
+ registry_owner = accounts[0]
280
+ instance_owner = accounts[1]
281
+ product_owner = accounts[2]
282
+
283
+ # deploy libs and helper contracts
284
+ nft_id_lib = NftIdLib.deploy({'from': registry_owner})
285
+ ufixed_math_lib = UFixedMathLib.deploy({'from': registry_owner})
286
+ test_fee = TestFee.deploy({'from': registry_owner})
287
+
288
+ # deploy registry and a token
289
+ registry = Registry.deploy({'from': registry_owner})
290
+ nft = ChainNft.deploy(registry, {'from': registry_owner})
291
+ registry.initialize(nft, {'from': registry_owner})
292
+ token = TestUsdc.deploy({'from': registry_owner})
293
+
294
+ # deploy services
295
+ component_owner_service = ComponentOwnerService.deploy(registry, {'from': registry_owner})
296
+ product_service = ProductService.deploy(registry, {'from': registry_owner})
297
+
298
+ # deploy an instance
299
+ instance = Instance.deploy(registry, component_owner_service, product_service, {'from': instance_owner})
300
+
301
+ # deploy product
302
+ pool = TestPool.deploy(registry, instance, token, {'from': product_owner})
303
+ policy_fee = test_fee.createFee(1, -1, 0)
304
+ product = TestProduct.deploy(registry, instance, token, pool, policy_fee, {'from': product_owner})
305
+
306
+ # grant roles
307
+ pool_owner_role = instance.getRoleForName("PoolOwner")
308
+ product_owner_role = instance.getRoleForName("ProductOwner")
309
+ instance.grantRole(pool_owner_role, product_owner, {'from': instance_owner})
310
+ instance.grantRole(product_owner_role, product_owner, {'from': instance_owner})
311
+
312
+ # register objects
313
+ instance.register()
314
+ component_owner_service.register(pool, {'from': product_owner})
315
+ component_owner_service.register(product, {'from': product_owner})
316
+
317
+ instance_id = instance.getNftId()
318
+ pool_id = pool.getNftId()
319
+ product_id = product.getNftId()
320
+ ```
321
+
322
+ ## Objects
323
+
324
+ ### Registry
325
+
326
+ Mandatory properties
327
+
328
+ * One registry per chain
329
+ * Global registry: the registry on mainnet
330
+ * One entry per protocol object
331
+ * Once registered object properties are immutable
332
+ * Globally unique NFT minted per protocol object (chain id is embedded in NFT id)
333
+ * Object ownership defined by NFT ownernship
334
+ * Typed objects (instance, product, policy, ...)
335
+ * Each object has parent object (only one exception: protocol object does not have parent object)
336
+ * Parent object type is defined by type of child object
337
+
338
+ Object properties (for smart contracts)
339
+ * Objects that represent a smart contract record its contract address
340
+ * With one exception (see next point) smart contract addresses refer to the address on the same chain as the registry
341
+ * The global registry also holds entries for all the registries on different chains than mainnet, in these cases the addresses refer to the chains of these chain specific registries (this is the only case where registered addresses do not refer to the same chain)
342
+
343
+ Optional properties
344
+
345
+ * Objects can have names
346
+ * Object names are unique per chain
347
+ * Objects may define an intercepting property, in which case a predefined smart contract is involved in NFT transfers of the objects NFT (transfer may trigger actions, transfer may be blocked etc)
348
+ *
349
+
350
+ Ownership property
351
+
352
+ * Object ownership defined by ownership of NFT representing the object
353
+ * Protocol
354
+ * Fixed/predefined owner (address without private key)
355
+ * Registry
356
+ * Allows registration of token and services (per major release)
357
+ * May transfer ownership
358
+ * Token
359
+ * Fixed/predefined owner (address without private key)
360
+ * TODO add whitelisting for token per major release
361
+ * Service
362
+ * Allows upgrades of services as long as major version is same
363
+ * Until further notice the same entity as the registry owner
364
+ * May transfer ownership
365
+ * Instance
366
+ * Granting/revoking of roles (both default + custom)
367
+ * Management of custom roles and targets
368
+ * May lock instance and/or components
369
+ * May transfer ownership
370
+ * Component (Product, Pool, Distribution, Oracle)
371
+ * Register component
372
+ * Set component wallet (which receives fees, holds funds)
373
+ * May lock component
374
+ * May transfer ownership
375
+ * Additional use case specific features
376
+ * Policy
377
+ * Represents policy holder
378
+ * Receive payouts (GIF default behaviour)
379
+ * May transfer ownership
380
+ * Bundle
381
+ * Represents funds owner
382
+ * May withdraw funds not locked by active policies
383
+ * May transfer ownership
384
+ * Distributor
385
+ * Receives commissions from sales (GIF default behaviour)
386
+ * May transfer ownership
387
+
388
+ Intercepting property
389
+ * Service owner is indirectly owner of service manager contract
390
+
391
+ * Instance
392
+ * intercepts transfer of instance owner (new owner needs access manager admin rights for custom roles and targets)
393
+ * intercepts transfer of components, to do what? check that new owner has necessary roles?
394
+ * Product
395
+ * intercepts transfer of policies (use case specific: eg. limit/disallow transfers)
396
+ * Pool:
397
+ * intercepts transfer of bundles (use case specific: eg. limit/disallow transfers)
398
+ * Distribution
399
+ * intercepts transfer of distributors (bookkeeping: only one distributor per address allowed)
400
+ * Oracle
401
+ * likely meaningless
402
+
403
+
404
+ ### Instance
405
+
406
+ ### Product
407
+
408
+ ### Payout Handling
409
+
410
+ Pool specifies **retention level**.
411
+ Retention level defines up to which percentage of the sum insured the pool is payout out using its own/current funds.
412
+ Depending on the amount of a new payout the poolService decides to either execute the payout directly or to add the payout as a pending payout with a notification of the pool.
413
+
414
+ The sequence below sketches the small payout flow (payout < retention amount)
415
+ - retention level: 30%
416
+ - sum insured: 1000
417
+ - payout: 200
418
+
419
+ ```mermaid
420
+ sequenceDiagram
421
+ participant customer
422
+ participant product
423
+ participant productService
424
+ participant poolService
425
+ product->>productService: createPayout()
426
+ productService ->> poolService: requestPayout()
427
+ poolService ->> poolService: processPayout()
428
+ poolService ->> customer: transfer token for payout
429
+ poolService -->> customer: payoutExecutedCallback() *
430
+ poolService ->> productService: payoutExecuted()
431
+ ```
432
+
433
+ *: callback only if customer is contract (IPolicyHolder)
434
+
435
+ The sequence below sketches the call flow for payouts larger than the retention amount
436
+ - retention level: 30%
437
+ - sum insured: 1000
438
+ - payout: 500
439
+ * locally available: 300
440
+ * via policy (re-insurance): 200
441
+
442
+ ```mermaid
443
+ sequenceDiagram
444
+ participant customer
445
+ participant product
446
+ participant productService
447
+ participant poolService
448
+ participant pool
449
+ pool ->> reinsuranceProduct: applyForPolicy()
450
+ product->>productService: createPayout()
451
+ productService ->> poolService: requestPayout()
452
+ poolService ->> pool: pendingPayoutAdded()
453
+ pool ->> pool: getReinsurancePolicy()
454
+ pool ->> reinsuranceProduct: claim()
455
+ reinsuranceProduct -->> reinsurancePool: createPayout
456
+ reinsurancePool ->> pool: transfer token for payout
457
+ reinsurancePool ->> pool: payoutExecutedCallback()
458
+ pool ->> poolService: processPendingPayout()
459
+ poolService ->> customer: transfer token for payout
460
+ poolService ->> productService: payoutExecuted()
461
+ ```
462
+
463
+ ### Pool
464
+
465
+ ### Distribution
466
+
467
+ ### Oracle
468
+
469
+ ## Registry and Services
470
+
471
+ ### Principles
472
+
473
+ - 1 service per object type and major version
474
+ - registry service guards write access to registry
475
+ - all other objects registered via registry service
476
+ - root object for the complete tree is the protocol object
477
+ - under the root object a single registry object is registered (= global registry/ethereum mainnet)
478
+
479
+
480
+ ### Service Responsibilities
481
+
482
+ Registry Service
483
+
484
+ - deployed and registered during bootstrapping of registry
485
+ - used to register tokens and other services by registry owner
486
+ - an object may only be registered by the service designated by the type of the object
487
+ - to register an object the parent object needs already be registered
488
+ - the type of the object to be registered needs to match a valid child type/parent type combination
489
+
490
+ Instance Service
491
+
492
+ - deploys master instance during its own bootstrapping (if allowed by contract size)
493
+ - registered via registry service by registry owner
494
+ - registeres master instance during its own registration by regsitry owner
495
+ - deploys and registeres new instances (= instance factory) by instance owner (instance owner is a permissionless role, anybody may creates a new instance)
496
+ - provides upgrade functionality to instance owners
497
+
498
+ Product Service
499
+
500
+ - registered via registry service by registry owner
501
+ - registers products for registered instances via registry service by product owner (product owner role is permissend by the product's instance)
502
+ - registers applications/policies for registered products via registry service
503
+
504
+ Distribution Service
505
+
506
+ - registered via registry service by registry owner
507
+ - registers distribution components for registered products via registry service by distribution owner (distribution owner role is permissend by the product's instance)
508
+ - registers distributors for registered distribution components via registry service
509
+
510
+ ## Contract Organisation
511
+
512
+ now
513
+
514
+ contracts
515
+ components
516
+ instance
517
+ registry
518
+ shared
519
+ types
520
+
521
+
522
+ contracts
523
+ component
524
+ pool
525
+ Pool.sol
526
+ PoolService.sol
527
+ oracle
528
+ distribution
529
+ product
530
+ Product.sol
531
+ ProductService.sol
532
+ Component.sol
533
+ ComponentService.sol
534
+ instance
535
+ Instance.sol
536
+ InstanceAccessManager.sol
537
+ InstanceReader.sol
538
+ InstanceService.sol
539
+ InstanceServiceManager.sol
540
+ registry
541
+ ChainNft.sol
542
+ Registry.sol
543
+ RegistryService.sol
544
+ RegistryServiceManager.sol
545
+ shared
546
+ Registerable.sol
547
+ RegisterableUpgradable.sol
548
+ type
549
+ NftId.sol
550
+ ObjectType.sol
551
+
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/ddbd31d07c8880f0f0a18b3f2b9bcc56.json"
3
+ "buildInfo": "../../../build-info/ff7d6f99450632e8472f8e5ac690f339.json"
4
4
  }