@etherisc/gif-next 0.0.2-ad36bbd → 0.0.2-adeb008-426

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 (436) hide show
  1. package/README.md +365 -8
  2. package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
  3. package/artifacts/contracts/components/Component.sol/Component.json +698 -35
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +1329 -0
  6. package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IComponent.sol/IComponent.json +605 -0
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +969 -0
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +1064 -0
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +830 -0
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +1246 -65
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +1014 -60
  18. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
  19. package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
  20. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
  21. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
  22. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
  23. package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +190 -0
  24. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  25. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1927 -452
  26. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
  27. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +633 -0
  28. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  29. package/artifacts/contracts/instance/Instance.sol/Instance.json +2819 -539
  30. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
  31. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1330 -0
  32. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
  33. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1289 -0
  34. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
  35. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1179 -0
  36. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
  37. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +741 -0
  38. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
  39. package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
  40. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
  41. package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +607 -0
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
  43. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +429 -0
  44. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
  45. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.json +115 -0
  46. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
  47. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +532 -0
  48. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
  49. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +194 -0
  50. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
  51. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +237 -0
  52. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
  53. package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
  54. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
  55. package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IComponents.sol/IComponents.json} +2 -2
  56. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
  57. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
  58. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
  59. package/artifacts/contracts/instance/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
  60. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
  61. package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
  62. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
  63. package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
  64. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
  65. package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
  66. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
  67. package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1039 -0
  68. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
  69. package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +673 -0
  70. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
  71. package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1231 -0
  72. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
  73. package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +721 -0
  74. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
  75. package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +817 -0
  76. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
  77. package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +641 -0
  78. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  79. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1798 -0
  80. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
  81. package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +805 -0
  82. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
  83. package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +622 -0
  84. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
  85. package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +659 -0
  86. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
  87. package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +475 -0
  88. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  89. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +1090 -0
  90. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
  91. package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +606 -0
  92. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
  93. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +844 -0
  94. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
  95. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +450 -0
  96. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
  97. package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1092 -0
  98. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
  99. package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +697 -0
  100. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1237 -0
  102. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
  103. package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +661 -0
  104. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
  105. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +840 -0
  106. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
  107. package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +653 -0
  108. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  109. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +252 -2
  110. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  111. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +548 -71
  112. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  113. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +866 -0
  114. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  115. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +52 -0
  116. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  117. package/artifacts/contracts/registry/Registry.sol/Registry.json +631 -78
  118. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
  119. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
  120. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  121. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1158 -0
  122. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  123. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +670 -0
  124. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
  125. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
  126. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
  127. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
  128. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  129. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  130. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
  131. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
  132. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
  133. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +138 -0
  134. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
  135. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
  136. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
  137. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +188 -0
  138. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
  139. package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegistryLinked.sol}/IRegistryLinked.json +18 -19
  140. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
  141. package/artifacts/contracts/shared/IService.sol/IService.json +335 -0
  142. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -0
  144. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +251 -0
  146. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
  147. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
  148. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  149. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +582 -0
  150. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
  151. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +352 -0
  152. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
  153. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
  154. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
  155. package/artifacts/contracts/{registry/IChainNft.sol/IChainNft.json → shared/Service.sol/Service.json} +261 -217
  156. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
  157. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
  158. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  159. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
  160. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
  161. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -0
  162. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
  163. package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
  164. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
  165. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +383 -0
  166. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
  167. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
  168. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
  169. package/artifacts/contracts/test/TestService.sol/TestService.json +596 -0
  170. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
  171. package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
  172. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
  173. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
  174. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
  175. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +104 -0
  176. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
  177. package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
  178. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
  179. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
  180. package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
  181. package/artifacts/contracts/types/Amount.sol/AmountLib.json +161 -0
  182. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
  183. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
  184. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  185. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
  186. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
  187. package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
  188. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
  189. package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
  190. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
  191. package/artifacts/contracts/types/Fee.sol/FeeLib.json +288 -0
  192. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
  193. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -0
  194. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  195. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +161 -5
  196. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
  197. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
  198. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
  199. package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
  200. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
  201. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
  202. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
  203. package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
  204. package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
  205. package/artifacts/contracts/types/Referral.sol/ReferralLib.json +142 -0
  206. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  207. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  208. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  209. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
  210. package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
  211. package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
  212. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
  213. package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
  214. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
  215. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +267 -0
  216. package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
  217. package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
  218. package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
  219. package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
  220. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
  221. package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
  222. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
  223. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
  224. package/contracts/components/Component.sol +231 -40
  225. package/contracts/components/Distribution.sol +280 -0
  226. package/contracts/components/IComponent.sol +76 -0
  227. package/contracts/components/IDistributionComponent.sol +71 -0
  228. package/contracts/components/IPoolComponent.sol +113 -0
  229. package/contracts/components/IProductComponent.sol +40 -0
  230. package/contracts/components/Pool.sol +292 -18
  231. package/contracts/components/Product.sol +260 -32
  232. package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
  233. package/contracts/instance/BundleManager.sol +127 -0
  234. package/contracts/instance/Cloneable.sol +51 -0
  235. package/contracts/instance/IInstance.sol +93 -15
  236. package/contracts/instance/IInstanceService.sol +72 -0
  237. package/contracts/instance/Instance.sol +306 -42
  238. package/contracts/instance/InstanceAccessManager.sol +527 -0
  239. package/contracts/instance/InstanceReader.sol +291 -0
  240. package/contracts/instance/InstanceService.sol +495 -0
  241. package/contracts/instance/InstanceServiceManager.sol +54 -0
  242. package/contracts/instance/ObjectManager.sol +82 -0
  243. package/contracts/instance/base/ComponentService.sol +121 -0
  244. package/contracts/instance/base/IKeyValueStore.sol +49 -0
  245. package/contracts/instance/base/ILifecycle.sol +30 -0
  246. package/contracts/instance/base/KeyValueStore.sol +180 -0
  247. package/contracts/instance/base/Lifecycle.sol +109 -0
  248. package/contracts/instance/module/IAccess.sol +54 -0
  249. package/contracts/instance/module/IBundle.sol +23 -0
  250. package/contracts/instance/module/IComponents.sol +41 -0
  251. package/contracts/instance/module/IDistribution.sol +41 -0
  252. package/contracts/instance/module/IPolicy.sol +72 -0
  253. package/contracts/instance/module/IRisk.sol +11 -0
  254. package/contracts/instance/module/ISetup.sol +33 -0
  255. package/contracts/instance/module/ITreasury.sol +23 -0
  256. package/contracts/instance/service/ApplicationService.sol +350 -0
  257. package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
  258. package/contracts/instance/service/BundleService.sol +431 -0
  259. package/contracts/instance/service/BundleServiceManager.sol +51 -0
  260. package/contracts/instance/service/ClaimService.sol +151 -0
  261. package/contracts/instance/service/ClaimServiceManager.sol +35 -0
  262. package/contracts/instance/service/DistributionService.sol +435 -0
  263. package/contracts/instance/service/DistributionServiceManager.sol +51 -0
  264. package/contracts/instance/service/IApplicationService.sol +82 -0
  265. package/contracts/instance/service/IBundleService.sol +93 -0
  266. package/contracts/instance/service/IClaimService.sol +61 -0
  267. package/contracts/instance/service/IDistributionService.sol +99 -0
  268. package/contracts/instance/service/IPolicyService.sol +72 -0
  269. package/contracts/instance/service/IPoolService.sol +99 -0
  270. package/contracts/instance/service/IProductService.sol +40 -0
  271. package/contracts/instance/service/PolicyService.sol +362 -0
  272. package/contracts/instance/service/PolicyServiceManager.sol +54 -0
  273. package/contracts/instance/service/PoolService.sol +303 -0
  274. package/contracts/instance/service/PoolServiceManager.sol +51 -0
  275. package/contracts/instance/service/ProductService.sol +210 -0
  276. package/contracts/instance/service/ProductServiceManager.sol +54 -0
  277. package/contracts/registry/ChainNft.sol +145 -108
  278. package/contracts/registry/IRegistry.sol +82 -49
  279. package/contracts/registry/IRegistryService.sol +68 -0
  280. package/contracts/registry/ITransferInterceptor.sol +7 -0
  281. package/contracts/registry/Registry.sol +403 -112
  282. package/contracts/registry/RegistryAccessManager.sol +216 -0
  283. package/contracts/registry/RegistryService.sol +282 -0
  284. package/contracts/registry/RegistryServiceManager.sol +62 -0
  285. package/contracts/registry/ReleaseManager.sol +323 -0
  286. package/contracts/registry/TokenRegistry.sol +116 -0
  287. package/contracts/shared/ContractDeployerLib.sol +72 -0
  288. package/contracts/shared/ERC165.sol +27 -0
  289. package/contracts/shared/INftOwnable.sol +23 -0
  290. package/contracts/shared/IPolicyHolder.sol +26 -0
  291. package/contracts/shared/IRegisterable.sol +15 -0
  292. package/contracts/shared/IRegistryLinked.sol +12 -0
  293. package/contracts/shared/IService.sol +16 -0
  294. package/contracts/shared/IVersionable.sol +53 -0
  295. package/contracts/shared/NftOwnable.sol +120 -0
  296. package/contracts/shared/PolicyHolder.sol +81 -0
  297. package/contracts/shared/ProxyManager.sol +169 -0
  298. package/contracts/shared/Registerable.sol +74 -0
  299. package/contracts/shared/RegistryLinked.sol +48 -0
  300. package/contracts/shared/Service.sol +72 -0
  301. package/contracts/shared/TokenHandler.sol +33 -0
  302. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  303. package/contracts/shared/Versionable.sol +59 -0
  304. package/contracts/test/TestFee.sol +25 -0
  305. package/contracts/test/TestRegisterable.sol +18 -0
  306. package/contracts/test/TestRoleId.sol +14 -0
  307. package/contracts/test/TestService.sol +25 -0
  308. package/contracts/test/TestToken.sol +26 -0
  309. package/contracts/test/TestVersion.sol +44 -0
  310. package/contracts/test/TestVersionable.sol +17 -0
  311. package/contracts/test/Usdc.sol +26 -0
  312. package/contracts/types/AddressSet.sol +58 -0
  313. package/contracts/types/Amount.sol +60 -0
  314. package/contracts/types/Blocknumber.sol +119 -0
  315. package/contracts/types/ChainId.sol +24 -10
  316. package/contracts/types/ClaimId.sol +52 -0
  317. package/contracts/types/DistributorType.sol +55 -0
  318. package/contracts/types/Fee.sol +64 -0
  319. package/contracts/types/Key32.sol +50 -0
  320. package/contracts/types/NftId.sol +63 -8
  321. package/contracts/types/NftIdSet.sol +62 -0
  322. package/contracts/types/NumberId.sol +52 -0
  323. package/contracts/types/ObjectType.sol +157 -0
  324. package/contracts/types/PayoutId.sol +54 -0
  325. package/contracts/types/Referral.sol +89 -0
  326. package/contracts/types/RiskId.sol +43 -0
  327. package/contracts/types/RoleId.sol +97 -0
  328. package/contracts/types/Seconds.sol +54 -0
  329. package/contracts/types/StateId.sol +106 -0
  330. package/contracts/types/Timestamp.sol +127 -0
  331. package/contracts/types/UFixed.sol +326 -0
  332. package/contracts/types/Version.sol +108 -0
  333. package/package.json +21 -6
  334. package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
  335. package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
  336. package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
  337. package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
  338. package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
  339. package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
  340. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
  341. package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
  342. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
  343. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
  344. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
  345. package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
  346. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
  347. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
  348. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
  349. package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
  350. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
  351. package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
  352. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
  353. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
  354. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
  355. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
  356. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
  357. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
  358. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
  359. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
  360. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
  361. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
  362. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
  363. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
  364. package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
  365. package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
  366. package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
  367. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
  368. package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
  369. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
  370. package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
  371. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
  372. package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
  373. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
  374. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
  375. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
  376. package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -105
  377. package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
  378. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
  379. package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
  380. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
  381. package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
  382. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
  383. package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
  384. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
  385. package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
  386. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
  387. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
  388. package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
  389. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
  390. package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
  391. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
  392. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
  393. package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
  394. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
  395. package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -162
  396. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
  397. package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
  398. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
  399. package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
  400. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
  401. package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
  402. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
  403. package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -125
  404. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
  405. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
  406. package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
  407. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
  408. package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
  409. package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
  410. package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
  411. package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
  412. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
  413. package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
  414. package/contracts/components/IPool.sol +0 -9
  415. package/contracts/components/IProduct.sol +0 -11
  416. package/contracts/experiment/errors/Require.sol +0 -33
  417. package/contracts/experiment/errors/Revert.sol +0 -39
  418. package/contracts/experiment/inheritance/A.sol +0 -56
  419. package/contracts/experiment/inheritance/B.sol +0 -23
  420. package/contracts/experiment/inheritance/C.sol +0 -28
  421. package/contracts/experiment/inheritance/IA.sol +0 -18
  422. package/contracts/experiment/inheritance/IB.sol +0 -9
  423. package/contracts/experiment/inheritance/IC.sol +0 -11
  424. package/contracts/experiment/types/TypeA.sol +0 -42
  425. package/contracts/experiment/types/TypeB.sol +0 -24
  426. package/contracts/instance/access/Access.sol +0 -218
  427. package/contracts/instance/access/IAccess.sol +0 -83
  428. package/contracts/instance/component/ComponentModule.sol +0 -259
  429. package/contracts/instance/component/IComponent.sol +0 -94
  430. package/contracts/instance/policy/IPolicy.sol +0 -66
  431. package/contracts/instance/policy/PolicyModule.sol +0 -106
  432. package/contracts/instance/pool/IPoolModule.sol +0 -40
  433. package/contracts/instance/pool/PoolModule.sol +0 -83
  434. package/contracts/instance/product/IProductService.sol +0 -45
  435. package/contracts/instance/product/ProductService.sol +0 -105
  436. package/contracts/registry/IChainNft.sol +0 -18
