@etherisc/gif-next 0.0.2-d408403-475 → 0.0.2-d60aa51-726
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.
- package/README.md +231 -27
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +302 -23
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +393 -54
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +217 -23
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -188
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +15 -227
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -213
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +460 -99
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +491 -80
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +775 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +859 -1168
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceBase.sol/IInstanceBase.json +448 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +485 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2411 -1253
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +940 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.json +763 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +970 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +512 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +272 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +276 -36
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{distribution/IDistribution.sol → IDistribution.sol}/IDistribution.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{risk/IRisk.sol → IRisk.sol}/IRisk.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
- package/artifacts/contracts/instance/{base/ModuleBase.sol/ModuleBase.json → module/ISetup.sol/ISetup.json} +2 -2
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +375 -79
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +349 -53
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +177 -75
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +174 -53
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +337 -49
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +219 -89
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +559 -53
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +464 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +409 -120
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +377 -37
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +947 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +487 -123
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1293 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +517 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
- package/artifacts/contracts/{instance/module/component/ComponentModule.sol/ComponentModule.json → shared/INftOwnable.sol/INftOwnable.json} +67 -57
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/IService.sol/IService.json} +168 -123
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -14
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/IService.sol/IService.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +215 -73
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +222 -54
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -14
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +14 -14
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +283 -62
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +31 -17
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +134 -8
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/BaseComponent.sol +75 -37
- package/contracts/components/Distribution.sol +49 -18
- package/contracts/components/IBaseComponent.sol +15 -3
- package/contracts/components/IDistributionComponent.sol +3 -7
- package/contracts/components/IPoolComponent.sol +7 -12
- package/contracts/components/IProductComponent.sol +4 -7
- package/contracts/components/Pool.sol +111 -79
- package/contracts/components/Product.sol +110 -48
- package/contracts/experiment/cloning/Cloner.sol +47 -0
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +23 -0
- package/contracts/instance/BundleManager.sol +129 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IAccessManagerSimple.sol +391 -0
- package/contracts/instance/IInstance.sol +48 -45
- package/contracts/instance/IInstanceBase.sol +26 -0
- package/contracts/instance/IInstanceService.sol +32 -0
- package/contracts/instance/Instance.sol +436 -57
- package/contracts/instance/InstanceAccessManager.sol +288 -0
- package/contracts/instance/InstanceBase.sol +41 -0
- package/contracts/instance/InstanceReader.sol +315 -0
- package/contracts/instance/InstanceService.sol +233 -0
- package/contracts/instance/InstanceServiceManager.sol +57 -0
- package/contracts/instance/ObjectManager.sol +95 -0
- package/contracts/instance/base/ComponentServiceBase.sol +102 -10
- package/contracts/instance/base/IInstanceBase.sol +3 -2
- package/contracts/instance/base/IKeyValueStore.sol +13 -14
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +49 -38
- package/contracts/instance/base/Lifecycle.sol +1 -1
- package/contracts/instance/module/IAccess.sol +38 -0
- package/contracts/instance/module/IBundle.sol +20 -0
- package/contracts/instance/module/IDistribution.sol +39 -0
- package/contracts/instance/module/IPolicy.sol +45 -0
- package/contracts/instance/module/IRisk.sol +11 -0
- package/contracts/instance/module/ISetup.sol +46 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/ComponentOwnerService.sol +232 -72
- package/contracts/instance/service/DistributionService.sol +49 -20
- package/contracts/instance/service/DistributionServiceManager.sol +54 -0
- package/contracts/instance/service/IComponentOwnerService.sol +1 -3
- package/contracts/instance/service/IDistributionService.sol +1 -1
- package/contracts/instance/service/IPoolService.sol +17 -3
- package/contracts/instance/service/IProductService.sol +9 -6
- package/contracts/instance/service/PoolService.sol +190 -52
- package/contracts/instance/service/PoolServiceManager.sol +54 -0
- package/contracts/instance/service/ProductService.sol +195 -134
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +80 -37
- package/contracts/registry/IRegistry.sol +49 -25
- package/contracts/registry/IRegistryService.sol +50 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +336 -270
- package/contracts/registry/RegistryService.sol +358 -0
- package/contracts/registry/RegistryServiceManager.sol +80 -0
- package/contracts/registry/TokenRegistry.sol +111 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +6 -2
- package/contracts/shared/INftOwnable.sol +22 -0
- package/contracts/shared/IRegisterable.sol +8 -15
- package/contracts/{instance/base → shared}/IService.sol +3 -3
- package/contracts/shared/IVersionable.sol +55 -11
- package/contracts/shared/NftOwnable.sol +134 -0
- package/contracts/shared/ProxyManager.sol +94 -0
- package/contracts/shared/Registerable.sol +63 -59
- package/contracts/shared/RegisterableUpgradable.sol +16 -0
- package/contracts/shared/Service.sol +55 -0
- package/contracts/shared/TokenHandler.sol +27 -0
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +113 -55
- package/contracts/test/TestFee.sol +2 -2
- package/contracts/test/TestRegisterable.sol +5 -6
- package/contracts/test/TestRoleId.sol +1 -1
- package/contracts/test/TestService.sol +5 -13
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +3 -3
- package/contracts/types/Key32.sol +8 -3
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +35 -14
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RoleId.sol +61 -9
- package/contracts/types/StateId.sol +5 -1
- package/contracts/types/Timestamp.sol +7 -3
- package/contracts/types/UFixed.sol +128 -12
- package/contracts/types/Version.sol +13 -1
- package/package.json +4 -3
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -297
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -297
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -117
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +0 -10
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.json +0 -10
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -284
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -284
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.json +0 -10
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -144
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -144
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +0 -113
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -131
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -511
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -511
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.dbg.json +0 -4
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +0 -405
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -578
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -575
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +0 -4
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +0 -99
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
- package/contracts/experiment/statemachine/README.md +0 -112
- package/contracts/instance/IInstanceLinked.sol +0 -8
- package/contracts/instance/base/InstanceBase.sol +0 -91
- package/contracts/instance/base/ModuleBase.sol +0 -57
- package/contracts/instance/base/ServiceBase.sol +0 -37
- package/contracts/instance/module/access/Access.sol +0 -149
- package/contracts/instance/module/access/IAccess.sol +0 -53
- package/contracts/instance/module/bundle/BundleModule.sol +0 -134
- package/contracts/instance/module/bundle/IBundle.sol +0 -53
- package/contracts/instance/module/component/ComponentModule.sol +0 -70
- package/contracts/instance/module/component/IComponent.sol +0 -28
- package/contracts/instance/module/distribution/DistributionModule.sol +0 -17
- package/contracts/instance/module/distribution/IDistribution.sol +0 -10
- package/contracts/instance/module/policy/IPolicy.sol +0 -63
- package/contracts/instance/module/policy/PolicyModule.sol +0 -91
- package/contracts/instance/module/pool/IPoolModule.sol +0 -40
- package/contracts/instance/module/pool/PoolModule.sol +0 -90
- package/contracts/instance/module/risk/IRisk.sol +0 -26
- package/contracts/instance/module/risk/RiskModule.sol +0 -62
- package/contracts/instance/module/treasury/ITreasury.sol +0 -82
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -138
- package/contracts/registry/IChainNft.sol +0 -21
- package/contracts/registry/IRegistryLinked.sol +0 -8
- package/contracts/shared/IOwnable.sol +0 -6
- package/contracts/test/TestDistribution.sol +0 -21
- package/contracts/test/TestPool.sol +0 -25
- package/contracts/test/TestProduct.sol +0 -72
- package/contracts/types/ReferralId.sol +0 -48
@@ -3,33 +3,43 @@ pragma solidity ^0.8.19;
|
|
3
3
|
|
4
4
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
5
|
import {IProductComponent} from "../../components/IProductComponent.sol";
|
6
|
+
import {Product} from "../../components/Product.sol";
|
6
7
|
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
7
8
|
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
8
|
-
import {IInstance} from "
|
9
|
-
import {IPolicy
|
10
|
-
import {
|
11
|
-
import {
|
12
|
-
import {IBundle} from "../module/bundle/IBundle.sol";
|
9
|
+
import {IInstance} from "../IInstance.sol";
|
10
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
11
|
+
import {IRisk} from "../module/IRisk.sol";
|
12
|
+
import {IBundle} from "../module/IBundle.sol";
|
13
13
|
import {IProductService} from "./IProductService.sol";
|
14
|
-
import {ITreasury
|
14
|
+
import {ITreasury} from "../module/ITreasury.sol";
|
15
|
+
import {ISetup} from "../module/ISetup.sol";
|
16
|
+
|
17
|
+
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
15
18
|
|
16
19
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
17
20
|
import {Versionable} from "../../shared/Versionable.sol";
|
18
21
|
|
19
22
|
import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
|
20
|
-
import {UFixed,
|
23
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
21
24
|
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
22
25
|
import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
|
23
|
-
import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
|
24
|
-
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
26
|
+
import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
|
27
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
25
28
|
import {Fee, FeeLib} from "../../types/Fee.sol";
|
26
|
-
import {ReferralId} from "../../types/
|
29
|
+
import {ReferralId} from "../../types/Referral.sol";
|
27
30
|
import {RiskId} from "../../types/RiskId.sol";
|
28
31
|
import {StateId} from "../../types/StateId.sol";
|
29
32
|
import {Version, VersionLib} from "../../types/Version.sol";
|
30
33
|
|
34
|
+
import {IService} from "../../shared/IService.sol";
|
35
|
+
import {Service} from "../../shared/Service.sol";
|
31
36
|
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
32
37
|
import {IProductService} from "./IProductService.sol";
|
38
|
+
import {InstanceReader} from "../InstanceReader.sol";
|
39
|
+
import {IPoolService} from "./PoolService.sol";
|
40
|
+
import {POOL_SERVICE_NAME} from "./PoolService.sol";
|
41
|
+
|
42
|
+
string constant PRODUCT_SERVICE_NAME = "ProductService";
|
33
43
|
|
34
44
|
// TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
|
35
45
|
contract ProductService is ComponentServiceBase, IProductService {
|
@@ -37,29 +47,43 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
37
47
|
|
38
48
|
string public constant NAME = "ProductService";
|
39
49
|
|
50
|
+
address internal _registryAddress;
|
51
|
+
IPoolService internal _poolService;
|
52
|
+
|
40
53
|
event LogProductServiceSender(address sender);
|
41
54
|
|
42
|
-
|
43
|
-
address
|
44
|
-
|
45
|
-
)
|
55
|
+
function _initialize(
|
56
|
+
address owner,
|
57
|
+
bytes memory data
|
58
|
+
)
|
59
|
+
internal
|
60
|
+
initializer
|
61
|
+
virtual override
|
46
62
|
{
|
63
|
+
address initialOwner = address(0);
|
64
|
+
(_registryAddress, initialOwner) = abi.decode(data, (address, address));
|
65
|
+
|
66
|
+
_initializeService(_registryAddress, owner);
|
67
|
+
|
68
|
+
_poolService = IPoolService(_registry.getServiceAddress(POOL_SERVICE_NAME, getMajorVersion()));
|
69
|
+
|
70
|
+
_registerInterface(type(IService).interfaceId);
|
47
71
|
_registerInterface(type(IProductService).interfaceId);
|
48
72
|
}
|
49
73
|
|
50
|
-
function getVersion()
|
51
|
-
public
|
52
|
-
pure
|
53
|
-
virtual override (IVersionable, Versionable)
|
54
|
-
returns(Version)
|
55
|
-
{
|
56
|
-
return VersionLib.toVersion(3,0,0);
|
57
|
-
}
|
58
74
|
|
59
|
-
function getName()
|
75
|
+
function getName() public pure override(IService, Service) returns(string memory name) {
|
60
76
|
return NAME;
|
61
77
|
}
|
62
78
|
|
79
|
+
function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal override {
|
80
|
+
ISetup.ProductSetupInfo memory initialSetup = abi.decode(
|
81
|
+
initialObjData,
|
82
|
+
(ISetup.ProductSetupInfo)
|
83
|
+
);
|
84
|
+
instance.createProductSetup(componentNftId, initialSetup);
|
85
|
+
}
|
86
|
+
|
63
87
|
function setFees(
|
64
88
|
Fee memory productFee,
|
65
89
|
Fee memory processingFee
|
@@ -68,11 +92,14 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
68
92
|
override
|
69
93
|
{
|
70
94
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
95
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
71
96
|
NftId productNftId = productInfo.nftId;
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
97
|
+
|
98
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
99
|
+
productSetupInfo.productFee = productFee;
|
100
|
+
productSetupInfo.processingFee = processingFee;
|
101
|
+
|
102
|
+
instance.updateProductSetup(productNftId, productSetupInfo, KEEP_STATE());
|
76
103
|
}
|
77
104
|
|
78
105
|
function createRisk(
|
@@ -81,22 +108,22 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
81
108
|
) external override {
|
82
109
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
83
110
|
NftId productNftId = productInfo.nftId;
|
111
|
+
IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo(productNftId, data);
|
84
112
|
instance.createRisk(
|
85
113
|
riskId,
|
86
|
-
|
87
|
-
data
|
114
|
+
riskInfo
|
88
115
|
);
|
89
116
|
}
|
90
117
|
|
91
|
-
function
|
118
|
+
function updateRisk(
|
92
119
|
RiskId riskId,
|
93
|
-
|
120
|
+
bytes memory data
|
94
121
|
) external {
|
95
122
|
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
96
|
-
instance.
|
97
|
-
|
98
|
-
|
99
|
-
);
|
123
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
124
|
+
IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
|
125
|
+
riskInfo.data = data;
|
126
|
+
instance.updateRisk(riskId, riskInfo, KEEP_STATE());
|
100
127
|
}
|
101
128
|
|
102
129
|
function updateRiskState(
|
@@ -104,16 +131,13 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
104
131
|
StateId state
|
105
132
|
) external {
|
106
133
|
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
107
|
-
instance.updateRiskState(
|
108
|
-
riskId,
|
109
|
-
state
|
110
|
-
);
|
134
|
+
instance.updateRiskState(riskId, state);
|
111
135
|
}
|
112
136
|
|
113
|
-
function _getAndVerifyInstanceAndProduct() internal view returns (
|
137
|
+
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
114
138
|
IRegistry.ObjectInfo memory productInfo;
|
115
139
|
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
116
|
-
product =
|
140
|
+
product = Product(productInfo.objectAddress);
|
117
141
|
}
|
118
142
|
|
119
143
|
function calculatePremium(
|
@@ -135,7 +159,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
135
159
|
uint256 distributionFeeAmount
|
136
160
|
)
|
137
161
|
{
|
138
|
-
|
162
|
+
Product product = _getAndVerifyInstanceAndProduct();
|
139
163
|
uint256 netPremiumAmount = product.calculateNetPremium(
|
140
164
|
sumInsuredAmount,
|
141
165
|
riskId,
|
@@ -162,7 +186,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
162
186
|
|
163
187
|
function _calculateFeeAmounts(
|
164
188
|
uint256 netPremiumAmount,
|
165
|
-
|
189
|
+
Product product,
|
166
190
|
NftId bundleNftId,
|
167
191
|
ReferralId referralId
|
168
192
|
)
|
@@ -175,18 +199,31 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
175
199
|
uint256 distributionFeeAmount
|
176
200
|
)
|
177
201
|
{
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
202
|
+
InstanceReader instanceReader;
|
203
|
+
{
|
204
|
+
IInstance instance = product.getInstance();
|
205
|
+
instanceReader = instance.getInstanceReader();
|
206
|
+
}
|
207
|
+
|
208
|
+
NftId poolNftId = product.getPoolNftId();
|
209
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
210
|
+
require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
|
182
211
|
|
183
|
-
|
184
|
-
|
212
|
+
{
|
213
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
|
214
|
+
(productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
215
|
+
}
|
216
|
+
{
|
217
|
+
ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
218
|
+
(poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
|
219
|
+
}
|
220
|
+
{
|
221
|
+
NftId distributionNftId = product.getDistributionNftId();
|
222
|
+
ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
223
|
+
(distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
|
224
|
+
}
|
225
|
+
|
185
226
|
(bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
|
186
|
-
|
187
|
-
IRegistry.ObjectInfo memory distributionInfo = _registry.getObjectInfo(treasuryInfo.distributionNftId);
|
188
|
-
IDistributionComponent distribution = IDistributionComponent(distributionInfo.objectAddress);
|
189
|
-
distributionFeeAmount = distribution.calculateFeeAmount(referralId, netPremiumAmount);
|
190
227
|
}
|
191
228
|
|
192
229
|
|
@@ -202,11 +239,16 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
202
239
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
203
240
|
// TODO add validations (see create bundle in pool service)
|
204
241
|
|
205
|
-
policyNftId =
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
242
|
+
policyNftId = getRegistryService().registerPolicy(
|
243
|
+
IRegistry.ObjectInfo(
|
244
|
+
zeroNftId(),
|
245
|
+
productInfo.nftId,
|
246
|
+
POLICY(),
|
247
|
+
false, // intercepting property for policies is defined on product
|
248
|
+
address(0),
|
249
|
+
applicationOwner,
|
250
|
+
""
|
251
|
+
)
|
210
252
|
);
|
211
253
|
|
212
254
|
(uint256 premiumAmount,,,,) = calculatePremium(
|
@@ -218,42 +260,53 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
218
260
|
referralId
|
219
261
|
);
|
220
262
|
|
221
|
-
|
222
|
-
policyNftId,
|
263
|
+
IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
|
223
264
|
productInfo.nftId,
|
265
|
+
bundleNftId,
|
224
266
|
referralId,
|
225
267
|
riskId,
|
226
268
|
sumInsuredAmount,
|
227
269
|
premiumAmount,
|
270
|
+
0,
|
228
271
|
lifetime,
|
229
|
-
|
272
|
+
applicationData,
|
273
|
+
"",
|
274
|
+
0,
|
275
|
+
0,
|
276
|
+
0,
|
277
|
+
zeroTimestamp(),
|
278
|
+
zeroTimestamp(),
|
279
|
+
zeroTimestamp()
|
230
280
|
);
|
281
|
+
|
282
|
+
instance.createPolicy(policyNftId, policyInfo);
|
283
|
+
instance.updatePolicyState(policyNftId, APPLIED());
|
231
284
|
|
232
285
|
// TODO add logging
|
233
286
|
}
|
234
287
|
|
235
288
|
function _getAndVerifyUnderwritingSetup(
|
236
289
|
IInstance instance,
|
237
|
-
|
290
|
+
InstanceReader instanceReader,
|
291
|
+
IPolicy.PolicyInfo memory policyInfo,
|
292
|
+
ISetup.ProductSetupInfo memory productSetupInfo
|
238
293
|
)
|
239
294
|
internal
|
240
295
|
view
|
241
296
|
returns (
|
242
|
-
ITreasury.TreasuryInfo memory treasuryInfo,
|
243
297
|
NftId bundleNftId,
|
244
298
|
IBundle.BundleInfo memory bundleInfo,
|
245
299
|
uint256 collateralAmount
|
246
300
|
)
|
247
301
|
{
|
248
302
|
// check match between policy and bundle (via pool)
|
249
|
-
treasuryInfo = instance.getTreasuryInfo(policyInfo.productNftId);
|
250
303
|
bundleNftId = policyInfo.bundleNftId;
|
251
|
-
bundleInfo =
|
252
|
-
require(bundleInfo.poolNftId ==
|
304
|
+
bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
305
|
+
require(bundleInfo.poolNftId == productSetupInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
|
253
306
|
|
254
307
|
// calculate required collateral
|
255
|
-
NftId poolNftId =
|
256
|
-
|
308
|
+
NftId poolNftId = productSetupInfo.poolNftId;
|
309
|
+
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
257
310
|
|
258
311
|
// obtain remaining return values
|
259
312
|
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
@@ -270,12 +323,12 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
270
323
|
returns (IBundle.BundleInfo memory)
|
271
324
|
{
|
272
325
|
bundleInfo.lockedAmount += collateralAmount;
|
273
|
-
|
326
|
+
// TODO: track policy associated to bundle in bundlemanager (tbd) and how much is locked for it
|
274
327
|
return bundleInfo;
|
275
328
|
}
|
276
329
|
|
277
330
|
function _underwriteByPool(
|
278
|
-
|
331
|
+
NftId poolNftId,
|
279
332
|
NftId policyNftId,
|
280
333
|
IPolicy.PolicyInfo memory policyInfo,
|
281
334
|
bytes memory bundleFilter,
|
@@ -283,7 +336,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
283
336
|
)
|
284
337
|
internal
|
285
338
|
{
|
286
|
-
address poolAddress =
|
339
|
+
address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
|
287
340
|
IPoolComponent pool = IPoolComponent(poolAddress);
|
288
341
|
pool.underwrite(
|
289
342
|
policyNftId,
|
@@ -316,28 +369,43 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
316
369
|
IRegistry.ObjectInfo memory productInfo,
|
317
370
|
IInstance instance
|
318
371
|
) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
372
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
319
373
|
|
320
374
|
// check match between policy and calling product
|
321
375
|
NftId productNftId = productInfo.nftId;
|
322
|
-
IPolicy.PolicyInfo memory policyInfo =
|
376
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
323
377
|
require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
324
|
-
require(
|
378
|
+
require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
325
379
|
|
326
|
-
ITreasury.TreasuryInfo memory treasuryInfo;
|
327
380
|
NftId bundleNftId;
|
328
381
|
IBundle.BundleInfo memory bundleInfo;
|
329
382
|
uint256 collateralAmount;
|
383
|
+
uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
|
384
|
+
{
|
385
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
386
|
+
IBundle.BundleInfo memory bundleInfo;
|
387
|
+
|
388
|
+
(
|
389
|
+
bundleNftId,
|
390
|
+
bundleInfo,
|
391
|
+
collateralAmount
|
392
|
+
) = _getAndVerifyUnderwritingSetup(
|
393
|
+
instance,
|
394
|
+
instanceReader,
|
395
|
+
policyInfo,
|
396
|
+
productSetupInfo
|
397
|
+
);
|
398
|
+
}
|
330
399
|
|
331
|
-
|
332
|
-
|
400
|
+
|
401
|
+
// lock bundle collateral
|
402
|
+
bundleInfo = _lockCollateralInBundle(
|
403
|
+
instance,
|
333
404
|
bundleNftId,
|
334
405
|
bundleInfo,
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
policyInfo
|
339
|
-
);
|
340
|
-
|
406
|
+
policyNftId,
|
407
|
+
collateralAmount);
|
408
|
+
|
341
409
|
// lock bundle collateral
|
342
410
|
bundleInfo = _lockCollateralInBundle(
|
343
411
|
instance,
|
@@ -345,42 +413,36 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
345
413
|
bundleInfo,
|
346
414
|
policyNftId,
|
347
415
|
collateralAmount);
|
348
|
-
|
349
|
-
|
350
|
-
instance.updatePolicyState(policyNftId, UNDERWRITTEN());
|
351
|
-
|
416
|
+
StateId newPolicyState = UNDERWRITTEN();
|
417
|
+
|
352
418
|
// optional activation of policy
|
353
419
|
if(activateAt > zeroTimestamp()) {
|
420
|
+
newPolicyState = ACTIVE();
|
354
421
|
policyInfo.activatedAt = activateAt;
|
355
422
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
356
|
-
|
357
|
-
instance.updatePolicyState(policyNftId, ACTIVE());
|
358
423
|
}
|
359
424
|
|
360
425
|
// optional collection of premium
|
361
426
|
if(requirePremiumPayment) {
|
362
|
-
|
427
|
+
netPremiumAmount = _processPremiumByTreasury(
|
363
428
|
instance,
|
364
429
|
productInfo.nftId,
|
365
|
-
treasuryInfo,
|
366
430
|
policyNftId,
|
367
431
|
policyInfo.premiumAmount);
|
368
432
|
|
369
433
|
policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
|
370
|
-
bundleInfo.balanceAmount += netPremiumAmount;
|
371
434
|
}
|
372
435
|
|
373
|
-
|
374
|
-
instance.
|
436
|
+
_poolService.underwritePolicy(instance, policyNftId, bundleNftId, collateralAmount, netPremiumAmount);
|
437
|
+
instance.updatePolicy(policyNftId, policyInfo, newPolicyState);
|
375
438
|
|
376
439
|
// involve pool if necessary
|
377
440
|
{
|
378
|
-
|
379
|
-
IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
|
441
|
+
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(bundleInfo.poolNftId);
|
380
442
|
|
381
|
-
if(poolInfo.
|
443
|
+
if(poolInfo.isConfirmingApplication) {
|
382
444
|
_underwriteByPool(
|
383
|
-
|
445
|
+
bundleInfo.poolNftId,
|
384
446
|
policyNftId,
|
385
447
|
policyInfo,
|
386
448
|
bundleInfo.filter,
|
@@ -393,7 +455,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
393
455
|
}
|
394
456
|
|
395
457
|
function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
|
396
|
-
UFixed sumInsuredUFixed =
|
458
|
+
UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
|
397
459
|
UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
|
398
460
|
return collateralUFixed.toInt();
|
399
461
|
}
|
@@ -401,39 +463,37 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
401
463
|
function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
|
402
464
|
// check caller is registered product
|
403
465
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
466
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
404
467
|
|
405
|
-
//
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
uint256 premiumAmount = policyInfo.premiumAmount;
|
410
|
-
_processPremiumByTreasury(instance, productInfo.nftId, treasuryInfo, policyNftId, premiumAmount);
|
411
|
-
|
412
|
-
// policy level book keeping for premium paid
|
413
|
-
policyInfo.premiumPaidAmount += premiumAmount;
|
468
|
+
// TODO: check if not paid
|
469
|
+
// TODO: transfer premium
|
470
|
+
// TODO: optionally activate
|
414
471
|
|
415
|
-
//
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
472
|
+
// // perform actual token transfers (this code is probably not complete)
|
473
|
+
// IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
474
|
+
|
475
|
+
// uint256 premiumAmount = policyInfo.premiumAmount;
|
476
|
+
// _processPremiumByTreasury(instance, productInfo.nftId, policyNftId, premiumAmount);
|
420
477
|
|
421
|
-
|
422
|
-
|
478
|
+
// // policy level book keeping for premium paid
|
479
|
+
// policyInfo.premiumPaidAmount += premiumAmount;
|
423
480
|
|
424
|
-
|
425
|
-
}
|
481
|
+
// instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
426
482
|
|
427
|
-
|
483
|
+
// // optional activation of policy
|
484
|
+
// if(activateAt > zeroTimestamp()) {
|
485
|
+
// activate(policyNftId, activateAt);
|
486
|
+
// }
|
428
487
|
|
429
488
|
// TODO add logging
|
430
489
|
}
|
431
490
|
|
432
|
-
function activate(NftId policyNftId, Timestamp activateAt)
|
491
|
+
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
433
492
|
// check caller is registered product
|
434
493
|
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
494
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
435
495
|
|
436
|
-
IPolicy.PolicyInfo memory policyInfo =
|
496
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
437
497
|
|
438
498
|
require(
|
439
499
|
policyInfo.activatedAt.eqz(),
|
@@ -442,8 +502,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
442
502
|
policyInfo.activatedAt = activateAt;
|
443
503
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
444
504
|
|
445
|
-
instance.
|
446
|
-
instance.updatePolicyState(policyNftId, ACTIVE());
|
505
|
+
instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
|
447
506
|
|
448
507
|
// TODO add logging
|
449
508
|
}
|
@@ -463,14 +522,15 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
463
522
|
view
|
464
523
|
returns (NftId poolNftid)
|
465
524
|
{
|
466
|
-
|
525
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
526
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
527
|
+
return productSetupInfo.poolNftId;
|
467
528
|
}
|
468
529
|
|
469
530
|
|
470
531
|
function _processPremiumByTreasury(
|
471
532
|
IInstance instance,
|
472
533
|
NftId productNftId,
|
473
|
-
ITreasury.TreasuryInfo memory treasuryInfo,
|
474
534
|
NftId policyNftId,
|
475
535
|
uint256 premiumAmount
|
476
536
|
)
|
@@ -479,11 +539,13 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
479
539
|
{
|
480
540
|
// process token transfer(s)
|
481
541
|
if(premiumAmount > 0) {
|
482
|
-
|
483
|
-
|
484
|
-
address
|
542
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
543
|
+
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
544
|
+
address policyOwner = getRegistry().ownerOf(policyNftId);
|
545
|
+
ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
|
546
|
+
address poolWallet = poolSetupInfo.wallet;
|
485
547
|
netPremiumAmount = premiumAmount;
|
486
|
-
Fee memory productFee =
|
548
|
+
Fee memory productFee = productSetupInfo.productFee;
|
487
549
|
|
488
550
|
if (FeeLib.feeIsZero(productFee)) {
|
489
551
|
tokenHandler.transfer(
|
@@ -492,13 +554,12 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
492
554
|
premiumAmount
|
493
555
|
);
|
494
556
|
} else {
|
495
|
-
(uint256
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
tokenHandler.transfer(policyOwner, productWallet, feeAmount);
|
557
|
+
(uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
558
|
+
address productWallet = productSetupInfo.wallet;
|
559
|
+
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
|
560
|
+
revert ErrorIProductServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
|
561
|
+
}
|
562
|
+
tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
|
502
563
|
tokenHandler.transfer(policyOwner, poolWallet, netAmount);
|
503
564
|
netPremiumAmount = netAmount;
|
504
565
|
}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
5
|
+
import {ProxyManager} from "../../shared/ProxyManager.sol";
|
6
|
+
import {ProductService} from "./ProductService.sol";
|
7
|
+
import {Registry} from "../../registry/Registry.sol";
|
8
|
+
import {RegistryService} from "../../registry/RegistryService.sol";
|
9
|
+
import {VersionLib} from "../../types/Version.sol";
|
10
|
+
|
11
|
+
contract ProductServiceManager is ProxyManager {
|
12
|
+
|
13
|
+
ProductService private _productService;
|
14
|
+
|
15
|
+
/// @dev initializes proxy manager with product service implementation
|
16
|
+
constructor(
|
17
|
+
address registryAddress
|
18
|
+
)
|
19
|
+
ProxyManager()
|
20
|
+
{
|
21
|
+
ProductService svc = new ProductService();
|
22
|
+
bytes memory data = abi.encode(registryAddress, address(this));
|
23
|
+
IVersionable versionable = deploy(
|
24
|
+
address(svc),
|
25
|
+
data);
|
26
|
+
|
27
|
+
_productService = ProductService(address(versionable));
|
28
|
+
|
29
|
+
// Registry registry = Registry(registryAddress);
|
30
|
+
// address registryServiceAddress = registry.getServiceAddress("RegistryService", VersionLib.toVersion(3, 0, 0).toMajorPart());
|
31
|
+
// RegistryService registryService = RegistryService(registryServiceAddress);
|
32
|
+
// TODO this must have a role or own nft to register service
|
33
|
+
//registryService.registerService(_productService);
|
34
|
+
|
35
|
+
// TODO no nft to link yet
|
36
|
+
// link ownership of instance service manager ot nft owner of instance service
|
37
|
+
//_linkToNftOwnable(
|
38
|
+
// address(registryAddress),
|
39
|
+
// address(_productService));
|
40
|
+
|
41
|
+
// implies that after this constructor call only upgrade functionality is available
|
42
|
+
_isDeployed = true;
|
43
|
+
}
|
44
|
+
|
45
|
+
//--- view functions ----------------------------------------------------//
|
46
|
+
function getProductService()
|
47
|
+
external
|
48
|
+
view
|
49
|
+
returns (ProductService productService)
|
50
|
+
{
|
51
|
+
return _productService;
|
52
|
+
}
|
53
|
+
|
54
|
+
}
|