@etherisc/gif-next 0.0.2-d3ee0cc-268 → 0.0.2-d408403-475

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 (217) hide show
  1. package/README.md +38 -11
  2. package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
  3. package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
  4. package/artifacts/contracts/components/Distribution.sol/Distribution.json +405 -0
  5. package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
  6. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
  7. package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +340 -0
  8. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  9. package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +131 -0
  10. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  11. package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +109 -18
  12. package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
  13. package/artifacts/contracts/components/Pool.sol/Pool.json +194 -3
  14. package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
  15. package/artifacts/contracts/components/Product.sol/Product.json +160 -21
  16. package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
  17. package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
  18. package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
  19. package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
  20. package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
  21. package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
  22. package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
  23. package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
  24. package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
  25. package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
  26. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
  27. package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
  28. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
  29. package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
  30. package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
  31. package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
  32. package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
  33. package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
  34. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  35. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +592 -451
  36. package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +1 -1
  37. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  38. package/artifacts/contracts/instance/Instance.sol/Instance.json +735 -506
  39. package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
  40. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
  41. package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +50 -0
  42. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  43. package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +49 -0
  44. package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  45. package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +1 -1
  46. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +1 -1
  47. package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +50 -0
  48. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  49. package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +41 -23
  50. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  51. package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +4 -4
  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/module/access/Access.sol/AccessModule.dbg.json +1 -1
  55. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +1 -1
  56. package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +1 -1
  57. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +1 -1
  58. package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +55 -54
  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/bundle/IBundle.sol/IBundleModule.json +56 -55
  62. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +1 -1
  63. package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +22 -93
  64. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +1 -1
  65. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +1 -1
  66. package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +22 -93
  67. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
  68. package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
  69. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
  70. package/artifacts/contracts/instance/module/{compensation/ICompensation.sol/ICompensation.json → distribution/IDistribution.sol/IDistribution.json} +2 -2
  71. package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
  72. package/artifacts/contracts/instance/module/{compensation/ICompensation.sol/ICompensationModule.json → distribution/IDistribution.sol/IDistributionModule.json} +2 -2
  73. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +1 -1
  74. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +1 -1
  75. package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +61 -38
  76. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +1 -1
  77. package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +61 -38
  78. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +1 -1
  79. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +1 -1
  80. package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -5
  81. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +1 -1
  82. package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -5
  83. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +1 -1
  84. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +1 -1
  85. package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +104 -1
  86. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +1 -1
  87. package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +126 -5
  88. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +1 -1
  89. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +1 -1
  90. package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +209 -231
  91. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  92. package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +2 -2
  93. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +1 -1
  94. package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +209 -231
  95. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
  96. package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +55 -15
  97. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
  98. package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +420 -0
  99. package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
  100. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
  101. package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +325 -0
  102. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
  103. package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +64 -0
  104. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
  105. package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +160 -7
  106. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
  107. package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +84 -12
  108. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
  109. package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +216 -31
  110. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  111. package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
  112. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  113. package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  114. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  115. package/artifacts/contracts/registry/Registry.sol/Registry.json +2 -2
  116. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  117. package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +1 -1
  118. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  119. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  120. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  121. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  122. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +4 -0
  123. package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +405 -0
  124. package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
  125. package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
  126. package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +1 -1
  127. package/artifacts/contracts/test/TestPool.sol/TestPool.json +194 -3
  128. package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +1 -1
  129. package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +209 -27
  130. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
  131. package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
  132. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
  133. package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +38 -4
  134. package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
  135. package/artifacts/contracts/test/TestService.sol/TestService.json +2 -2
  136. package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
  137. package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
  138. package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
  139. package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
  140. package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  141. package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  142. package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
  143. package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
  144. package/artifacts/contracts/types/Fee.sol/FeeLib.json +50 -11
  145. package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
  146. package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
  147. package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
  148. package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
  149. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  150. package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
  151. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  152. package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
  153. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
  154. package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -0
  155. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
  156. package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
  157. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
  158. package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
  159. package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
  160. package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
  161. package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
  162. package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
  163. package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
  164. package/contracts/components/BaseComponent.sol +7 -1
  165. package/contracts/components/Distribution.sol +132 -0
  166. package/contracts/components/IDistributionComponent.sol +48 -0
  167. package/contracts/components/IPoolComponent.sol +14 -0
  168. package/contracts/components/IProductComponent.sol +24 -5
  169. package/contracts/components/Pool.sol +64 -3
  170. package/contracts/components/Product.sol +123 -13
  171. package/contracts/instance/IInstance.sol +7 -6
  172. package/contracts/instance/Instance.sol +12 -6
  173. package/contracts/instance/base/IInstanceBase.sol +8 -0
  174. package/contracts/instance/base/IKeyValueStore.sol +4 -3
  175. package/contracts/instance/base/InstanceBase.sol +13 -2
  176. package/contracts/instance/base/KeyValueStore.sol +12 -7
  177. package/contracts/instance/base/Lifecycle.sol +15 -10
  178. package/contracts/instance/base/ModuleBase.sol +22 -17
  179. package/contracts/instance/module/access/Access.sol +6 -6
  180. package/contracts/instance/module/bundle/BundleModule.sol +10 -12
  181. package/contracts/instance/module/bundle/IBundle.sol +6 -11
  182. package/contracts/instance/module/component/ComponentModule.sol +29 -54
  183. package/contracts/instance/module/component/IComponent.sol +5 -30
  184. package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
  185. package/contracts/instance/module/distribution/IDistribution.sol +10 -0
  186. package/contracts/instance/module/policy/IPolicy.sol +12 -9
  187. package/contracts/instance/module/policy/PolicyModule.sol +35 -20
  188. package/contracts/instance/module/pool/IPoolModule.sol +0 -1
  189. package/contracts/instance/module/pool/PoolModule.sol +12 -9
  190. package/contracts/instance/module/risk/IRisk.sol +18 -2
  191. package/contracts/instance/module/risk/RiskModule.sol +56 -2
  192. package/contracts/instance/module/treasury/ITreasury.sol +29 -50
  193. package/contracts/instance/module/treasury/TreasuryModule.sol +71 -85
  194. package/contracts/instance/service/ComponentOwnerService.sol +29 -42
  195. package/contracts/instance/service/DistributionService.sol +59 -0
  196. package/contracts/instance/service/IDistributionService.sol +12 -0
  197. package/contracts/instance/service/IPoolService.sol +7 -0
  198. package/contracts/instance/service/IProductService.sol +56 -7
  199. package/contracts/instance/service/PoolService.sol +30 -4
  200. package/contracts/instance/service/ProductService.sol +230 -75
  201. package/contracts/registry/Registry.sol +3 -2
  202. package/contracts/test/TestDistribution.sol +21 -0
  203. package/contracts/test/TestPool.sol +5 -2
  204. package/contracts/test/TestProduct.sol +35 -7
  205. package/contracts/test/TestRoleId.sol +2 -2
  206. package/contracts/types/Fee.sol +8 -3
  207. package/contracts/types/ObjectType.sol +24 -8
  208. package/contracts/types/ReferralId.sol +48 -0
  209. package/contracts/types/RiskId.sol +43 -0
  210. package/contracts/types/RoleId.sol +12 -10
  211. package/package.json +1 -1
  212. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
  213. package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
  214. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
  215. package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
  216. package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
  217. package/contracts/instance/module/compensation/ICompensation.sol +0 -10
