@etherisc/gif-next 0.0.2-cc4a5cb-898 → 0.0.2-cd89a0b-062

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 (230) hide show
  1. package/README.md +40 -25
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +80 -41
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
  5. package/artifacts/contracts/components/Distribution.sol/Distribution.json +101 -61
  6. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  7. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +43 -40
  8. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +55 -52
  10. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +100 -113
  12. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  13. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +50 -47
  14. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  15. package/artifacts/contracts/components/Pool.sol/Pool.json +150 -126
  16. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  17. package/artifacts/contracts/components/Product.sol/Product.json +110 -52
  18. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  28. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  34. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  35. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  36. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +256 -91
  37. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +1 -1
  38. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  39. package/artifacts/contracts/instance/Instance.sol/Instance.json +364 -170
  40. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +139 -46
  42. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +1 -1
  44. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/IService.sol/IService.json +99 -55
  48. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +139 -59
  50. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  52. package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +1 -1
  53. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +1 -1
  54. package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +135 -55
  55. package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +1 -1
  59. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +1 -1
  60. package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +1 -1
  61. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +1 -1
  62. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +1 -1
  63. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +1 -1
  64. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +2 -2
  66. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +1 -1
  67. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +1 -1
  68. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +1 -1
  69. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +1 -1
  70. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +1 -1
  71. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +1 -1
  72. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +1 -1
  73. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +29 -9
  74. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +1 -1
  75. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +28 -8
  76. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +1 -1
  78. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +2 -2
  80. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +1 -1
  81. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +138 -11
  83. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +2 -2
  85. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +1 -1
  86. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +138 -11
  87. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  88. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +245 -86
  89. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
  90. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +167 -61
  91. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  92. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +99 -74
  93. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  94. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +99 -55
  95. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +104 -60
  97. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  98. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +104 -60
  99. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +169 -63
  101. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  102. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +197 -91
  103. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  104. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +141 -12
  105. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  106. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
  107. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  108. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +293 -40
  109. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
  110. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +668 -0
  111. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
  112. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
  113. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/Registry.sol/Registry.json +483 -120
  115. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
  116. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +885 -0
  117. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
  118. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +460 -0
  119. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
  120. package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
  121. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  122. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  123. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +1 -1
  124. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  125. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +43 -40
  126. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  127. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
  128. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
  129. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +132 -0
  130. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
  131. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +344 -0
  132. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  133. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +76 -37
  134. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
  135. package/artifacts/contracts/shared/{Proxy.sol/ProxyWithProxyAdminGetter.json → UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json} +4 -4
  136. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  137. package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
  138. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +1 -1
  139. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +101 -61
  140. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  141. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +1 -1
  142. package/artifacts/contracts/test/TestPool.sol/TestPool.json +150 -126
  143. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +1 -1
  144. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +115 -58
  145. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  146. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +93 -39
  147. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  148. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  149. package/artifacts/contracts/test/TestService.sol/TestService.json +161 -68
  150. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  151. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  152. package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
  153. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  154. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +89 -25
  155. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  156. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  157. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  158. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  159. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  161. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  163. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  164. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +1 -1
  165. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
  166. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
  167. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  168. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  169. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  170. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  171. package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
  172. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  173. package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
  174. package/contracts/components/BaseComponent.sol +12 -27
  175. package/contracts/components/Distribution.sol +29 -6
  176. package/contracts/components/IBaseComponent.sol +2 -2
  177. package/contracts/components/IPoolComponent.sol +2 -8
  178. package/contracts/components/IProductComponent.sol +2 -1
  179. package/contracts/components/Pool.sol +84 -73
  180. package/contracts/components/Product.sol +85 -13
  181. package/contracts/instance/IInstance.sol +4 -3
  182. package/contracts/instance/Instance.sol +14 -3
  183. package/contracts/instance/base/ComponentServiceBase.sol +13 -6
  184. package/contracts/instance/base/IInstanceBase.sol +3 -2
  185. package/contracts/instance/base/InstanceBase.sol +6 -8
  186. package/contracts/instance/base/ServiceBase.sol +19 -13
  187. package/contracts/instance/module/component/ComponentModule.sol +5 -4
  188. package/contracts/instance/module/component/IComponent.sol +2 -2
  189. package/contracts/instance/module/pool/IPoolModule.sol +4 -3
  190. package/contracts/instance/module/pool/PoolModule.sol +12 -7
  191. package/contracts/instance/module/treasury/ITreasury.sol +7 -5
  192. package/contracts/instance/module/treasury/TokenHandler.sol +2 -2
  193. package/contracts/instance/module/treasury/TreasuryModule.sol +21 -28
  194. package/contracts/instance/service/ComponentOwnerService.sol +181 -66
  195. package/contracts/instance/service/DistributionService.sol +6 -11
  196. package/contracts/instance/service/IComponentOwnerService.sol +0 -2
  197. package/contracts/instance/service/PoolService.sol +19 -19
  198. package/contracts/instance/service/ProductService.sol +20 -20
  199. package/contracts/registry/ChainNft.sol +43 -15
  200. package/contracts/registry/IChainNft.sol +3 -2
  201. package/contracts/registry/IRegistry.sol +44 -28
  202. package/contracts/registry/IRegistryService.sol +29 -0
  203. package/contracts/registry/ITransferInterceptor.sol +6 -0
  204. package/contracts/registry/Registry.sol +382 -273
  205. package/contracts/registry/RegistryService.sol +375 -0
  206. package/contracts/registry/RegistryServiceManager.sol +52 -0
  207. package/contracts/shared/ContractDeployerLib.sol +72 -0
  208. package/contracts/shared/ERC165.sol +1 -1
  209. package/contracts/shared/IRegisterable.sol +7 -9
  210. package/contracts/shared/IVersionable.sol +55 -11
  211. package/contracts/shared/NftOwnable.sol +87 -0
  212. package/contracts/shared/ProxyManager.sol +103 -0
  213. package/contracts/shared/Registerable.sol +74 -43
  214. package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
  215. package/contracts/shared/Versionable.sol +112 -54
  216. package/contracts/test/TestDistribution.sol +3 -2
  217. package/contracts/test/TestPool.sol +4 -2
  218. package/contracts/test/TestProduct.sol +4 -2
  219. package/contracts/test/TestRegisterable.sol +5 -6
  220. package/contracts/test/TestService.sol +5 -11
  221. package/contracts/types/Version.sol +9 -0
  222. package/package.json +1 -1
  223. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
  224. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
  225. package/artifacts/contracts/shared/Proxy.sol/Proxy.dbg.json +0 -4
  226. package/artifacts/contracts/shared/Proxy.sol/Proxy.json +0 -178
  227. package/artifacts/contracts/shared/Proxy.sol/ProxyWithProxyAdminGetter.dbg.json +0 -4
  228. package/contracts/experiment/statemachine/README.md +0 -112
  229. package/contracts/registry/IRegistryLinked.sol +0 -8
  230. package/contracts/shared/Proxy.sol +0 -83
