@etherisc/gif-next 0.0.2-f13c010-035 → 0.0.2-f13fd28-503

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 (462) hide show
  1. package/README.md +27 -6
  2. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.dbg.json +4 -0
  3. package/artifacts/contracts/accounting/AccountingService.sol/AccountingService.json +1007 -0
  4. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.dbg.json +4 -0
  5. package/artifacts/contracts/accounting/AccountingServiceManager.sol/AccountingServiceManager.json +744 -0
  6. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.dbg.json +4 -0
  7. package/artifacts/contracts/accounting/IAccountingService.sol/IAccountingService.json +791 -0
  8. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
  9. package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +148 -62
  10. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.dbg.json +4 -0
  11. package/artifacts/contracts/authorization/AccessAdmin.sol/IAccessManagedChecker.json +24 -0
  12. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
  13. package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.json +233 -5
  14. package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
  15. package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +149 -21
  16. package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
  17. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
  18. package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +82 -12
  19. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
  20. package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.json +68 -13
  21. package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
  22. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
  23. package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +2 -2
  24. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
  25. package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +106 -186
  26. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
  27. package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +152 -33
  28. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  29. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +57 -89
  30. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  31. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +154 -108
  32. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  33. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +75 -53
  34. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  35. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +44 -58
  36. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  37. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +50 -3
  38. package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +1 -1
  39. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +1 -1
  40. package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +101 -164
  41. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +1 -1
  42. package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +152 -33
  43. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +1 -1
  44. package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +258 -290
  45. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +1 -1
  46. package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +152 -33
  47. package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +1 -1
  48. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +1 -1
  49. package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +137 -129
  50. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.dbg.json +4 -0
  51. package/artifacts/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol/SimpleDistributionAuthorization.json +589 -0
  52. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +1 -1
  53. package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +90 -126
  54. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +1 -1
  55. package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +225 -162
  56. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.dbg.json +4 -0
  57. package/artifacts/contracts/examples/unpermissioned/SimplePoolAuthorization.sol/SimplePoolAuthorization.json +589 -0
  58. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +1 -1
  59. package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +641 -310
  60. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +1 -1
  61. package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +193 -45
  62. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  63. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +118 -39
  64. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  65. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +77 -20
  66. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  67. package/artifacts/contracts/instance/Instance.sol/Instance.json +163 -56
  68. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
  69. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +362 -99
  70. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
  71. package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +140 -40
  72. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  73. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +550 -224
  74. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  75. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +104 -74
  76. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  77. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +49 -27
  78. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  79. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +410 -370
  80. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.dbg.json +4 -0
  81. package/artifacts/contracts/instance/RiskSet.sol/RiskSet.json +853 -0
  82. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  83. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  84. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  85. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
  86. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
  87. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
  88. package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +2 -2
  89. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +1 -1
  90. package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.json +16 -5
  91. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.dbg.json +4 -0
  92. package/artifacts/contracts/instance/base/ObjectSetHelperLib.sol/ObjectSetHelperLib.json +168 -0
  93. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  94. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  95. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  96. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  97. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  98. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  99. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
  100. package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +74 -154
  101. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
  102. package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +126 -35
  103. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
  104. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
  105. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +44 -58
  106. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
  107. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +27 -3
  108. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
  109. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +58 -90
  110. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
  111. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +112 -81
  112. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
  113. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +69 -27
  114. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
  115. package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +57 -104
  116. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
  117. package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +152 -33
  118. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  119. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +127 -331
  120. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  121. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +53 -87
  122. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  123. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +56 -136
  124. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  125. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +44 -97
  126. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  127. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +164 -217
  128. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  129. package/artifacts/contracts/pool/Pool.sol/Pool.json +57 -128
  130. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.dbg.json +4 -0
  131. package/artifacts/contracts/pool/PoolLib.sol/PoolLib.json +456 -0
  132. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  133. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +302 -353
  134. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  135. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +93 -51
  136. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  137. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +105 -63
  138. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  139. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +45 -27
  140. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
  141. package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +163 -175
  142. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
  143. package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +152 -33
  144. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  145. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +244 -179
  146. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  147. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +74 -64
  148. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  149. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +61 -10
  150. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  151. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +142 -20
  152. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  153. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +112 -56
  154. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  155. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +27 -3
  156. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  157. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +150 -144
  158. package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +1 -1
  159. package/artifacts/contracts/product/IRiskService.sol/IRiskService.json +27 -3
  160. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  161. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +211 -180
  162. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.dbg.json +4 -0
  163. package/artifacts/contracts/product/PolicyServiceLib.sol/PolicyServiceLib.json +293 -0
  164. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  165. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +76 -50
  166. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  167. package/artifacts/contracts/product/PricingService.sol/PricingService.json +99 -76
  168. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  169. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +60 -38
  170. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  171. package/artifacts/contracts/product/Product.sol/Product.json +163 -175
  172. package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +1 -1
  173. package/artifacts/contracts/product/RiskService.sol/RiskService.json +88 -73
  174. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +1 -1
  175. package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +54 -24
  176. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  177. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  178. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  179. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +50 -2
  180. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  181. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +31 -7
  182. package/artifacts/contracts/registry/IRelease.sol/IRelease.dbg.json +4 -0
  183. package/artifacts/contracts/registry/IRelease.sol/IRelease.json +24 -0
  184. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  185. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  186. package/artifacts/contracts/registry/Registry.sol/Registry.json +88 -40
  187. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
  188. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +262 -220
  189. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  190. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +69 -46
  191. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  192. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +42 -20
  193. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.dbg.json +4 -0
  194. package/artifacts/contracts/registry/ReleaseAdmin.sol/ReleaseAdmin.json +1849 -0
  195. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
  196. package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +2 -2
  197. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +1 -1
  198. package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +318 -52
  199. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
  200. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +6 -6
  201. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  202. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +4 -4
  203. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  204. package/artifacts/contracts/shared/Component.sol/Component.json +57 -75
  205. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  206. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +225 -439
  207. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  208. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +74 -64
  209. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  210. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +27 -16
  211. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +1 -1
  212. package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +454 -5
  213. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.dbg.json +4 -0
  214. package/artifacts/contracts/shared/ContractLib.sol/IInstanceAdminHelper.json +24 -0
  215. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.dbg.json +4 -0
  216. package/artifacts/contracts/shared/ContractLib.sol/ITargetHelper.json +30 -0
  217. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.dbg.json +4 -0
  218. package/artifacts/contracts/shared/ContractLib.sol/ITokenRegistryHelper.json +40 -0
  219. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  220. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +44 -44
  221. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  222. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +125 -282
  223. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  224. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +44 -58
  225. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  226. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  227. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  228. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  229. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  230. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +120 -1
  231. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  232. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  233. package/artifacts/contracts/shared/IService.sol/IService.json +27 -3
  234. package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +1 -1
  235. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  236. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +57 -89
  237. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  238. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  239. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +1 -1
  240. package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.json +2 -2
  241. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  242. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
  243. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  244. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
  245. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  246. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +118 -62
  247. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  248. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  249. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  250. package/artifacts/contracts/shared/Service.sol/Service.json +27 -16
  251. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  252. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +289 -112
  253. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.dbg.json +4 -0
  254. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandlerBase.json +484 -0
  255. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +1 -1
  256. package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +70 -30
  257. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  258. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +65 -83
  259. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  260. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +98 -3
  261. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
  262. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +49 -33
  263. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  264. package/artifacts/contracts/staking/Staking.sol/Staking.json +145 -176
  265. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
  266. package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +2 -2
  267. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  268. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +62 -46
  269. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  270. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +4 -4
  271. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  272. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +151 -49
  273. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  274. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +51 -25
  275. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
  276. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +129 -129
  277. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  278. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +23 -23
  279. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  280. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  281. package/artifacts/contracts/type/Amount.sol/AmountLib.json +3 -3
  282. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  283. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  284. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +2 -2
  285. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  286. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
  287. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  288. package/artifacts/contracts/type/Fee.sol/FeeLib.json +3 -3
  289. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  290. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  291. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.dbg.json +4 -0
  292. package/artifacts/contracts/type/Key32Set.sol/LibKey32Set.json +33 -0
  293. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  294. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +23 -4
  295. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  296. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  297. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  298. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
  299. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  300. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +2 -2
  301. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  302. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
  303. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
  304. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
  305. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  306. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +62 -5
  307. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  308. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +79 -15
  309. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  310. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
  311. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +21 -2
  312. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
  313. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +2 -2
  314. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  315. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
  316. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  317. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +2 -2
  318. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  319. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +3 -3
  320. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  321. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -21
  322. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  323. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +47 -2
  324. package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +1 -1
  325. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  326. package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +18 -2
  327. package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  328. package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +1 -1
  329. package/contracts/accounting/AccountingService.sol +262 -0
  330. package/contracts/accounting/AccountingServiceManager.sol +38 -0
  331. package/contracts/accounting/IAccountingService.sol +45 -0
  332. package/contracts/authorization/AccessAdmin.sol +177 -84
  333. package/contracts/authorization/AccessManagerCloneable.sol +136 -3
  334. package/contracts/authorization/Authorization.sol +277 -229
  335. package/contracts/authorization/IAccessAdmin.sol +13 -7
  336. package/contracts/authorization/IAuthorization.sol +15 -1
  337. package/contracts/distribution/BasicDistribution.sol +6 -6
  338. package/contracts/distribution/BasicDistributionAuthorization.sol +22 -9
  339. package/contracts/distribution/Distribution.sol +32 -30
  340. package/contracts/distribution/DistributionService.sol +36 -34
  341. package/contracts/distribution/DistributionServiceManager.sol +1 -1
  342. package/contracts/distribution/IDistributionService.sol +5 -6
  343. package/contracts/examples/fire/FirePool.sol +22 -5
  344. package/contracts/examples/fire/FirePoolAuthorization.sol +2 -1
  345. package/contracts/examples/fire/FireProduct.sol +31 -8
  346. package/contracts/examples/fire/FireProductAuthorization.sol +2 -1
  347. package/contracts/examples/unpermissioned/SimpleDistribution.sol +7 -0
  348. package/contracts/examples/unpermissioned/SimpleDistributionAuthorization.sol +28 -0
  349. package/contracts/examples/unpermissioned/SimplePool.sol +33 -3
  350. package/contracts/examples/unpermissioned/SimplePoolAuthorization.sol +28 -0
  351. package/contracts/examples/unpermissioned/SimpleProduct.sol +47 -21
  352. package/contracts/instance/BundleSet.sol +42 -38
  353. package/contracts/instance/IInstance.sol +13 -9
  354. package/contracts/instance/IInstanceService.sol +9 -9
  355. package/contracts/instance/Instance.sol +33 -18
  356. package/contracts/instance/InstanceAdmin.sol +247 -84
  357. package/contracts/instance/InstanceAuthorizationV3.sol +50 -31
  358. package/contracts/instance/InstanceReader.sol +162 -32
  359. package/contracts/instance/InstanceService.sol +73 -82
  360. package/contracts/instance/InstanceServiceManager.sol +1 -1
  361. package/contracts/instance/InstanceStore.sol +13 -2
  362. package/contracts/instance/RiskSet.sol +118 -0
  363. package/contracts/instance/base/ObjectCounter.sol +1 -2
  364. package/contracts/instance/base/ObjectLifecycle.sol +4 -2
  365. package/contracts/instance/base/ObjectSet.sol +31 -33
  366. package/contracts/instance/base/ObjectSetHelperLib.sol +30 -0
  367. package/contracts/instance/module/IComponents.sol +4 -4
  368. package/contracts/instance/module/IPolicy.sol +2 -1
  369. package/contracts/instance/module/IRisk.sol +3 -0
  370. package/contracts/oracle/BasicOracleAuthorization.sol +3 -12
  371. package/contracts/oracle/Oracle.sol +1 -1
  372. package/contracts/oracle/OracleService.sol +92 -73
  373. package/contracts/oracle/OracleServiceManager.sol +1 -1
  374. package/contracts/pool/BasicPool.sol +24 -3
  375. package/contracts/pool/BasicPoolAuthorization.sol +27 -8
  376. package/contracts/pool/BundleService.sol +47 -145
  377. package/contracts/pool/BundleServiceManager.sol +1 -1
  378. package/contracts/pool/IBundleService.sol +15 -43
  379. package/contracts/pool/IPoolComponent.sol +1 -7
  380. package/contracts/pool/IPoolService.sol +58 -60
  381. package/contracts/pool/Pool.sol +106 -96
  382. package/contracts/pool/PoolLib.sol +216 -0
  383. package/contracts/pool/PoolService.sol +427 -214
  384. package/contracts/pool/PoolServiceManager.sol +1 -1
  385. package/contracts/product/ApplicationService.sol +15 -15
  386. package/contracts/product/ApplicationServiceManager.sol +1 -1
  387. package/contracts/product/BasicProduct.sol +9 -11
  388. package/contracts/product/BasicProductAuthorization.sol +24 -10
  389. package/contracts/product/ClaimService.sol +157 -137
  390. package/contracts/product/ClaimServiceManager.sol +1 -1
  391. package/contracts/product/IApplicationService.sol +5 -2
  392. package/contracts/product/IClaimService.sol +14 -2
  393. package/contracts/product/IPolicyService.sol +26 -11
  394. package/contracts/product/IProductComponent.sol +4 -1
  395. package/contracts/product/PolicyService.sol +277 -261
  396. package/contracts/product/PolicyServiceLib.sol +65 -0
  397. package/contracts/product/PolicyServiceManager.sol +1 -1
  398. package/contracts/product/PricingService.sol +23 -19
  399. package/contracts/product/PricingServiceManager.sol +3 -3
  400. package/contracts/product/Product.sol +62 -39
  401. package/contracts/product/RiskService.sol +74 -25
  402. package/contracts/product/RiskServiceManager.sol +1 -1
  403. package/contracts/registry/ChainNft.sol +4 -2
  404. package/contracts/registry/IRegistry.sol +10 -15
  405. package/contracts/registry/IRelease.sol +26 -0
  406. package/contracts/registry/Registry.sol +16 -3
  407. package/contracts/registry/RegistryAdmin.sol +132 -226
  408. package/contracts/registry/RegistryService.sol +3 -3
  409. package/contracts/registry/RegistryServiceManager.sol +1 -1
  410. package/contracts/registry/ReleaseAdmin.sol +245 -0
  411. package/contracts/registry/ReleaseLifecycle.sol +2 -0
  412. package/contracts/registry/ReleaseRegistry.sol +129 -119
  413. package/contracts/registry/ServiceAuthorizationV3.sol +93 -40
  414. package/contracts/registry/TokenRegistry.sol +6 -8
  415. package/contracts/shared/Component.sol +61 -105
  416. package/contracts/shared/ComponentService.sol +301 -295
  417. package/contracts/shared/ComponentServiceManager.sol +1 -1
  418. package/contracts/shared/ComponentVerifyingService.sol +16 -14
  419. package/contracts/shared/ContractLib.sol +224 -9
  420. package/contracts/shared/IComponent.sol +4 -17
  421. package/contracts/shared/IComponentService.sol +16 -25
  422. package/contracts/shared/IInstanceLinkedComponent.sol +0 -11
  423. package/contracts/shared/IRegisterable.sol +15 -4
  424. package/contracts/shared/IService.sol +3 -5
  425. package/contracts/shared/InstanceLinkedComponent.sol +4 -20
  426. package/contracts/shared/NftOwnable.sol +4 -4
  427. package/contracts/shared/PolicyHolder.sol +1 -1
  428. package/contracts/shared/Registerable.sol +44 -20
  429. package/contracts/shared/RegistryLinked.sol +7 -13
  430. package/contracts/shared/Service.sol +8 -27
  431. package/contracts/shared/TokenHandler.sol +263 -105
  432. package/contracts/shared/TokenHandlerDeployerLib.sol +10 -2
  433. package/contracts/staking/IStaking.sol +6 -9
  434. package/contracts/staking/IStakingService.sol +11 -1
  435. package/contracts/staking/StakeManagerLib.sol +63 -7
  436. package/contracts/staking/Staking.sol +72 -39
  437. package/contracts/staking/StakingReader.sol +1 -1
  438. package/contracts/staking/StakingService.sol +56 -14
  439. package/contracts/staking/StakingServiceManager.sol +5 -4
  440. package/contracts/type/Key32.sol +2 -2
  441. package/contracts/type/Key32Set.sol +62 -0
  442. package/contracts/type/NftId.sol +6 -0
  443. package/contracts/type/ObjectType.sol +48 -21
  444. package/contracts/type/RiskId.sol +23 -6
  445. package/contracts/type/RoleId.sol +24 -4
  446. package/contracts/type/Selector.sol +5 -0
  447. package/contracts/type/Timestamp.sol +0 -5
  448. package/contracts/type/UFixed.sol +9 -119
  449. package/contracts/type/Version.sol +15 -5
  450. package/contracts/upgradeability/ProxyManager.sol +1 -1
  451. package/package.json +3 -3
  452. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.dbg.json +0 -4
  453. package/artifacts/contracts/authorization/ReleaseAccessManager.sol/ReleaseAccessManager.json +0 -1196
  454. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +0 -4
  455. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +0 -129
  456. package/artifacts/contracts/shared/ComponentServiceHelperLib.sol/ComponentServiceHelperLib.dbg.json +0 -4
  457. package/artifacts/contracts/shared/ComponentServiceHelperLib.sol/ComponentServiceHelperLib.json +0 -206
  458. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +0 -4
  459. package/artifacts/contracts/type/UFixed.sol/MathLib.json +0 -16
  460. package/contracts/authorization/ReleaseAccessManager.sol +0 -38
  461. package/contracts/instance/module/IAccess.sol +0 -46
  462. package/contracts/shared/ComponentServiceHelperLib.sol +0 -118