@@ -11,17 +11,20 @@ import {TreasuryModule} from "../module/treasury/TreasuryModule.sol";
11
11
  import {IComponent, IComponentModule} from "../module/component/IComponent.sol";
12
12
  import {IBaseComponent} from "../../components/IBaseComponent.sol";
13
13
  import {IPoolComponent} from "../../components/IPoolComponent.sol";
14
-
14
+ import {IKeyValueStore} from "../../instance/base/IKeyValueStore.sol";
15
15
  import {IVersionable} from "../../shared/IVersionable.sol";
16
16
  import {Versionable} from "../../shared/Versionable.sol";
17
17
 
18
- import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
19
- import {ObjectType, PRODUCT, ORACLE, POOL} from "../../types/ObjectType.sol";
18
+ import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, DISTRIBUTION_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
19
+ import {ObjectType, COMPONENT, PRODUCT, ORACLE, POOL, DISTRIBUTION} from "../../types/ObjectType.sol";
20
20
  import {StateId, ACTIVE, PAUSED} from "../../types/StateId.sol";
21
+ import {Key32} from "../../types/Key32.sol";
21
22
  import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
22
23
  import {Fee} from "../../types/Fee.sol";
23
24
  import {Version, VersionLib} from "../../types/Version.sol";
24
25
 
26
+ import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
27
+ import {IPoolComponent} from "../../components/IPoolComponent.sol";
25
28
  import {IProductComponent} from "../../components/IProductComponent.sol";
26
29
  import {ServiceBase} from "../base/ServiceBase.sol";
27
30
  import {IComponentOwnerService} from "./IComponentOwnerService.sol";