@@ -21,13 +21,15 @@ import {UFixed, UFixedMathLib} from "../../types/UFixed.sol";
21
21
  import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
22
22
  import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
23
23
  import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
24
- import {NftId, NftIdLib} from "../../types/NftId.sol";
24
+ import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
25
25
  import {Fee, FeeLib} from "../../types/Fee.sol";
26
26
  import {ReferralId} from "../../types/ReferralId.sol";
27
27
  import {RiskId} from "../../types/RiskId.sol";
28
28
  import {StateId} from "../../types/StateId.sol";
29
29
  import {Version, VersionLib} from "../../types/Version.sol";
30
30
 
31
+ import {IService} from "../base/IService.sol";
32
+ import {ServiceBase} from "../base/ServiceBase.sol";
31
33
  import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
32
34
  import {IProductService} from "./IProductService.sol";
33
35
 
@@ -41,22 +43,15 @@ contract ProductService is ComponentServiceBase, IProductService {
41
43
 
42
44
  constructor(
43
45
  address registry,
44
- NftId registryNftId
45
- ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
46
+ NftId registryNftId,
47
+ address initialOwner
48
+ ) ComponentServiceBase(registry, registryNftId, initialOwner)
46
49
  {
47
50
  _registerInterface(type(IProductService).interfaceId);
48
51
  }
49
52
 
50
- function getVersion()
51
- public
52
- pure
53
- virtual override (IVersionable, Versionable)
54
- returns(Version)
55
- {
56
- return VersionLib.toVersion(3,0,0);
57
- }
58
53
 
59
- function getName() external pure override returns(string memory name) {
54
+ function getName() public pure override(IService, ServiceBase) returns(string memory name) {
60
55
  return NAME;
61
56
  }
62
57
 
@@ -184,7 +179,7 @@ contract ProductService is ComponentServiceBase, IProductService {
184
179
  (poolFeeAmount,) = FeeLib.calculateFee(treasuryInfo.poolFee, netPremiumAmount);
185
180
  (bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
186
181
 
187
- IRegistry.ObjectInfo memory distributionInfo = _registry.getObjectInfo(treasuryInfo.distributionNftId);
182
+ IRegistry.ObjectInfo memory distributionInfo = getRegistry().getObjectInfo(treasuryInfo.distributionNftId);
188
183
  IDistributionComponent distribution = IDistributionComponent(distributionInfo.objectAddress);
189
184
  distributionFeeAmount = distribution.calculateFeeAmount(referralId, netPremiumAmount);
190
185
  }
@@ -202,11 +197,16 @@ contract ProductService is ComponentServiceBase, IProductService {
202
197
  (IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
203
198
  // TODO add validations (see create bundle in pool service)
204
199
 
205
- policyNftId = this.getRegistry().registerObjectForInstance(
206
- productInfo.nftId,
207
- POLICY(),
208
- applicationOwner,
209
- ""
200
+ policyNftId = getRegistryService().registerPolicy(
201
+ IRegistry.ObjectInfo(
202
+ zeroNftId(),
203
+ productInfo.nftId,
204
+ POLICY(),
205
+ false, // intercepting property for policies is defined on product
206
+ address(0),
207
+ applicationOwner,
208
+ ""
209
+ )
210
210
  );
211
211
 
212
212
  (uint256 premiumAmount,,,,) = calculatePremium(
@@ -283,7 +283,7 @@ contract ProductService is ComponentServiceBase, IProductService {
283
283
  )
284
284
  internal
285
285
  {
286
- address poolAddress = _registry.getObjectInfo(treasuryInfo.poolNftId).objectAddress;
286
+ address poolAddress = getRegistry().getObjectInfo(treasuryInfo.poolNftId).objectAddress;
287
287
  IPoolComponent pool = IPoolComponent(poolAddress);
288
288
  pool.underwrite(
289
289
  policyNftId,
@@ -480,7 +480,7 @@ contract ProductService is ComponentServiceBase, IProductService {
480
480
  // process token transfer(s)
481
481
  if(premiumAmount > 0) {
482
482
  TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
483
- address policyOwner = _registry.getOwner(policyNftId);
483
+ address policyOwner = getRegistry().ownerOf(policyNftId);
484
484
  address poolWallet = instance.getComponentWallet(treasuryInfo.poolNftId);
485
485
  netPremiumAmount = premiumAmount;
486
486
  Fee memory productFee = treasuryInfo.productFee;
@@ -1,8 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {ERC721, ERC721Enumerable} from "@openzeppelin5/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
5
+ import {IERC721} from "@openzeppelin5/contracts/token/ERC721/IERC721.sol";
3
6
 
4
- import {ERC721, ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
5
7
  import {IChainNft} from "./IChainNft.sol";
8
+ import {ITransferInterceptor} from "./ITransferInterceptor.sol";
6
9
 
7
10
  contract ChainNft is ERC721Enumerable, IChainNft {
8
11
  string public constant NAME = "Dezentralized Insurance Protocol Registry";
@@ -11,6 +14,9 @@ contract ChainNft is ERC721Enumerable, IChainNft {
11
14
  uint256 public constant PROTOCOL_NFT_ID = 1101;
12
15
  uint256 public constant GLOBAL_REGISTRY_ID = 2101;
13
16
 
17
+ // remember interceptors
18
+ mapping(uint256 tokenId => address interceptor) private _interceptor;
19
+
14
20
  // remember token uri
15
21
  mapping(uint256 tokenId => string uri) private _uri;
16
22
 
@@ -37,18 +43,36 @@ contract ChainNft is ERC721Enumerable, IChainNft {
37
43
  _chainIdInt = block.chainid;
38
44
  _chainIdDigits = _countDigits(_chainIdInt);
39
45
  _chainIdMultiplier = 10 ** _chainIdDigits;
40
- _idNext = 3;
46
+ _idNext = 4;
41
47
  }
42
48
 
49
+ /**
50
+ * @dev mints a token for a specified token id
51
+ * not part of the IRegistry interface only needed for
52
+ * initial registry setup (protocol and global registry objects)
53
+ */
54
+ function mint(address to, uint256 tokenId) external onlyRegistry {
55
+ _totalMinted++;
56
+ _safeMint(to, tokenId);
57
+ }
58
+
59
+
43
60
  /**
44
61
  * @dev mints the next token to register new objects
62
+ * non-zero transferInterceptors are recorded and called during nft token transfers.
63
+ * the contract receiving such a notification may decides to revert or record the transfer
45
64
  */
46
65
  function mint(
47
66
  address to,
67
+ address interceptor,
48
68
  string memory uri
49
- ) external override onlyRegistry returns (uint256 tokenId) {
69
+ ) public onlyRegistry returns (uint256 tokenId) {
50
70
  tokenId = _getNextTokenId();
51
71
 
72
+ if (interceptor != address(0)) {
73
+ _interceptor[tokenId] = interceptor;
74
+ }
75
+
52
76
  if (bytes(uri).length > 0) {
53
77
  _uri[tokenId] = uri;
54
78
  }
@@ -57,18 +81,22 @@ contract ChainNft is ERC721Enumerable, IChainNft {
57
81
  _totalMinted++;
58
82
  }
59
83
 
84
+
60
85
  /**
61
- * @dev mints a token for a specified token id
62
- * not part of the IRegistry interface only needed for
63
- * initial registry setup (protocol and global registry objects)
64
- */
65
- function mint(address to, uint256 tokenId) external onlyRegistry {
66
- _totalMinted++;
67
- _safeMint(to, tokenId);
86
+ * @dev amend the open zeppelin transferFrom function by an interceptor call if such an interceptor is defined for the nft token id
87
+ * this allows distribution, product and pool components to be notified when distributors, policies and bundles are transferred.
88
+ */
89
+ function transferFrom(address from, address to, uint256 tokenId) public override (ERC721, IERC721) {
90
+ super.transferFrom(from, to, tokenId);
91
+
92
+ if (_interceptor[tokenId] != address(0)) {
93
+ ITransferInterceptor(_interceptor[tokenId]).nftTransferFrom(from, to, tokenId);
94
+ }
68
95
  }
69
96
 
97
+
70
98
  function burn(uint256 tokenId) external override onlyRegistry {
71
- _requireMinted(tokenId);
99
+ _requireOwned(tokenId);
72
100
  _burn(tokenId);
73
101
  delete _uri[tokenId];
74
102
  }
@@ -79,18 +107,18 @@ contract ChainNft is ERC721Enumerable, IChainNft {
79
107
  ) external override onlyRegistry {
80
108
  require(bytes(uri).length > 0, "ERROR:CRG-011:URI_EMPTY");
81
109
 
82
- _requireMinted(tokenId);
110
+ _requireOwned(tokenId);
83
111
  _uri[tokenId] = uri;
84
112
  }
85
113
 
86
114
  function exists(uint256 tokenId) external view override returns (bool) {
87
- return _exists(tokenId);
115
+ return _ownerOf(tokenId) != address(0);
88
116
  }
89
117
 
90
118
  function tokenURI(
91
119
  uint256 tokenId
92
120
  ) public view override returns (string memory) {
93
- _requireMinted(tokenId);
121
+ _requireOwned(tokenId);
94
122
  return _uri[tokenId];
95
123
  }
96
124
 
@@ -1,11 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {IERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
4
+ import {IERC721Enumerable} from "@openzeppelin5/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
5
5
 
6
6
  interface IChainNft is IERC721Enumerable {
7
7
  function mint(
8
8
  address to,
9
+ address interceptor,
9
10
  string memory uri
10
11
  ) external returns (uint256 tokenId);
11
12
 
@@ -1,57 +1,73 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
- pragma solidity ^0.8.19;
2
+ pragma solidity ^0.8.20;
3
3
 
4
- import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
4
+ import {IERC165} from "@openzeppelin5/contracts/utils/introspection/IERC165.sol";
5
5
 
6
+ import {IOwnable} from "../shared/IOwnable.sol";
6
7
  import {NftId} from "../types/NftId.sol";
7
8
  import {ObjectType} from "../types/ObjectType.sol";
8
9
  import {VersionPart} from "../types/Version.sol";
9
10
  import {IChainNft} from "./IChainNft.sol";
10
11
 
11
- interface IRegistry is IERC165 {
12
+ interface IRegistry is IERC165, IOwnable {
13
+
14
+ event LogRegistration(NftId indexed nftId, NftId parentNftId, ObjectType objectType, address objectAddress, address initialOwner);
15
+
16
+ event LogServiceNameRegistration(string serviceName, VersionPart majorVersion);
17
+
18
+ event LogApproval(NftId indexed nftId, ObjectType objectType);
19
+
12
20
  struct ObjectInfo {
13
21
  NftId nftId;
14
22
  NftId parentNftId;
15
23
  ObjectType objectType;
24
+ bool isInterceptor;
16
25
  address objectAddress;
17
26
  address initialOwner;
18
27
  bytes data;
19
- }
20
-
21
- function register(address objectAddress) external returns (NftId nftId);
28
+ }// TODO delete nftId and initialOwner(if not used) from struct
22
29
 
23
- function registerObjectForInstance(
24
- NftId parentNftid,
25
- ObjectType objectType,
26
- address initialOwner,
27
- bytes memory data
30
+ function register(ObjectInfo memory info) external returns (NftId nftId);
31
+
32
+ function registerFrom(
33
+ address from,
34
+ ObjectInfo memory info
28
35
  ) external returns (NftId nftId);
29
36
 
30
- function getServiceAddress(string memory serviceName, VersionPart majorVersion) external view returns (address serviceAddress);
37
+ function approve(
38
+ NftId registrar,
39
+ ObjectType object,
40
+ ObjectType parent
41
+ ) external;
31
42
 
32
- function getObjectCount() external view returns (uint256);
43
+ function allowance(
44
+ NftId registrar,
45
+ ObjectType object
46
+ ) external view returns (bool);
33
47
 
34
- function getNftId() external view returns (NftId nftId);
48
+ function getObjectCount() external view returns (uint256);
35
49
 
36
- function getNftId(
37
- address objectAddress
38
- ) external view returns (NftId nftId);
50
+ //nftIdOf
51
+ function getNftId(address objectAddress) external view returns (NftId nftId);
39
52
 
40
- function getObjectInfo(
41
- NftId nftId
42
- ) external view returns (ObjectInfo memory info);
53
+ function ownerOf(NftId nftId) external view returns (address);
43
54
 
44
- function getName(
45
- NftId nftId
46
- ) external view returns (string memory name);
55
+ function ownerOf(address contractAddress) external view returns (address);
56
+ // infoOf()
57
+ function getObjectInfo(NftId nftId) external view returns (ObjectInfo memory info);
58
+ // infoOf()
59
+ function getObjectInfo(address object) external view returns (ObjectInfo memory info);
47
60
 
48
- function getProtocolOwner() external view returns (address);
61
+ function isRegistered(NftId nftId) external view returns (bool);
49
62
 
50
- function getOwner(NftId nftId) external view returns (address ownerAddress);
63
+ function isRegistered(address contractAddress) external view returns (bool);
51
64
 
52
- function isRegistered(NftId nftId) external view returns (bool);
65
+ function getServiceName(NftId nftId) external view returns (string memory name);
53
66
 
54
- function isRegistered(address objectAddress) external view returns (bool);
67
+ function getServiceAddress(
68
+ string memory serviceName,
69
+ VersionPart majorVersion
70
+ ) external view returns (address serviceAddress);
55
71
 
56
72
  function getChainNft() external view returns (IChainNft);
57
- }
73
+ }
@@ -0,0 +1,29 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ import {NftId} from "../../contracts/types/NftId.sol";
5
+ import {ObjectType} from "../../contracts/types/ObjectType.sol";
6
+ import {RoleId} from "../../contracts/types/RoleId.sol";
7
+ import {IService} from "../../contracts/instance/base/IService.sol";
8
+ import {IRegistry} from "../../contracts/registry/IRegistry.sol";
9
+
10
+ import {IRegisterable} from "../../contracts/shared/IRegisterable.sol";
11
+ import {IBaseComponent} from "../../contracts/components/IBaseComponent.sol";
12
+
13
+ interface IRegistryService is IService {
14
+
15
+ function registerToken(address tokenAddress) external returns(NftId nftId);
16
+
17
+ function registerService(IService service) external returns(IRegistry.ObjectInfo memory info, bytes memory data);
18
+
19
+ function registerComponent(IBaseComponent component, ObjectType componentType, address owner)
20
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
21
+
22
+ function registerInstance(IRegisterable instance)
23
+ external returns(IRegistry.ObjectInfo memory info, bytes memory data);
24
+
25
+ function registerPolicy(IRegistry.ObjectInfo memory info) external returns(NftId nftId); // -> easy to upgrade
26
+
27
+ function registerBundle(IRegistry.ObjectInfo memory info) external returns(NftId nftId);
28
+ }
29
+
@@ -0,0 +1,6 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.20;
3
+
4
+ interface ITransferInterceptor {
5
+ function nftTransferFrom(address from, address to, uint256 tokenId) external;
6
+ }