package/README.md CHANGED
@@ -1,4 +1,32 @@
1
- # gif-next (Generic Insurance Framework next version)
1
+ # GIF-Next (Generic Insurance Framework, next version)
2
+
3
+
4
+ ## Add OpenZeppelin V5 Dependencies
5
+
6
+ ```shell
7
+ forge install openzeppelin-contracts-500=OpenZeppelin/openzeppelin-contracts@v5.0.0
8
+ cd cd lib/openzeppelin-contracts-500
9
+ git checkout tags/v5.0.0
10
+ cd ../..
11
+ ```
12
+
13
+ See `remappings.txt` to see how to work with different OpenZeppelin versions in parallel
14
+
15
+ ```
16
+ cat remappings.txt
17
+ @openzeppelin5/contracts/=lib/openzeppelin-contracts-500/contracts/
18
+ @openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/
19
+ @openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/
20
+ ```
21
+
22
+
23
+ ## Submodules checkout
24
+
25
+ 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)
26
+
27
+ ```shell
28
+ git submodule update --recursive
29
+ ```
2
30
 
3
31
  ## Hardhat
4
32
 
@@ -13,17 +41,65 @@ npm run test-with-gas
13
41
  npm run coverage
14
42
  ```
15
43
 
16
- ### Deployment
44
+ ### Docgen
45
+
46
+ Produce `solidty-docgen` documentation using the command below.
47
+
48
+ ```shell
49
+ hh docgen
50
+ ```
51
+
52
+ The resulting markdown files are written to `docs`
53
+
54
+
55
+ ### Full protocol deployment
56
+
57
+ Install the dependencies before running the script below for the first time.
58
+
59
+ ```bash
60
+ npm install
61
+ ```
62
+
63
+ The deploy script will deploy all required contracts and create a test instance with a test product and a test pool.
17
64
 
65
+ ```bash
66
+ # run deployment on a locally created ganache instance
67
+ export SKIP_VERIFICATION=true
68
+ hh run scripts/deploy_all.ts
18
69
  ```
19
- hh run --network <networkname> scripts/deploy.ts
70
+
71
+ ```bash
72
+ # set appropriate values vor env variables (see below)
73
+
74
+ # run deployment on another network
75
+ hh run --network <networkname> scripts/deploy_all.ts
20
76
  ```
21
77
 
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)
78
+ Environment variables:
79
+
80
+ - `SKIP_VERIFICATION` set to `true` to skip etherscan verification (required for ganacht and anvil)
81
+ - `WEB3_INFURA_PROJECT_ID` set to infura project id (required for mumbai and mainnet)
82
+ - `WALLET_MNEMONIC` the mnemonic of the wallet to use for deployment (required for mumbai and mainnet)
83
+ - `ETHERSCAN_API_KEY` `POLYGONSCAN_API_KEY` the api key for etherscan/polygonscan (required for mumbai and mainnet)
84
+
85
+ ### Create a new instance
86
+
87
+ Requires previous step to be completed.
88
+
89
+ ```bash
90
+ # set appropriate values vor env variables (see below)
91
+
92
+ hh run --network <networkname> scripts/new_instance.ts
93
+ ```
94
+
95
+ 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.
96
+ The instance owner will be the 11th address of the wallet.
97
+
98
+ Environment variables:
99
+
100
+ - `WEB3_INFURA_PROJECT_ID` set to infura project id (required for mumbai and mainnet)
101
+ - `WALLET_MNEMONIC` the mnemonic of the wallet to use for deployment (required for mumbai and mainnet)
102
+ - `REGISTRY_ADDRESS` the address of the registry that is already deployed and configured and has a valid master instance
27
103
 
28
104
 
29
105
  ### Console
@@ -48,6 +124,9 @@ https://hardhat.org/hardhat-runner/docs/guides/compile-contracts
48
124
  ```shell