@@ -70,6 +73,9 @@ contract ComponentOwnerService is
70
73
  if (cType == POOL()) {
71
74
  return POOL_OWNER_ROLE();
72
75
  }
76
+ if (cType == DISTRIBUTION()) {
77
+ return DISTRIBUTION_OWNER_ROLE();
78
+ }
73
79
  if (cType == ORACLE()) {
74
80
  return ORACLE_OWNER_ROLE();
75
81
  }
@@ -97,29 +103,25 @@ contract ComponentOwnerService is
97
103
 
98
104
  instance.registerComponent(
99
105
  nftId,
100
- objectType,
101
- token);
102
-
103
- address wallet = component.getWallet();
106
+ token,
107
+ component.getWallet());
104
108
 
105
109
  // component type specific registration actions
106
110
  if (component.getType() == PRODUCT()) {
107
111
  IProductComponent product = IProductComponent(address(component));
112
+
108
113
  NftId poolNftId = product.getPoolNftId();
109
114
  require(poolNftId.gtz(), "ERROR:CMP-005:POOL_UNKNOWN");
110
- // validate pool token and product token are same
115
+ IPoolComponent pool = IPoolComponent(_registry.getObjectInfo(poolNftId).objectAddress);
116
+
117
+ NftId distributionNftId = product.getDistributionNftId();
118
+ IDistributionComponent distribution = IDistributionComponent(_registry.getObjectInfo(distributionNftId).objectAddress);
111
119
 
112
120
  // register with tresury
113
- // implement and add validation
114
- NftId distributorNftId = zeroNftId();
115
- instance.registerProduct(
116
- nftId,
117
- distributorNftId,
118
- poolNftId,
119
- token,
120
- wallet,
121
- product.getPolicyFee(),
122
- product.getProcessingFee()
121
+ instance.registerProductSetup(
122
+ product,
123
+ pool,
124
+ distribution
123
125
  );
124
126
  } else if (component.getType() == POOL()) {
125
127
  IPoolComponent pool = IPoolComponent(address(component));
@@ -129,42 +131,27 @@ contract ComponentOwnerService is
129
131
  nftId,
130
132
  pool.isVerifying(),
131
133
  pool.getCollateralizationLevel());
132
-
133
- // register with tresury
134
- instance.registerPool(
135
- nftId,
136
- wallet,
137
- pool.getStakingFee(),
138
- pool.getPerformanceFee());
139
134
  }
140
- // TODO add distribution
135
+ // TODO add compensation
141
136
  }
142
137
 