@@ -1,8 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
4
+ import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
5
6
 
7
+ import {AccessManagerCloneable} from "../authorization/AccessManagerCloneable.sol";
8
+ import {ContractLib} from "../shared/ContractLib.sol";
6
9
  import {NftId, NftIdLib} from "../type/NftId.sol";
7
10
  import {NftOwnable} from "../shared/NftOwnable.sol";
8
11
  import {ObjectType} from "../type/ObjectType.sol";
@@ -10,24 +13,33 @@ import {VersionPart, VersionPartLib} from "../type/Version.sol";
10
13
 
11
14
  import {IRegistry} from "../registry/IRegistry.sol";
12
15
  import {IRegisterable} from "./IRegisterable.sol";
16
+ import {IRelease} from "../registry/IRelease.sol";
13
17
 
14
- contract Registerable is
18
+ abstract contract Registerable is
19
+ AccessManagedUpgradeable,
15
20
  NftOwnable,
16
21
  IRegisterable
17
22
  {
18
- uint256 public constant GIF_RELEASE = 3;
19
-
20
23
  // keccak256(abi.encode(uint256(keccak256("gif-next.contracts.shared.Registerable.sol")) - 1)) & ~bytes32(uint256(0xff));
21
24
  bytes32 public constant REGISTERABLE_LOCATION_V1 = 0x6548007c3f4340f82f348c576c0ff69f4f529cadd5ad41f96aae61abceeaa300;
22
25
 
23
26
  struct RegisterableStorage {
24
27
  NftId _parentNftId;
25
28
  ObjectType _objectType;
29
+ VersionPart _release;
26
30
  bool _isInterceptor;
27
31
  bytes _data;
28
32
  }
29
33
 
30
- function _initializeRegisterable(
34
+ modifier onlyActive() {
35
+ if (!isActive()) {
36
+ revert ErrorRegisterableNotActive();
37
+ }
38
+ _;
39
+ }
40
+
41
+ function __Registerable_init(
42
+ address authority,
31
43
  address registry,
32
44
  NftId parentNftId,
33
45
  ObjectType objectType,
@@ -39,25 +51,34 @@ contract Registerable is
39
51
  virtual
40
52
  onlyInitializing()
41
53
  {
42
- _initializeNftOwnable(
43
- registry,
44
- initialOwner);
45
-
46
- RegisterableStorage storage $;
47
- assembly {
48
- $.slot := REGISTERABLE_LOCATION_V1
54
+ if (!ContractLib.isAuthority(authority)) {
55
+ revert ErrorAuthorityInvalid(authority);
49
56
  }
50
57
 
58
+ __AccessManaged_init(authority);
59
+ __NftOwnable_init(registry, initialOwner);
60
+
61
+ RegisterableStorage storage $ = _getRegisterableStorage();
51
62
  $._parentNftId = parentNftId;
52
63
  $._objectType = objectType;
64
+ $._release = AccessManagerCloneable(authority).getRelease();
53
65
  $._isInterceptor = isInterceptor;
54
66
  $._data = data;
67
+
68
+ _registerInterface(type(IAccessManaged).interfaceId);
55
69
  }
56
70
 
57
71
 
58
72
  /// @inheritdoc IRegisterable
59
- function getRelease() public virtual pure returns (VersionPart release) {
60
- return VersionPartLib.toVersionPart(GIF_RELEASE);
73
+ function isActive() public virtual view returns (bool active) {
74
+ return !AccessManagerCloneable(authority()).isTargetClosed(address(this));
75
+ }
76
+
77
+
78
+ /// @inheritdoc IRelease
79
+ function getRelease() public virtual view returns (VersionPart release) {
80
+ RegisterableStorage storage $ = _getRegisterableStorage();
81
+ return $._release;
61
82
  }
62
83
 
63
84
 
@@ -68,12 +89,8 @@ contract Registerable is
68
89
  virtual
69
90
  returns (IRegistry.ObjectInfo memory info)
70
91
  {
71
- RegisterableStorage storage $;
72
- assembly {
73
- $.slot := REGISTERABLE_LOCATION_V1
74
- }
75
-
76
- info = IRegistry.ObjectInfo(
92
+ RegisterableStorage storage $ = _getRegisterableStorage();
93
+ return IRegistry.ObjectInfo(
77
94
  NftIdLib.zero(),
78
95
  $._parentNftId,
79
96
  $._objectType,
@@ -82,4 +99,11 @@ contract Registerable is
82
99
  getOwner(),
83
100
  $._data);
84
101
  }
102
+
103
+
104
+ function _getRegisterableStorage() private pure returns (RegisterableStorage storage $) {
105
+ assembly {
106
+ $.slot := REGISTERABLE_LOCATION_V1
107
+ }
108
+ }
85
109
  }
@@ -2,6 +2,8 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
5
+
6
+ import {ContractLib} from "../shared/ContractLib.sol";
5
7
  import {IRegistry} from "../registry/IRegistry.sol";
6
8
  import {IRegistryLinked} from "./IRegistryLinked.sol";
7
9
 
@@ -15,26 +17,18 @@ contract RegistryLinked is
15
17
 
16
18
  /// @dev initialization for upgradable contracts
17
19
  // used in _initializeRegisterable
18
- function _initializeRegistryLinked(
19
- address registryAddress
20
+ function __RegistryLinked_init(
21
+ address registry
20
22
  )
21
23
  internal
22
24
  virtual
23
25
  onlyInitializing()
24
26
  {
25
- if (registryAddress.code.length == 0) {
26
- revert ErrorNotRegistry(registryAddress);
27
+ if (!ContractLib.isRegistry(registry)) {
28
+ revert ErrorNotRegistry(registry);
27
29
  }
28
30
 
29
- _registry = IRegistry(registryAddress);
30
-
31
- try _registry.supportsInterface(type(IRegistry).interfaceId) returns (bool isRegistry) {
32
- if (!isRegistry) {
33
- revert ErrorNotRegistry(registryAddress);
34
- }
35
- } catch {
36
- revert ErrorNotRegistry(registryAddress);
37
- }
31
+ _registry = IRegistry(registry);
38
32
  }
39
33
 
40
34
 
@@ -1,7 +1,6 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  pragma solidity ^0.8.20;
3
3
 
4
- import {AccessManagedUpgradeable} from "@openzeppelin/contracts-upgradeable/access/manager/AccessManagedUpgradeable.sol";
5
4
  import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
6
5
  import {ReentrancyGuardUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol";
7
6
 
@@ -19,14 +18,13 @@ import {Versionable} from "../upgradeability/Versionable.sol";
19
18
  abstract contract Service is
20
19
  Registerable,
21
20
  Versionable,
22
- AccessManagedUpgradeable,
23
21
  ReentrancyGuardUpgradeable,
24
22
  IService
25
23
  {
26
24
 
27
- function _initializeService(
28
- address registry,
25
+ function __Service_init(
29
26
  address authority, // real authority for registry service adress(0) for other services
27
+ address registry,
30
28
  address initialOwner
31
29
  )
32
30
  internal
@@ -35,17 +33,8 @@ abstract contract Service is
35
33
  {
36
34
  __ReentrancyGuard_init();
37
35
 
38
- // externally provided authority
39
- if(authority != address(0)) {
40
- __AccessManaged_init(authority);
41
- } else {
42
- address registryServiceAddress = _getServiceAddress(REGISTRY());
43
-
44
- // copy authority from already registered registry services
45
- __AccessManaged_init(IAccessManaged(registryServiceAddress).authority());
46
- }
47
-
48
- _initializeRegisterable(
36
+ __Registerable_init(
37
+ authority,
49
38
  registry,
50
39
  IRegistry(registry).getNftId(),
51
40
  SERVICE(),
@@ -53,8 +42,6 @@ abstract contract Service is
53
42
  initialOwner,
54
43
  ""); // data
55
44
 
56
-
57
- _registerInterface(type(IAccessManaged).interfaceId);
58
45
  _registerInterface(type(IService).interfaceId);
59
46
  }
60
47
 
@@ -62,18 +49,12 @@ abstract contract Service is
62
49
  return _getDomain();
63
50
  }
64
51
 
65
- function getRoleId() external virtual pure returns(RoleId serviceRoleId) {
66
- return RoleIdLib.roleForTypeAndVersion(_getDomain(), getRelease());
52
+ function getVersion() public pure virtual override (IVersionable, Versionable) returns(Version) {
53
+ return VersionLib.toVersion(3, 0, 0);
67
54
  }
68
55
 
69
- /// @inheritdoc IVersionable
70
- function getVersion()
71
- public
72
- pure
73
- virtual override (IVersionable, Versionable)
74
- returns(Version)
75
- {
76
- return VersionLib.toVersion(GIF_RELEASE,0,0);
56
+ function getRoleId() external virtual view returns(RoleId serviceRoleId) {
57
+ return RoleIdLib.roleForTypeAndVersion(_getDomain(), getRelease());
77
58
  }
78
59
 
79
60
  function _getDomain() internal virtual pure returns (ObjectType);
@@ -2,138 +2,194 @@
2
2
  pragma solidity ^0.8.20;
3
3
 
4
4
  import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
5
- import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
6
5
  import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
7
6
  import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
8
7
 
9
- import {Amount} from "../type/Amount.sol";
8
+ import {Amount, AmountLib} from "../type/Amount.sol";
9
+ import {ContractLib} from "../shared/ContractLib.sol";
10
+ import {IRegistry} from "../registry/IRegistry.sol";
11
+ import {NftId} from "../type/NftId.sol";
12
+ import {SERVICE} from "../type/ObjectType.sol";
10
13
 
11
- /// @dev token specific transfer helper
12
- /// a default token contract is provided via contract constructor
13
- /// relies internally on oz SafeERC20.safeTransferFrom
14
- contract TokenHandler is AccessManaged {
15
- using EnumerableSet for EnumerableSet.AddressSet;
16
14
 
17
- error ErrorTokenHandlerAmountIsZero();
15
+ /// @dev Token specific transfer helper base contract.
16
+ /// A default token contract is provided via contract constructor.
17
+ /// Relies internally on OpenZeppelin SafeERC20.safeTransferFrom.
18
+ /// This base contract simplifies writing tests.
19
+ contract TokenHandlerBase {
20
+
21
+ // _setWallet
22
+ event LogTokenHandlerWalletAddressChanged(NftId componentNftId, address oldWallet, address newWallet);
23
+ event LogTokenHandlerWalletTokensTransferred(NftId componentNftId, address oldWallet, address newWallet, Amount amount);
24
+
25
+ // _approveTokenHandler
26
+ event LogTokenHandlerTokenApproved(NftId nftId, address tokenHandler, address token, Amount amount, bool isMaxAmount);
27
+
28
+ // _transfer
29
+ event LogTokenHandlerTokenTransfer(address token, address from, address to, Amount amount);
30
+
31
+ // constructor
32
+ error ErrorTokenHandlerNotRegistry(address registry);
33
+ error ErrorTokenHandlerComponentNotRegistered(address component);
34
+ error ErrorTokenHandlerTokenAddressZero();
35
+
36
+ // _setWallet
37
+ error ErrorTokenHandlerNewWalletAddressZero();
38
+ error ErrorTokenHandlerAddressIsSameAsCurrent();
39
+
40
+ // _approveTokenHandler
41
+ error ErrorTokenHandlerNotWallet(NftId nftId, address tokenHandler, address wallet);
42
+
43
+ // _checkPreconditions
18
44
  error ErrorTokenHandlerBalanceTooLow(address token, address from, uint256 balance, uint256 expectedBalance);
19
45
  error ErrorTokenHandlerAllowanceTooSmall(address token, address from, address spender, uint256 allowance, uint256 expectedAllowance);
20
- error ErrorTokenHandlerRecipientWalletsMustBeDistinct(address to, address to2, address to3);
21
- error ErrorTokenHandlerRecipientNotAllowed(address to);
22
- error ErrorTokenHandlerSenderNotAllowed(address from);
23
-
24
- event LogTokenHandlerTokenTransfer(address token, address from, address to, uint256 amountTransferred);
46
+ error ErrorTokenHandlerAmountIsZero();
25
47
 
26
- IERC20Metadata private _token;
27
- EnumerableSet.AddressSet private _allowedTargets;
48
+ IRegistry public immutable REGISTRY;
49
+ IERC20Metadata public immutable TOKEN;
50
+ address public immutable COMPONENT;
51
+ NftId public immutable NFT_ID;
28
52
 
53
+ address internal _wallet;
29
54
 
30
- constructor(address token, address initialAuthority, address initialAllowedWallet) AccessManaged(initialAuthority) {
31
- _token = IERC20Metadata(token);
32
- if (initialAllowedWallet != address(0)) {
33
- _allowedTargets.add(initialAllowedWallet);
55
+ constructor(
56
+ address registry,
57
+ address component,
58
+ address token
59
+ )
60
+ {
61
+ if (!ContractLib.isRegistry(registry)) {
62
+ revert ErrorTokenHandlerNotRegistry(registry);
34
63
  }
35
- }
36
64
 
37
- function addAllowedTarget(address target)
38
- external
39
- restricted()
40
- {
41
- _allowedTargets.add(target);
65
+ if (token == address(0)) {
66
+ revert ErrorTokenHandlerTokenAddressZero();
67
+ }
68
+
69
+ REGISTRY = IRegistry(registry);
70
+ COMPONENT = component;
71
+ NFT_ID = REGISTRY.getNftIdForAddress(component);
72
+
73
+ if (NFT_ID.eqz()) {
74
+ revert ErrorTokenHandlerComponentNotRegistered(component);
75
+ }
76
+
77
+ TOKEN = IERC20Metadata(token);
78
+
79
+ // self approval of token handler to max amount
80
+ _approve(TOKEN, AmountLib.max());
42
81
  }
43
82
 
44
- function removeAllowedTarget(address target)
83
+
84
+ /// @dev Checks the balance and allowance for the from address and amount.
85
+ /// When requiring amount > 0 set checkAmount to true.
86
+ function checkBalanceAndAllowance(
87
+ address from,
88
+ Amount amount,
89
+ bool checkAmount
90
+ )
45
91
  external
46
- restricted()
92
+ view
47
93
  {
48
- _allowedTargets.remove(target);
94
+ _checkBalanceAndAllowance(from, amount, checkAmount);
49
95
  }
50
96
 
51
- /// @dev returns the default token defined for this TokenHandler
52
- function getToken()
53
- external
97
+
98
+ /// @dev Returns the wallet linked to this TokenHandler.
99
+ function getWallet()
100
+ public
54
101
  view
55
- returns (IERC20Metadata)
102
+ returns (address wallet)
56
103
  {
57
- return _token;
104
+ if (_wallet == address(0)) {
105
+ return address(this);
106
+ }
107
+
108
+ return _wallet;
58
109
  }
59
-
60
- /// @dev collect tokens from outside of the gif and transfer them to one wallet within the scope of gif.
61
- /// This method also checks balance and allowance and makes sure the amount is greater than zero.
62
- function collectTokens(
63
- address from,
64
- address to,
110
+
111
+
112
+ /// @dev Approves token handler to spend up to the specified amount of tokens.
113
+ /// Sets spending limit to type(uint256).max for AmountLib.max().
114
+ /// Reverts if wallet is not token handler itself.
115
+ /// Sets approvel using SareERC20.forceApprove internally.
116
+ function _approve(
117
+ IERC20Metadata token,
65
118
  Amount amount
66
119
  )
67
- external
68
- restricted()
120
+ internal
69
121
  {
70
- if (_allowedTargets.length() > 0 && ! _allowedTargets.contains(to)) {
71
- revert ErrorTokenHandlerRecipientNotAllowed(to);
122
+ // check that wallet is token handler contract itself
123
+ if(_wallet != address(0)) {
124
+ revert ErrorTokenHandlerNotWallet(NFT_ID, address(this), _wallet);
125
+ }
126
+
127
+ // update spending limit for AmountLib.max() to type(uint256).max
128
+ uint256 amountInt = amount.toInt();
129
+ bool isMaxAmount = false;
130
+ if (amount == AmountLib.max()) {
131
+ amountInt = type(uint256).max;
132
+ isMaxAmount = true;
72
133
  }
73
- _transfer(from, to, amount, true);
134
+
135
+ emit LogTokenHandlerTokenApproved(NFT_ID, address(this), address(token), amount, isMaxAmount);
136
+
137
+ // execute approval
138
+ SafeERC20.forceApprove(
139
+ token,
140
+ address(this),
141
+ amountInt);
74
142
  }
75
143
 
76
- /// @dev collect tokens from outside of the gif and transfer them to three distinct wallets within the scope of gif
77
- /// This method also checks balance and allowance and makes sure the amount is greater than zero.
78
- function collectTokensToThreeRecipients(
79
- address from,
80
- address to,
81
- Amount amount,
82
- address to2,
83
- Amount amount2,
84
- address to3,
85
- Amount amount3
86
- )
87
- external
88
- restricted()
144
+
145
+ function _setWallet(address newWallet)
146
+ internal
89
147
  {
90
- if (to == to2 || to == to3 || to2 == to3) {
91
- revert ErrorTokenHandlerRecipientWalletsMustBeDistinct(to, to2, to3);
148
+ address oldWallet = _wallet;
149
+ if (newWallet == oldWallet) {
150
+ revert ErrorTokenHandlerAddressIsSameAsCurrent();
92
151
  }
93
152
 
94
- _checkPreconditions(from, amount + amount2 + amount3);
153
+ // effects
154
+ address oldWalletForBalance = getWallet();
155
+ _wallet = newWallet;
95
156
 
96
- if(_allowedTargets.length() > 0) {
97
- if (amount.gtz() && ! _allowedTargets.contains(to)) {
98
- revert ErrorTokenHandlerRecipientNotAllowed(to);
99
- }
100
- if (amount2.gtz() && ! _allowedTargets.contains(to2)) {
101
- revert ErrorTokenHandlerRecipientNotAllowed(to2);
102
- }
103
- if (amount3.gtz() && ! _allowedTargets.contains(to3)) {
104
- revert ErrorTokenHandlerRecipientNotAllowed(to3);
105
- }
106
- }
157
+ emit LogTokenHandlerWalletAddressChanged(NFT_ID, oldWallet, newWallet);
107
158
 
159
+ // interactions
160
+ Amount balanceAmount = AmountLib.toAmount(
161
+ TOKEN.balanceOf(oldWalletForBalance));
108
162
 
109
- if (amount.gtz()) {
110
- _transfer(from, to, amount, false);
111
- }
112
- if (amount2.gtz()) {
113
- _transfer(from, to2, amount2, false);
114
- }
115
- if (amount3.gtz()) {
116
- _transfer(from, to3, amount3, false);
163
+ if (balanceAmount.gtz()) {
164
+ // move tokens from old to new wallet
165
+ emit LogTokenHandlerWalletTokensTransferred(NFT_ID, oldWallet, newWallet, balanceAmount);
166
+
167
+ if (oldWallet == address(0)) {
168
+ // transfer from the component requires an allowance
169
+ _transfer(address(this), newWallet, balanceAmount, true);
170
+ } else if (newWallet == address(0)) {
171
+ _transfer(oldWallet, address(this), balanceAmount, true);
172
+ } else {
173
+ _transfer(oldWallet, newWallet, balanceAmount, true);
174
+ }
117
175
  }
118
176
  }
119
177
 
120
- /// @dev distribute tokens from a wallet within the scope of gif to an external address.
121
- /// This method also checks balance and allowance and makes sure the amount is greater than zero.
122
- function distributeTokens(
123
- address from,
124
- address to,
125
- Amount amount
126
- )
127
- external
128
- restricted()
178
+
179
+ function _pullToken(address from, Amount amount)
180
+ internal
129
181
  {
130
- if (_allowedTargets.length() > 0 && ! _allowedTargets.contains(from)) {
131
- revert ErrorTokenHandlerSenderNotAllowed(from);
132
- }
182
+ _transfer(from, getWallet(), amount, true);
183
+ }
184
+
133
185
 
134
- _transfer(from, to, amount, true);
186
+ function _pushToken(address to, Amount amount)
187
+ internal
188
+ {
189
+ _transfer(getWallet(), to, amount, true);
135
190
  }
136
191
 
192
+
137
193
  function _transfer(
138
194
  address from,
139
195
  address to,
@@ -143,41 +199,143 @@ contract TokenHandler is AccessManaged {
143
199
  internal
144
200
  {
145
201
  if (checkPreconditions) {
146
- // check amount > 0, balance >= amount and allowance >= amount
147
- _checkPreconditions(from, amount);
202
+ bool checkAmount = true;
203
+ _checkBalanceAndAllowance(from, amount, checkAmount);
148
204
  }
149
205
 
150
206
  // transfer the tokens
151
- emit LogTokenHandlerTokenTransfer(address(_token), from, to, amount.toInt());
207
+ emit LogTokenHandlerTokenTransfer(address(TOKEN), from, to, amount);
208
+
152
209
  SafeERC20.safeTransferFrom(
153
- _token,
210
+ TOKEN,
154
211
  from,
155
212
  to,
156
213
  amount.toInt());
157
214
  }
158
215
 
159
- function _checkPreconditions(
216
+
217
+ function _checkBalanceAndAllowance(
160
218
  address from,
161
- Amount amount
219
+ Amount amount,
220
+ bool checkAmount
162
221
  )
163
222
  internal
164
223
  view
165
224
  {
166
225
  // amount must be greater than zero
167
- if (amount.eqz()) {
226
+ if (checkAmount && amount.eqz()) {
168
227
  revert ErrorTokenHandlerAmountIsZero();
169
228
  }
170
229
 
230
+ // allowance must be >= amount
231
+ uint256 allowance = TOKEN.allowance(from, address(this));
232
+ if (allowance < amount.toInt()) {
233
+ revert ErrorTokenHandlerAllowanceTooSmall(address(TOKEN), from, address(this), allowance, amount.toInt());
234
+ }
235
+
171
236
  // balance must be >= amount
172
- uint256 balance = _token.balanceOf(from);
237
+ uint256 balance = TOKEN.balanceOf(from);
173
238
  if (balance < amount.toInt()) {
174
- revert ErrorTokenHandlerBalanceTooLow(address(_token), from, balance, amount.toInt());
239
+ revert ErrorTokenHandlerBalanceTooLow(address(TOKEN), from, balance, amount.toInt());
175
240
  }
241
+ }
242
+ }
176
243
 
177
- // allowance must be >= amount
178
- uint256 allowance = _token.allowance(from, address(this));
179
- if (allowance < amount.toInt()) {
180
- revert ErrorTokenHandlerAllowanceTooSmall(address(_token), from, address(this), allowance, amount.toInt());
244
+
245
+ /// @dev Token specific transfer helper.
246
+ /// Contract is derived from TokenHandlerBase and adds
247
+ /// authorization based on OpenZeppelin AccessManaged.
248
+ contract TokenHandler is
249
+ AccessManaged,
250
+ TokenHandlerBase
251
+ {
252
+
253
+ // onlyService
254
+ error ErrorTokenHandlerNotService(address service);
255
+
256
+ modifier onlyService() {
257
+ if (!REGISTRY.isObjectType(msg.sender, SERVICE())) {
258
+ revert ErrorTokenHandlerNotService(msg.sender);
181
259
  }
260
+ _;
261
+ }
262
+
263
+ constructor(
264
+ address registry,
265
+ address component,
266
+ address token,
267
+ address authority
268
+ )
269
+ TokenHandlerBase(registry, component, token)
270
+ AccessManaged(authority)
271
+ { }
272
+
273
+ /// @dev sets the wallet address for the component.
274
+ /// if the current wallet has tokens, these will be transferred.
275
+ /// if the new wallet address is externally owned, an approval from the
276
+ /// owner of the external wallet to the tokenhandler of the component that
277
+ /// covers the current component balance must exist
278
+ function setWallet(address newWallet)
279
+ external
280
+ restricted()
281
+ onlyService()
282
+ {
283
+ _setWallet(newWallet);
284
+ }
285
+
286
+
287
+ /// @dev Approves token handler to spend up to the specified amount of tokens.
288
+ /// Sets spending limit to type(uint256).max for AmountLib.max().
289
+ /// Reverts if component wallet is not component itself.
290
+ /// Sets approvel using SareERC20.forceApprove internally.
291
+ function approve(
292
+ IERC20Metadata token,
293
+ Amount amount
294
+ )
295
+ external
296
+ restricted()
297
+ onlyService()
298
+ {
299
+ _approve(token, amount);
300
+ }
301
+
302
+ /// @dev Collect tokens from outside of GIF and transfer them to the wallet.
303
+ /// This method also checks balance and allowance and makes sure the amount is greater than zero.
304
+ function pullToken(
305
+ address from,
306
+ Amount amount
307
+ )
308
+ external
309
+ restricted()
310
+ onlyService()
311
+ {
312
+ _pullToken(from, amount);
313
+ }
314
+
315
+
316
+ /// @dev Distribute tokens from a wallet within the scope of gif to some address.
317
+ function pushToken(
318
+ address to,
319
+ Amount amount
320
+ )
321
+ external
322
+ restricted()
323
+ onlyService()
324
+ {
325
+ _pushToken(to, amount);
326
+ }
327
+
328
+
329
+ /// @dev Distribute fee tokens from a wallet within the scope of gif to some address.
330
+ /// Separate push function for component service.
331
+ function pushFeeToken(
332
+ address to,
333
+ Amount amount
334
+ )
335
+ external
336
+ restricted()
337
+ onlyService()
338
+ {
339
+ _pushToken(to, amount);
182
340
  }
183
341
  }