49
125
  forge build
50
126
 
127
+ # contract sizes
128
+ forge build --sizes | grep Instance
129
+
51
130
  forge test
52
131
 
53
132
  # run single test case
@@ -60,7 +139,11 @@ forge test -vvvv --mt test_decimals
60
139
  # provide gas report for a single test
61
140
  forge test --mt test_decimals --gas-report
62
141
 
142
+ # provide code coverage report
63
143
  forge coverage
144
+ forge coverage --report lcov
145
+
146
+
64
147
  ```
65
148
 
66
149
  Chisel session
@@ -119,9 +202,283 @@ uint256 lifetime =365*24*3600;
119
202
  uint256 policyNftId = ps.createApplicationForBundle(customer, bundleNftId, sumInsuredAmount, premiumAmount, lifetime);
120
203
 
121
204
  ```
205
+ ### Library Linking
122
206
 
207
+ https://ethereum.stackexchange.com/questions/153411/does-foundry-support-dynamical-library-linking-in-solidity
208
+
209
+ ```toml
210
+ # foundry.toml
211
+
212
+ [profile.default]
213
+ # expected format(example below): libraries = ["<path>:<lib name>:<address>"]
214
+ libraries = ["src/libraries/MyLibrary.sol:MyLibrary:0x..."]
215
+ ```
123
216
 