143
138
  function lock(
144
139
  IBaseComponent component
145
140
  ) external override onlyRegisteredComponent(component) {
141
+ // TODO use msg.sender to get component and get instance via registered parent nft id
146
142
  IInstance instance = component.getInstance();
147
- IComponent.ComponentInfo memory info = instance.getComponentInfo(
148
- component.getNftId()
149
- );
150
- require(info.nftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
151
-
152
- info.state = PAUSED();
153
- // setComponentInfo checks for valid state changes
154
- instance.setComponentInfo(info);
143
+ NftId nftId = component.getNftId();
144
+ Key32 key = nftId.toKey32(COMPONENT());
145
+ instance.updateState(key, PAUSED());
155
146
  }
156
147
 
157
148
  function unlock(
158
149
  IBaseComponent component
159
150
  ) external override onlyRegisteredComponent(component) {
151
+ // TODO use msg.sender to get component and get instance via registered parent nft id
160
152
  IInstance instance = component.getInstance();
161
- IComponent.ComponentInfo memory info = instance.getComponentInfo(
162
- component.getNftId()
163
- );
164
- require(info.nftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
165
-
166
- info.state = ACTIVE();
167
- // setComponentInfo checks for valid state changes
168
- instance.setComponentInfo(info);
153
+ NftId nftId = component.getNftId();
154
+ Key32 key = nftId.toKey32(COMPONENT());
155
+ instance.updateState(key, ACTIVE());
169
156
  }
170
157
  }
@@ -0,0 +1,59 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {IRegistry} from "../../registry/IRegistry.sol";
5
+ import {IInstance} from "../../instance/IInstance.sol";
6
+ import {ITreasury} from "../../instance/module/treasury/ITreasury.sol";
7
+
8
+ import {NftId} from "../../types/NftId.sol";
9
+ import {Fee} from "../../types/Fee.sol";
10
+ import {DISTRIBUTION} from "../../types/ObjectType.sol";
11
+ import {Version, VersionLib} from "../../types/Version.sol";
12
+
13
+ import {IVersionable} from "../../shared/IVersionable.sol";
14
+ import {Versionable} from "../../shared/Versionable.sol";
15
+
16
+ import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
17
+ import {IDistributionService} from "./IDistributionService.sol";
18
+
19
+ contract DistributionService is
20
+ ComponentServiceBase,
21
+ IDistributionService
22
+ {
23
+ string public constant NAME = "DistributionService";
24
+
25
+ constructor(
26
+ address registry,
27
+ NftId registryNftId
28
+ ) ComponentServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
29
+ {
30
+ _registerInterface(type(IDistributionService).interfaceId);
31
+ }
32
+
33
+ function getVersion()
34
+ public
35
+ pure
36
+ virtual override (IVersionable, Versionable)
37
+ returns(Version)
38
+ {
39
+ return VersionLib.toVersion(3,0,0);
40
+ }
41
+
42
+ function getName() external pure override returns(string memory name) {
43
+ return NAME;
44
+ }
45
+
46
+ function setFees(
47
+ Fee memory distributionFee
48
+ )
49
+ external
50
+ override
51
+ {
52
+ (IRegistry.ObjectInfo memory distributionInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
53
+
54
+ NftId productNftId = instance.getProductNftId(distributionInfo.nftId);
55
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
56
+ treasuryInfo.distributionFee = distributionFee;
57
+ instance.setTreasuryInfo(productNftId, treasuryInfo);
58
+ }
59
+ }
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: Apache-2.0
2
+ pragma solidity ^0.8.19;
3
+
4
+ import {NftId} from "../../types/NftId.sol";
5
+ import {Fee} from "../../types/Fee.sol";
6
+ import {IService} from "../base/IService.sol";
7
+
8
+ interface IDistributionService is IService {
9
+ function setFees(
10
+ Fee memory distributionFee
11
+ ) external;
12
+ }
@@ -7,17 +7,24 @@ import {IService} from "../base/IService.sol";
7
7
 
8
8
  interface IPoolService is IService {
9
9
  function setFees(
10
+ Fee memory poolFee,
10
11
  Fee memory stakingFee,
11
12
  Fee memory performanceFee
12
13
  ) external;
13
14
 
14
15
  function createBundle(
15
16
  address owner,
17
+ Fee memory fee,
16
18
  uint256 amount,
17
19
  uint256 lifetime,
18
20
  bytes calldata filter
19
21
  ) external returns(NftId bundleNftId);
20
22
 
23
+ function setBundleFee(
24
+ NftId bundleNftId,
25
+ Fee memory fee
26
+ ) external;
27
+
21
28
  // function fundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
22
29
 
23
30
  // function defundBundle(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
@@ -1,27 +1,76 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.19;
3
3
 
4
+ import {IRisk} from "../module/risk/IRisk.sol";
5
+ import {IService} from "../base/IService.sol";
6
+
4
7
  import {NftId} from "../../types/NftId.sol";
8
+ import {ReferralId} from "../../types/ReferralId.sol";
9
+ import {RiskId} from "../../types/RiskId.sol";
10
+ import {StateId} from "../../types/StateId.sol";
5
11
  import {Timestamp} from "../../types/Timestamp.sol";
6
12
  import {UFixed} from "../../types/UFixed.sol";
7
13
  import {Fee} from "../../types/Fee.sol";
8
- import {IService} from "../base/IService.sol";
9
14
 
10
15
  interface IProductService is IService {
11
16
  function setFees(
12
- Fee memory policyFee,
17
+ Fee memory productFee,
13
18
  Fee memory processingFee
14
19
  ) external;
15
20
 
21
+ function createRisk(
22
+ RiskId riskId,
23
+ bytes memory data
24
+ ) external;
25
+
26
+
27
+ function setRiskInfo(
28
+ RiskId riskId,
29
+ IRisk.RiskInfo memory data
30
+ ) external;
31
+
32
+
33
+ function updateRiskState(
34
+ RiskId riskId,
35
+ StateId state
36
+ ) external;
37
+
38
+
39
+ function calculatePremium(
40
+ RiskId riskId,
41
+ uint256 sumInsuredAmount,
42
+ uint256 lifetime,
43
+ bytes memory applicationData,
44
+ NftId bundleNftId,
45
+ ReferralId referralId
46
+ )
47
+ external
48
+ view
49
+ returns (
50
+ uint256 premiumAmount,
51
+ uint256 productFeeAmount,
52
+ uint256 poolFeeAmount,
53
+ uint256 bundleFeeAmount,
54
+ uint256 distributionFeeAmount
55
+ );
56
+
57
+
16
58
  function createApplication(
17
59
  address applicationOwner,
60
+ RiskId riskId,
18
61
  uint256 sumInsuredAmount,
19
- uint256 premiumAmount,
20
62
  uint256 lifetime,
21
- NftId bundleNftId
63
+ bytes memory applicationData,
64
+ NftId bundleNftId,
65
+ ReferralId referralId
22
66
  ) external returns (NftId nftId);
23
67
 
24
- // function revoke(unit256 nftId) external;
68
+ /**
69
+ * @dev revokes the application represented by {policyNftId}.
70
+ * an application can only be revoked in applied state.
71
+ * only the application holder may revoke an application.
72
+ */
73
+ function revoke(NftId policyNftId) external;
25
74
 
26
75
  /**
27
76
  * @dev underwrites the policy represented by {policyNftId}.
@@ -38,9 +87,9 @@ interface IProductService is IService {
38
87
  // function decline(uint256 nftId) external;
39
88
  // function expire(uint256 nftId) external;
40
89
 
41
- function collectPremium(NftId nftId, Timestamp activateAt) external;
90
+ function collectPremium(NftId policyNftId, Timestamp activateAt) external;
42
91
 
43
- function activate(NftId nftId, Timestamp activateAt) external;
92
+ function activate(NftId policyNftId, Timestamp activateAt) external;
44
93
 
45
94
 
46
95
  function close(NftId nftId) external;
@@ -3,6 +3,7 @@ pragma solidity ^0.8.19;
3
3
 
4
4
  import {IRegistry} from "../../registry/IRegistry.sol";
5
5
  import {IInstance} from "../../instance/IInstance.sol";
6
+ import {IBundle} from "../../instance/module/bundle/IBundle.sol";
6
7
  import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
7
8
 
8
9
  import {IVersionable} from "../../shared/IVersionable.sol";
@@ -44,18 +45,26 @@ contract PoolService is ComponentServiceBase, IPoolService {
44
45
  }
45
46
 
46
47
  function setFees(
48
+ Fee memory poolFee,
47
49
  Fee memory stakingFee,
48
50
  Fee memory performanceFee
49
51
  )
50
52
  external
51
53
  override
52
54
  {
53
- (IRegistry.ObjectInfo memory info, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
54
- instance.setPoolFees(info.nftId, stakingFee, performanceFee);
55
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
56
+
57
+ NftId productNftId = instance.getProductNftId(poolInfo.nftId);
58
+ ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
59
+ treasuryInfo.poolFee = poolFee;
60
+ treasuryInfo.stakingFee = stakingFee;
61
+ treasuryInfo.performanceFee = performanceFee;
62
+ instance.setTreasuryInfo(productNftId, treasuryInfo);
55
63
  }
56
64
 
57
65
  function createBundle(
58
66
  address owner,
67
+ Fee memory fee,
59
68
  uint256 stakingAmount,
60
69
  uint256 lifetime,
61
70
  bytes calldata filter
@@ -78,6 +87,7 @@ contract PoolService is ComponentServiceBase, IPoolService {
78
87
  instance.createBundleInfo(
79
88
  bundleNftId,
80
89
  poolNftId,
90
+ fee,
81
91
  stakingAmount,
82
92
  lifetime,
83
93
  filter);
@@ -98,6 +108,21 @@ contract PoolService is ComponentServiceBase, IPoolService {
98
108
  // TODO add logging
99
109
  }
100
110
 
111
+ function setBundleFee(
112
+ NftId bundleNftId,
113
+ Fee memory fee
114
+ )
115
+ external
116
+ override
117
+ {
118
+ (IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
119
+ IBundle.BundleInfo memory bundleInfo = instance.getBundleInfo(bundleNftId);
120
+ require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
121
+ require(poolInfo.nftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
122
+ bundleInfo.fee = fee;
123
+ instance.setBundleInfo(bundleNftId, bundleInfo);
124
+ }
125
+
101
126
 
102
127
  function _processStakingByTreasury(
103
128
  IInstance instance,
@@ -109,9 +134,10 @@ contract PoolService is ComponentServiceBase, IPoolService {
109
134
  {
110
135
  // process token transfer(s)
111
136
  if(stakingAmount > 0) {
112
- TokenHandler tokenHandler = instance.getTokenHandler(poolNftId);
137
+ NftId productNftId = instance.getProductNftId(poolNftId);
138
+ TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
113
139
  address bundleOwner = _registry.getOwner(bundleNftId);
114
- address poolWallet = instance.getPoolSetup(poolNftId).wallet;
140
+ address poolWallet = instance.getComponentWallet(poolNftId);
115
141
 
116
142
  tokenHandler.transfer(
117
143
  bundleOwner,