@etherisc/gif-next 0.0.2-e37834a-021 → 0.0.2-e3f4f82-063
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 +108 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +116 -2
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +204 -31
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +106 -3
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +0 -25
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +2 -61
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +0 -50
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +253 -68
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +272 -45
- 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/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1132 -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 +732 -1219
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +480 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2327 -1324
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -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 +931 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +508 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +149 -2
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.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 +178 -41
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +212 -22
- 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 +81 -4
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +80 -3
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +188 -3
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +120 -34
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +346 -24
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +460 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +269 -86
- 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 +47 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +199 -112
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +297 -18
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +167 -166
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +447 -39
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +105 -48
- 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 +1 -1
- 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 +80 -3
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → shared/IService.sol/IService.json} +76 -35
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +32 -6
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +21 -16
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +120 -6
- 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} +137 -39
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/InstanceBase.sol/InstanceBase.json → shared/Service.sol/Service.json} +106 -94
- 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 +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- 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 +120 -6
- 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 +142 -14
- 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 +18 -2
- 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 +2 -2
- 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 +2 -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 +16 -4
- package/contracts/components/Distribution.sol +23 -15
- package/contracts/components/IBaseComponent.sol +9 -3
- package/contracts/components/IDistributionComponent.sol +2 -4
- package/contracts/components/IPoolComponent.sol +1 -3
- package/contracts/components/IProductComponent.sol +2 -4
- package/contracts/components/Pool.sol +33 -32
- package/contracts/components/Product.sol +52 -62
- package/contracts/experiment/cloning/Cloner.sol +47 -0
- package/contracts/instance/AccessManagedSimple.sol +115 -0
- package/contracts/instance/AccessManagerSimple.sol +692 -0
- package/contracts/instance/IAccessManagerSimple.sol +391 -0
- package/contracts/instance/IInstance.sol +47 -47
- package/contracts/instance/IInstanceService.sol +30 -0
- package/contracts/instance/Instance.sol +423 -65
- package/contracts/instance/InstanceAccessManager.sol +288 -0
- package/contracts/instance/InstanceReader.sol +315 -0
- package/contracts/instance/InstanceService.sol +198 -0
- package/contracts/instance/InstanceServiceManager.sol +57 -0
- package/contracts/instance/base/ComponentServiceBase.sol +93 -8
- 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 +47 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/ComponentOwnerService.sol +145 -100
- package/contracts/instance/service/DistributionService.sol +49 -15
- package/contracts/instance/service/DistributionServiceManager.sol +54 -0
- package/contracts/instance/service/IComponentOwnerService.sol +1 -1
- package/contracts/instance/service/IDistributionService.sol +1 -1
- package/contracts/instance/service/IPoolService.sol +7 -1
- package/contracts/instance/service/IProductService.sol +9 -6
- package/contracts/instance/service/PoolService.sol +101 -46
- package/contracts/instance/service/PoolServiceManager.sol +54 -0
- package/contracts/instance/service/ProductService.sol +170 -118
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +40 -25
- package/contracts/registry/IRegistry.sol +35 -27
- package/contracts/registry/IRegistryService.sol +36 -15
- package/contracts/registry/Registry.sol +137 -179
- package/contracts/registry/RegistryService.sol +149 -166
- package/contracts/registry/RegistryServiceManager.sol +38 -10
- package/contracts/registry/TokenRegistry.sol +111 -0
- package/contracts/shared/ERC165.sol +7 -3
- package/contracts/shared/INftOwnable.sol +22 -0
- package/contracts/shared/IRegisterable.sol +3 -8
- package/contracts/{instance/base → shared}/IService.sol +3 -3
- package/contracts/shared/NftOwnable.sol +85 -38
- package/contracts/shared/ProxyManager.sol +3 -12
- package/contracts/shared/Registerable.sol +15 -42
- 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 +2 -2
- package/contracts/shared/Versionable.sol +3 -3
- package/contracts/test/TestFee.sol +2 -2
- package/contracts/test/TestRoleId.sol +1 -1
- package/contracts/test/TestService.sol +3 -5
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +3 -3
- package/contracts/types/Key32.sol +8 -3
- 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 +4 -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 -164
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -164
- 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 -638
- 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 -638
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -457
- 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 -445
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -602
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -632
- 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/instance/IInstanceLinked.sol +0 -8
- package/contracts/instance/base/InstanceBase.sol +0 -89
- package/contracts/instance/base/ModuleBase.sol +0 -57
- package/contracts/instance/base/ServiceBase.sol +0 -43
- 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 -71
- 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 -41
- package/contracts/instance/module/pool/PoolModule.sol +0 -95
- 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 -84
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -131
- package/contracts/registry/IChainNft.sol +0 -22
- package/contracts/shared/IOwnable.sol +0 -6
- package/contracts/test/TestDistribution.sol +0 -22
- package/contracts/test/TestPool.sol +0 -27
- package/contracts/test/TestProduct.sol +0 -74
- package/contracts/types/ReferralId.sol +0 -48
@@ -6,33 +6,40 @@ import {IProductComponent} from "../../components/IProductComponent.sol";
|
|
6
6
|
import {Product} from "../../components/Product.sol";
|
7
7
|
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
8
8
|
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
9
|
-
import {IInstance} from "
|
10
|
-
import {IPolicy
|
11
|
-
import {
|
12
|
-
import {
|
13
|
-
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";
|
14
13
|
import {IProductService} from "./IProductService.sol";
|
15
|
-
import {ITreasury
|
14
|
+
import {ITreasury} from "../module/ITreasury.sol";
|
15
|
+
import {ISetup} from "../module/ISetup.sol";
|
16
|
+
|
17
|
+
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
16
18
|
|
17
19
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
18
20
|
import {Versionable} from "../../shared/Versionable.sol";
|
19
21
|
|
20
22
|
import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
|
21
|
-
import {UFixed,
|
23
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
22
24
|
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
23
25
|
import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
|
24
|
-
import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
|
26
|
+
import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
|
25
27
|
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
26
28
|
import {Fee, FeeLib} from "../../types/Fee.sol";
|
27
|
-
import {ReferralId} from "../../types/
|
29
|
+
import {ReferralId} from "../../types/Referral.sol";
|
28
30
|
import {RiskId} from "../../types/RiskId.sol";
|
29
31
|
import {StateId} from "../../types/StateId.sol";
|
30
32
|
import {Version, VersionLib} from "../../types/Version.sol";
|
31
33
|
|
32
|
-
import {IService} from "
|
33
|
-
import {
|
34
|
+
import {IService} from "../../shared/IService.sol";
|
35
|
+
import {Service} from "../../shared/Service.sol";
|
34
36
|
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
35
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";
|
36
43
|
|
37
44
|
// TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
|
38
45
|
contract ProductService is ComponentServiceBase, IProductService {
|
@@ -40,22 +47,43 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
40
47
|
|
41
48
|
string public constant NAME = "ProductService";
|
42
49
|
|
50
|
+
address internal _registryAddress;
|
51
|
+
IPoolService internal _poolService;
|
52
|
+
|
43
53
|
event LogProductServiceSender(address sender);
|
44
54
|
|
45
|
-
|
46
|
-
address
|
47
|
-
|
48
|
-
|
49
|
-
|
55
|
+
function _initialize(
|
56
|
+
address owner,
|
57
|
+
bytes memory data
|
58
|
+
)
|
59
|
+
internal
|
60
|
+
initializer
|
61
|
+
virtual override
|
50
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);
|
51
71
|
_registerInterface(type(IProductService).interfaceId);
|
52
72
|
}
|
53
73
|
|
54
74
|
|
55
|
-
function getName() public pure override(IService,
|
75
|
+
function getName() public pure override(IService, Service) returns(string memory name) {
|
56
76
|
return NAME;
|
57
77
|
}
|
58
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
|
+
|
59
87
|
function setFees(
|
60
88
|
Fee memory productFee,
|
61
89
|
Fee memory processingFee
|
@@ -64,11 +92,14 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
64
92
|
override
|
65
93
|
{
|
66
94
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
95
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
67
96
|
NftId productNftId = productInfo.nftId;
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
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());
|
72
103
|
}
|
73
104
|
|
74
105
|
function createRisk(
|
@@ -77,22 +108,22 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
77
108
|
) external override {
|
78
109
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
79
110
|
NftId productNftId = productInfo.nftId;
|
111
|
+
IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo(productNftId, data);
|
80
112
|
instance.createRisk(
|
81
113
|
riskId,
|
82
|
-
|
83
|
-
data
|
114
|
+
riskInfo
|
84
115
|
);
|
85
116
|
}
|
86
117
|
|
87
|
-
function
|
118
|
+
function updateRisk(
|
88
119
|
RiskId riskId,
|
89
|
-
|
120
|
+
bytes memory data
|
90
121
|
) external {
|
91
122
|
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
92
|
-
instance.
|
93
|
-
|
94
|
-
|
95
|
-
);
|
123
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
124
|
+
IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
|
125
|
+
riskInfo.data = data;
|
126
|
+
instance.updateRisk(riskId, riskInfo, KEEP_STATE());
|
96
127
|
}
|
97
128
|
|
98
129
|
function updateRiskState(
|
@@ -100,10 +131,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
100
131
|
StateId state
|
101
132
|
) external {
|
102
133
|
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
103
|
-
instance.updateRiskState(
|
104
|
-
riskId,
|
105
|
-
state
|
106
|
-
);
|
134
|
+
instance.updateRiskState(riskId, state);
|
107
135
|
}
|
108
136
|
|
109
137
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
@@ -171,18 +199,31 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
171
199
|
uint256 distributionFeeAmount
|
172
200
|
)
|
173
201
|
{
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
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");
|
178
211
|
|
179
|
-
|
180
|
-
|
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
|
+
|
181
226
|
(bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
|
182
|
-
|
183
|
-
IRegistry.ObjectInfo memory distributionInfo = getRegistry().getObjectInfo(treasuryInfo.distributionNftId);
|
184
|
-
IDistributionComponent distribution = IDistributionComponent(distributionInfo.objectAddress);
|
185
|
-
distributionFeeAmount = distribution.calculateFeeAmount(referralId, netPremiumAmount);
|
186
227
|
}
|
187
228
|
|
188
229
|
|
@@ -219,42 +260,53 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
219
260
|
referralId
|
220
261
|
);
|
221
262
|
|
222
|
-
|
223
|
-
policyNftId,
|
263
|
+
IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
|
224
264
|
productInfo.nftId,
|
265
|
+
bundleNftId,
|
225
266
|
referralId,
|
226
267
|
riskId,
|
227
268
|
sumInsuredAmount,
|
228
269
|
premiumAmount,
|
270
|
+
0,
|
229
271
|
lifetime,
|
230
|
-
|
272
|
+
applicationData,
|
273
|
+
"",
|
274
|
+
0,
|
275
|
+
0,
|
276
|
+
0,
|
277
|
+
zeroTimestamp(),
|
278
|
+
zeroTimestamp(),
|
279
|
+
zeroTimestamp()
|
231
280
|
);
|
281
|
+
|
282
|
+
instance.createPolicy(policyNftId, policyInfo);
|
283
|
+
instance.updatePolicyState(policyNftId, APPLIED());
|
232
284
|
|
233
285
|
// TODO add logging
|
234
286
|
}
|
235
287
|
|
236
288
|
function _getAndVerifyUnderwritingSetup(
|
237
289
|
IInstance instance,
|
238
|
-
|
290
|
+
InstanceReader instanceReader,
|
291
|
+
IPolicy.PolicyInfo memory policyInfo,
|
292
|
+
ISetup.ProductSetupInfo memory productSetupInfo
|
239
293
|
)
|
240
294
|
internal
|
241
295
|
view
|
242
296
|
returns (
|
243
|
-
ITreasury.TreasuryInfo memory treasuryInfo,
|
244
297
|
NftId bundleNftId,
|
245
298
|
IBundle.BundleInfo memory bundleInfo,
|
246
299
|
uint256 collateralAmount
|
247
300
|
)
|
248
301
|
{
|
249
302
|
// check match between policy and bundle (via pool)
|
250
|
-
treasuryInfo = instance.getTreasuryInfo(policyInfo.productNftId);
|
251
303
|
bundleNftId = policyInfo.bundleNftId;
|
252
|
-
bundleInfo =
|
253
|
-
require(bundleInfo.poolNftId ==
|
304
|
+
bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
305
|
+
require(bundleInfo.poolNftId == productSetupInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
|
254
306
|
|
255
307
|
// calculate required collateral
|
256
|
-
NftId poolNftId =
|
257
|
-
|
308
|
+
NftId poolNftId = productSetupInfo.poolNftId;
|
309
|
+
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
258
310
|
|
259
311
|
// obtain remaining return values
|
260
312
|
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
@@ -271,12 +323,13 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
271
323
|
returns (IBundle.BundleInfo memory)
|
272
324
|
{
|
273
325
|
bundleInfo.lockedAmount += collateralAmount;
|
274
|
-
|
326
|
+
// FIXME: track policy in bundle and how much is locked for it
|
327
|
+
// instance.collateralizePolicy(bundleNftId, policyNftId, collateralAmount);
|
275
328
|
return bundleInfo;
|
276
329
|
}
|
277
330
|
|
278
331
|
function _underwriteByPool(
|
279
|
-
|
332
|
+
NftId poolNftId,
|
280
333
|
NftId policyNftId,
|
281
334
|
IPolicy.PolicyInfo memory policyInfo,
|
282
335
|
bytes memory bundleFilter,
|
@@ -284,7 +337,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
284
337
|
)
|
285
338
|
internal
|
286
339
|
{
|
287
|
-
address poolAddress = getRegistry().getObjectInfo(
|
340
|
+
address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
|
288
341
|
IPoolComponent pool = IPoolComponent(poolAddress);
|
289
342
|
pool.underwrite(
|
290
343
|
policyNftId,
|
@@ -317,27 +370,31 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
317
370
|
IRegistry.ObjectInfo memory productInfo,
|
318
371
|
IInstance instance
|
319
372
|
) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
373
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
320
374
|
|
321
375
|
// check match between policy and calling product
|
322
376
|
NftId productNftId = productInfo.nftId;
|
323
|
-
IPolicy.PolicyInfo memory policyInfo =
|
377
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
324
378
|
require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
325
|
-
require(
|
379
|
+
require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
326
380
|
|
327
|
-
ITreasury.TreasuryInfo memory treasuryInfo;
|
328
381
|
NftId bundleNftId;
|
329
382
|
IBundle.BundleInfo memory bundleInfo;
|
330
383
|
uint256 collateralAmount;
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
384
|
+
{
|
385
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
386
|
+
|
387
|
+
(
|
388
|
+
bundleNftId,
|
389
|
+
bundleInfo,
|
390
|
+
collateralAmount
|
391
|
+
) = _getAndVerifyUnderwritingSetup(
|
392
|
+
instance,
|
393
|
+
instanceReader,
|
394
|
+
policyInfo,
|
395
|
+
productSetupInfo
|
396
|
+
);
|
397
|
+
}
|
341
398
|
|
342
399
|
// lock bundle collateral
|
343
400
|
bundleInfo = _lockCollateralInBundle(
|
@@ -346,16 +403,13 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
346
403
|
bundleInfo,
|
347
404
|
policyNftId,
|
348
405
|
collateralAmount);
|
349
|
-
|
350
|
-
|
351
|
-
instance.updatePolicyState(policyNftId, UNDERWRITTEN());
|
352
|
-
|
406
|
+
StateId newPolicyState = UNDERWRITTEN();
|
407
|
+
|
353
408
|
// optional activation of policy
|
354
409
|
if(activateAt > zeroTimestamp()) {
|
410
|
+
newPolicyState = ACTIVE();
|
355
411
|
policyInfo.activatedAt = activateAt;
|
356
412
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
357
|
-
|
358
|
-
instance.updatePolicyState(policyNftId, ACTIVE());
|
359
413
|
}
|
360
414
|
|
361
415
|
// optional collection of premium
|
@@ -363,7 +417,6 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
363
417
|
uint256 netPremiumAmount = _processPremiumByTreasury(
|
364
418
|
instance,
|
365
419
|
productInfo.nftId,
|
366
|
-
treasuryInfo,
|
367
420
|
policyNftId,
|
368
421
|
policyInfo.premiumAmount);
|
369
422
|
|
@@ -371,17 +424,17 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
371
424
|
bundleInfo.balanceAmount += netPremiumAmount;
|
372
425
|
}
|
373
426
|
|
374
|
-
instance.
|
375
|
-
|
427
|
+
instance.updatePolicy(policyNftId, policyInfo, newPolicyState);
|
428
|
+
_poolService.updateBundle(productInfo.parentNftId, bundleNftId, bundleInfo, KEEP_STATE());
|
376
429
|
|
377
430
|
// involve pool if necessary
|
378
431
|
{
|
379
|
-
NftId poolNftId =
|
380
|
-
|
432
|
+
NftId poolNftId = bundleInfo.poolNftId;
|
433
|
+
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
381
434
|
|
382
|
-
if(poolInfo.
|
435
|
+
if(poolInfo.isConfirmingApplication) {
|
383
436
|
_underwriteByPool(
|
384
|
-
|
437
|
+
poolNftId,
|
385
438
|
policyNftId,
|
386
439
|
policyInfo,
|
387
440
|
bundleInfo.filter,
|
@@ -394,7 +447,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
394
447
|
}
|
395
448
|
|
396
449
|
function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
|
397
|
-
UFixed sumInsuredUFixed =
|
450
|
+
UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
|
398
451
|
UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
|
399
452
|
return collateralUFixed.toInt();
|
400
453
|
}
|
@@ -402,39 +455,37 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
402
455
|
function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
|
403
456
|
// check caller is registered product
|
404
457
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
458
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
405
459
|
|
406
|
-
//
|
407
|
-
|
408
|
-
|
460
|
+
// TODO: check if not paid
|
461
|
+
// TODO: transfer premium
|
462
|
+
// TODO: optionally activate
|
409
463
|
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
//
|
414
|
-
|
415
|
-
|
416
|
-
// optional activation of policy
|
417
|
-
if(activateAt > zeroTimestamp()) {
|
418
|
-
require(
|
419
|
-
policyInfo.activatedAt.eqz(),
|
420
|
-
"ERROR:PRS-030:ALREADY_ACTIVATED");
|
464
|
+
// // perform actual token transfers (this code is probably not complete)
|
465
|
+
// IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
466
|
+
|
467
|
+
// uint256 premiumAmount = policyInfo.premiumAmount;
|
468
|
+
// _processPremiumByTreasury(instance, productInfo.nftId, policyNftId, premiumAmount);
|
421
469
|
|
422
|
-
|
423
|
-
|
470
|
+
// // policy level book keeping for premium paid
|
471
|
+
// policyInfo.premiumPaidAmount += premiumAmount;
|
424
472
|
|
425
|
-
|
426
|
-
}
|
473
|
+
// instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
427
474
|
|
428
|
-
|
475
|
+
// // optional activation of policy
|
476
|
+
// if(activateAt > zeroTimestamp()) {
|
477
|
+
// activate(policyNftId, activateAt);
|
478
|
+
// }
|
429
479
|
|
430
480
|
// TODO add logging
|
431
481
|
}
|
432
482
|
|
433
|
-
function activate(NftId policyNftId, Timestamp activateAt)
|
483
|
+
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
434
484
|
// check caller is registered product
|
435
485
|
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
486
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
436
487
|
|
437
|
-
IPolicy.PolicyInfo memory policyInfo =
|
488
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
438
489
|
|
439
490
|
require(
|
440
491
|
policyInfo.activatedAt.eqz(),
|
@@ -443,8 +494,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
443
494
|
policyInfo.activatedAt = activateAt;
|
444
495
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
445
496
|
|
446
|
-
instance.
|
447
|
-
instance.updatePolicyState(policyNftId, ACTIVE());
|
497
|
+
instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
|
448
498
|
|
449
499
|
// TODO add logging
|
450
500
|
}
|
@@ -464,14 +514,15 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
464
514
|
view
|
465
515
|
returns (NftId poolNftid)
|
466
516
|
{
|
467
|
-
|
517
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
518
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
519
|
+
return productSetupInfo.poolNftId;
|
468
520
|
}
|
469
521
|
|
470
522
|
|
471
523
|
function _processPremiumByTreasury(
|
472
524
|
IInstance instance,
|
473
525
|
NftId productNftId,
|
474
|
-
ITreasury.TreasuryInfo memory treasuryInfo,
|
475
526
|
NftId policyNftId,
|
476
527
|
uint256 premiumAmount
|
477
528
|
)
|
@@ -480,11 +531,13 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
480
531
|
{
|
481
532
|
// process token transfer(s)
|
482
533
|
if(premiumAmount > 0) {
|
483
|
-
|
534
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
535
|
+
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
484
536
|
address policyOwner = getRegistry().ownerOf(policyNftId);
|
485
|
-
|
537
|
+
ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
|
538
|
+
address poolWallet = poolSetupInfo.wallet;
|
486
539
|
netPremiumAmount = premiumAmount;
|
487
|
-
Fee memory productFee =
|
540
|
+
Fee memory productFee = productSetupInfo.productFee;
|
488
541
|
|
489
542
|
if (FeeLib.feeIsZero(productFee)) {
|
490
543
|
tokenHandler.transfer(
|
@@ -493,13 +546,12 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
493
546
|
premiumAmount
|
494
547
|
);
|
495
548
|
} else {
|
496
|
-
(uint256
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
tokenHandler.transfer(policyOwner, productWallet, feeAmount);
|
549
|
+
(uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
550
|
+
address productWallet = productSetupInfo.wallet;
|
551
|
+
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
|
552
|
+
revert ErrorIProductServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
|
553
|
+
}
|
554
|
+
tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
|
503
555
|
tokenHandler.transfer(policyOwner, poolWallet, netAmount);
|
504
556
|
netPremiumAmount = netAmount;
|
505
557
|
}
|
@@ -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
|
+
}
|