124
217
  ### Documentation
125
218
 
126
219
  https://book.getfoundry.sh/reference/
127
220
 
221
+ ## Style Guide
222
+
223
+ Solidity code is to be written according to the [Solidity Style Guide](https://docs.soliditylang.org/en/latest/style-guide.html).
224
+
225
+ Documentation of the code should be written inline using [NatSpec](https://docs.soliditylang.org/en/latest/natspec-format.html).
226
+
227
+ ### Naming conventions
228
+
229
+ Additionally, we use the following naming conventions:
230
+
231
+ - Function arguments and return types: If using custom data types, make the name include the type by appending the Type to the argument name, e.g. `function getInfo(NftId bundleNftId)` instead of `function getInfo(NftId bundleId)`. Background: Custom data types are lost when using the ABI or Typescript binding classes (e.g. instead of `NftID` a `uint96` is used), so the type needs to be included in the name to make it clear what the argument is without having to look at the documentation or checking the solidity source code.
232
+ - When naming a field or an attribute `id` and the context is not clear, call it `nftId` instead so its clear what type if id it is as there will be multiple ids for different kind of objects. Example: if you the function has a bundle nft id and a policy nft id as arguments, call them `bundleNftId` and `policyNftId` instead of `id` and `policyId`. In case of doubt, be a bit more verbose for the sake of clarity.
233
+ - When naming things, remember that the code will likely be used in Javascript/Typescript as well, so avoid names that are reserved in Javascript/Typescript. A list of reserved words in Javascript can be found [here](https://www.w3schools.com/js/js_reserved.asp) and a list of reserved words in Typescript can be found [here](https://www.tektutorialshub.com/typescript/identifiers-keywords-in-typescript/).
234
+
235
+ ### Automatic code formatting
236
+
237
+ We use prettier and the solidity plugin to format the code automatically.
238
+ The plugin is configured to use the style guide mentioned above.
239
+ To execute format checks run `npm run styleCheck`.
240
+ To execute formatting run `npm run styleFix`.
241
+
242
+ ### Linting
243
+
244
+ We use solhint to lint the code.
245
+ To execute linting run `npm run lint`.
246
+
247
+
248
+ ### Adding Brownie (Legacy)
249
+
250
+ python3 is already installed
251
+
252
+ ```bash
253
+ npm install -g ganache
254
+ sudo apt update
255
+ sudo apt install python3-pip
256
+ pip install eth-brownie
257
+ brownie pm install OpenZeppelin/openzeppelin-contracts@4.9.3
258
+ brownie pm install OpenZeppelin/openzeppelin-contracts@5.0.0
259
+ ```
260
+
261
+ ```bash
262
+ brownie compile --all
263
+ brownie console
264
+ ```
265
+
266
+ ```python
267
+ registry_owner = accounts[0]
268
+ instance_owner = accounts[1]
269
+ product_owner = accounts[2]
270
+
271
+ # deploy libs and helper contracts
272
+ nft_id_lib = NftIdLib.deploy({'from': registry_owner})
273
+ ufixed_math_lib = UFixedMathLib.deploy({'from': registry_owner})
274
+ test_fee = TestFee.deploy({'from': registry_owner})
275
+
276
+ # deploy registry and a token
277
+ registry = Registry.deploy({'from': registry_owner})
278
+ nft = ChainNft.deploy(registry, {'from': registry_owner})
279
+ registry.initialize(nft, {'from': registry_owner})
280
+ token = TestUsdc.deploy({'from': registry_owner})
281
+
282
+ # deploy services
283
+ component_owner_service = ComponentOwnerService.deploy(registry, {'from': registry_owner})
284
+ product_service = ProductService.deploy(registry, {'from': registry_owner})
285
+
286
+ # deploy an instance
287
+ instance = Instance.deploy(registry, component_owner_service, product_service, {'from': instance_owner})
288
+
289
+ # deploy product
290
+ pool = TestPool.deploy(registry, instance, token, {'from': product_owner})
291
+ policy_fee = test_fee.createFee(1, -1, 0)
292
+ product = TestProduct.deploy(registry, instance, token, pool, policy_fee, {'from': product_owner})
293
+
294
+ # grant roles
295
+ pool_owner_role = instance.getRoleForName("PoolOwner")
296
+ product_owner_role = instance.getRoleForName("ProductOwner")
297
+ instance.grantRole(pool_owner_role, product_owner, {'from': instance_owner})
298
+ instance.grantRole(product_owner_role, product_owner, {'from': instance_owner})
299
+
300
+ # register objects
301
+ instance.register()
302
+ component_owner_service.register(pool, {'from': product_owner})
303
+ component_owner_service.register(product, {'from': product_owner})
304
+
305
+ instance_id = instance.getNftId()
306
+ pool_id = pool.getNftId()
307
+ product_id = product.getNftId()
308
+ ```
309
+
310
+ ## Objects
311
+
312
+ ### Registry
313
+
314
+ Mandatory properties
315
+
316
+ * One registry per chain
317
+ * Global registry: the registry on mainnet
318
+ * One entry per protocol object
319
+ * Once registered object properties are immutable
320
+ * Globally unique NFT minted per protocol object (chain id is embedded in NFT id)
321
+ * Object ownership defined by NFT ownernship
322
+ * Typed objects (instance, product, policy, ...)
323
+ * Each object has parent object (only one exception: protocol object does not have parent object)
324
+ * Parent object type is defined by type of child object
325
+
326
+ Object properties (for smart contracts)
327
+ * Objects that represent a smart contract record its contract address
328
+ * With one exception (see next point) smart contract addresses refer to the address on the same chain as the registry
329
+ * 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)
330
+
331
+ Optional properties
332
+
333
+ * Objects can have names
334
+ * Object names are unique per chain
335
+ * 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)
336
+ *
337
+
338
+ Ownership property
339
+
340
+ * Object ownership defined by ownership of NFT representing the object
341
+ * Protocol
342
+ * Fixed/predefined owner (address without private key)
343
+ * Registry
344
+ * Allows registration of token and services (per major release)
345
+ * May transfer ownership
346
+ * Token
347
+ * Fixed/predefined owner (address without private key)
348
+ * TODO add whitelisting for token per major release
349
+ * Service
350
+ * Allows upgrades of services as long as major version is same
351
+ * Until further notice the same entity as the registry owner
352
+ * May transfer ownership
353
+ * Instance
354
+ * Granting/revoking of roles (both default + custom)
355
+ * Management of custom roles and targets
356
+ * May lock instance and/or components
357
+ * May transfer ownership
358
+ * Component (Product, Pool, Distribution, Oracle)
359
+ * Register component
360
+ * Set component wallet (which receives fees, holds funds)
361
+ * May lock component
362
+ * May transfer ownership
363
+ * Additional use case specific features
364
+ * Policy
365
+ * Represents policy holder
366
+ * Receive payouts (GIF default behaviour)
367
+ * May transfer ownership
368
+ * Bundle
369
+ * Represents funds owner
370
+ * May withdraw funds not locked by active policies
371
+ * May transfer ownership
372
+ * Distributor
373
+ * Receives commissions from sales (GIF default behaviour)
374
+ * May transfer ownership
375
+
376
+ Intercepting property
377
+ * Service owner is indirectly owner of service manager contract
378
+
379
+ * Instance
380
+ * intercepts transfer of instance owner (new owner needs access manager admin rights for custom roles and targets)
381
+ * intercepts transfer of components, to do what? check that new owner has necessary roles?
382
+ * Product
383
+ * intercepts transfer of policies (use case specific: eg. limit/disallow transfers)
384
+ * Pool:
385
+ * intercepts transfer of bundles (use case specific: eg. limit/disallow transfers)
386
+ * Distribution
387
+ * intercepts transfer of distributors (bookkeeping: only one distributor per address allowed)
388
+ * Oracle
389
+ * likely meaningless
390
+
391
+
392
+ ### Instance
393
+
394
+ ### Product
395
+
396
+ ### Pool
397
+
398
+ ### Distribution
399
+
400
+ ### Oracle
401
+
402
+ ## Registry and Services
403
+
404
+ ### Principles
405
+
406
+ - 1 service per object type and major version
407
+ - registry service guards write access to registry
408
+ - all other objects registered via registry service
409
+ - root object for the complete tree is the protocol object
410
+ - under the root object a single registry object is registered (= global registry/ethereum mainnet)
411
+
412
+
413
+ ### Service Responsibilities
414
+
415
+ Registry Service
416
+
417
+ - deployed and registered during bootstrapping of registry
418
+ - used to register tokens and other services by registry owner
419
+ - an object may only be registered by the service designated by the type of the object
420
+ - to register an object the parent object needs already be registered
421
+ - the type of the object to be registered needs to match a valid child type/parent type combination
422
+
423
+ Instance Service
424
+
425
+ - deploys master instance during its own bootstrapping (if allowed by contract size)
426
+ - registered via registry service by registry owner
427
+ - registeres master instance during its own registration by regsitry owner
428
+ - deploys and registeres new instances (= instance factory) by instance owner (instance owner is a permissionless role, anybody may creates a new instance)
429
+ - provides upgrade functionality to instance owners
430
+
431
+ Product Service
432
+
433
+ - registered via registry service by registry owner
434
+ - registers products for registered instances via registry service by product owner (product owner role is permissend by the product's instance)
435
+ - registers applications/policies for registered products via registry service
436
+
437
+ Distribution Service
438
+
439
+ - registered via registry service by registry owner
440
+ - registers distribution components for registered products via registry service by distribution owner (distribution owner role is permissend by the product's instance)
441
+ - registers distributors for registered distribution components via registry service
442
+
443
+ ## Contract Organisation
444
+
445
+ now
446
+
447
+ contracts
448
+ components
449
+ instance
450
+ registry
451
+ shared
452
+ types
453
+
454
+
455
+ contracts
456
+ component
457
+ pool
458
+ Pool.sol
459
+ PoolService.sol
460
+ oracle
461
+ distribution
462
+ product
463
+ Product.sol
464
+ ProductService.sol
465
+ Component.sol
466
+ ComponentService.sol
467
+ instance
468
+ Instance.sol
469
+ InstanceAccessManager.sol
470
+ InstanceReader.sol
471
+ InstanceService.sol
472
+ InstanceServiceManager.sol
473
+ registry
474
+ ChainNft.sol
475
+ Registry.sol
476
+ RegistryService.sol
477
+ RegistryServiceManager.sol
478
+ shared
479
+ Registerable.sol
480
+ RegisterableUpgradable.sol
481
+ type
482
+ NftId.sol
483
+ ObjectType.sol
484
+
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "_format": "hh-sol-dbg-1",
3
- "buildInfo": "../../../build-info/2e17881254a0997c12cba9770e876768.json"
3
+ "buildInfo": "../../../build-info/15e801e2951730e4de63439e3827f4b9.json"
4
4
  }