@etherisc/gif-next 0.0.2-d4eadee-930 → 0.0.2-d64ea51-772
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 +180 -11
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +176 -23
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +618 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +129 -23
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +74 -181
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +55 -177
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +455 -60
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +489 -70
- 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 +902 -1103
- 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 +2487 -1101
- 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 +1412 -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 +276 -36
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +51 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +45 -127
- 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 +55 -245
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +4 -4
- 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/{access/IAccess.sol/IAccess.json → IDistribution.sol/IDistribution.json} +2 -2
- 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 +391 -71
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
- 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 +4 -0
- package/artifacts/contracts/instance/{base/ServiceBase.sol/ServiceBase.json → service/IDistributionService.sol/IDistributionService.json} +204 -58
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +322 -50
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +334 -51
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +508 -53
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +448 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +552 -78
- 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/shared/INftOwnable.sol/INftOwnable.json +127 -0
- 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 → shared}/IService.sol/IService.json +175 -54
- 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/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +199 -83
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/shared/Service.sol/Service.json +468 -0
- 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 +26 -10
- 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 +52 -13
- 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 +4 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +135 -9
- 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 +26 -23
- package/contracts/components/Distribution.sol +163 -0
- package/contracts/components/IBaseComponent.sol +9 -3
- package/contracts/components/IDistributionComponent.sol +44 -0
- package/contracts/components/IPoolComponent.sol +14 -9
- package/contracts/components/IProductComponent.sol +25 -9
- package/contracts/components/Pool.sol +100 -28
- package/contracts/components/Product.sol +203 -32
- 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 -45
- package/contracts/instance/IInstanceService.sol +30 -0
- package/contracts/instance/Instance.sol +426 -51
- 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 +102 -10
- package/contracts/instance/base/IInstanceBase.sol +11 -2
- package/contracts/instance/base/IKeyValueStore.sol +13 -13
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +53 -37
- package/contracts/instance/base/Lifecycle.sol +16 -11
- 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 +45 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/ComponentOwnerService.sol +244 -97
- package/contracts/instance/service/DistributionService.sol +88 -0
- package/contracts/instance/service/DistributionServiceManager.sol +54 -0
- package/contracts/instance/service/IComponentOwnerService.sol +1 -3
- package/contracts/instance/service/IDistributionService.sol +12 -0
- package/contracts/instance/service/IPoolService.sol +12 -1
- package/contracts/instance/service/IProductService.sol +59 -7
- package/contracts/instance/service/PoolService.sol +125 -47
- package/contracts/instance/service/PoolServiceManager.sol +54 -0
- package/contracts/instance/service/ProductService.sol +342 -133
- 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 +337 -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 +2 -2
- package/contracts/test/TestService.sol +5 -13
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +10 -5
- package/contracts/types/Key32.sol +8 -3
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +51 -14
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +61 -14
- 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/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 -296
- 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 -296
- package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +0 -10
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +0 -4
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +0 -10
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +0 -10
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
- 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 -188
- 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 -261
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
- 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 -149
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
- 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 -10
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +0 -10
- 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 -533
- 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 -533
- 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/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
- 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 -80
- package/contracts/instance/base/ModuleBase.sol +0 -52
- 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 -136
- package/contracts/instance/module/bundle/IBundle.sol +0 -58
- package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
- package/contracts/instance/module/compensation/ICompensation.sol +0 -10
- package/contracts/instance/module/component/ComponentModule.sol +0 -95
- package/contracts/instance/module/component/IComponent.sol +0 -53
- package/contracts/instance/module/policy/IPolicy.sol +0 -60
- package/contracts/instance/module/policy/PolicyModule.sol +0 -76
- package/contracts/instance/module/pool/IPoolModule.sol +0 -41
- package/contracts/instance/module/pool/PoolModule.sol +0 -87
- package/contracts/instance/module/risk/IRisk.sol +0 -10
- package/contracts/instance/module/risk/RiskModule.sol +0 -8
- package/contracts/instance/module/treasury/ITreasury.sol +0 -103
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -152
- package/contracts/registry/IChainNft.sol +0 -21
- package/contracts/registry/IRegistryLinked.sol +0 -8
- package/contracts/shared/IOwnable.sol +0 -6
- package/contracts/test/TestPool.sol +0 -22
- package/contracts/test/TestProduct.sol +0 -44
@@ -2,28 +2,44 @@
|
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
4
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
|
+
import {IProductComponent} from "../../components/IProductComponent.sol";
|
6
|
+
import {Product} from "../../components/Product.sol";
|
5
7
|
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
6
|
-
import {
|
7
|
-
import {
|
8
|
-
import {
|
9
|
-
import {
|
8
|
+
import {IDistributionComponent} from "../../components/IDistributionComponent.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";
|
10
13
|
import {IProductService} from "./IProductService.sol";
|
11
|
-
import {ITreasury
|
14
|
+
import {ITreasury} from "../module/ITreasury.sol";
|
15
|
+
import {ISetup} from "../module/ISetup.sol";
|
16
|
+
|
17
|
+
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
12
18
|
|
13
19
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
14
20
|
import {Versionable} from "../../shared/Versionable.sol";
|
15
21
|
|
16
22
|
import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
|
17
|
-
import {UFixed,
|
18
|
-
import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
|
19
|
-
import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
|
20
|
-
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
23
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
21
24
|
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
25
|
+
import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
|
26
|
+
import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
|
27
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
22
28
|
import {Fee, FeeLib} from "../../types/Fee.sol";
|
29
|
+
import {ReferralId} from "../../types/Referral.sol";
|
30
|
+
import {RiskId} from "../../types/RiskId.sol";
|
31
|
+
import {StateId} from "../../types/StateId.sol";
|
23
32
|
import {Version, VersionLib} from "../../types/Version.sol";
|
24
33
|
|
34
|
+
import {IService} from "../../shared/IService.sol";
|
35
|
+
import {Service} from "../../shared/Service.sol";
|
25
36
|
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
26
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";
|
27
43
|
|
28
44
|
// TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
|
29
45
|
contract ProductService is ComponentServiceBase, IProductService {
|
@@ -31,101 +47,274 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
31
47
|
|
32
48
|
string public constant NAME = "ProductService";
|
33
49
|
|
50
|
+
address internal _registryAddress;
|
51
|
+
IPoolService internal _poolService;
|
52
|
+
|
34
53
|
event LogProductServiceSender(address sender);
|
35
54
|
|
36
|
-
|
37
|
-
address
|
38
|
-
|
39
|
-
)
|
55
|
+
function _initialize(
|
56
|
+
address owner,
|
57
|
+
bytes memory data
|
58
|
+
)
|
59
|
+
internal
|
60
|
+
initializer
|
61
|
+
virtual override
|
40
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);
|
41
71
|
_registerInterface(type(IProductService).interfaceId);
|
42
72
|
}
|
43
73
|
|
44
|
-
function getVersion()
|
45
|
-
public
|
46
|
-
pure
|
47
|
-
virtual override (IVersionable, Versionable)
|
48
|
-
returns(Version)
|
49
|
-
{
|
50
|
-
return VersionLib.toVersion(3,0,0);
|
51
|
-
}
|
52
74
|
|
53
|
-
function getName()
|
75
|
+
function getName() public pure override(IService, Service) returns(string memory name) {
|
54
76
|
return NAME;
|
55
77
|
}
|
56
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
|
+
|
57
87
|
function setFees(
|
58
|
-
Fee memory
|
88
|
+
Fee memory productFee,
|
59
89
|
Fee memory processingFee
|
60
90
|
)
|
61
91
|
external
|
62
92
|
override
|
63
93
|
{
|
64
94
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
65
|
-
instance.
|
95
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
96
|
+
NftId productNftId = productInfo.nftId;
|
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());
|
103
|
+
}
|
104
|
+
|
105
|
+
function createRisk(
|
106
|
+
RiskId riskId,
|
107
|
+
bytes memory data
|
108
|
+
) external override {
|
109
|
+
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
110
|
+
NftId productNftId = productInfo.nftId;
|
111
|
+
IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo(productNftId, data);
|
112
|
+
instance.createRisk(
|
113
|
+
riskId,
|
114
|
+
riskInfo
|
115
|
+
);
|
116
|
+
}
|
117
|
+
|
118
|
+
function updateRisk(
|
119
|
+
RiskId riskId,
|
120
|
+
bytes memory data
|
121
|
+
) external {
|
122
|
+
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
123
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
124
|
+
IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
|
125
|
+
riskInfo.data = data;
|
126
|
+
instance.updateRisk(riskId, riskInfo, KEEP_STATE());
|
127
|
+
}
|
128
|
+
|
129
|
+
function updateRiskState(
|
130
|
+
RiskId riskId,
|
131
|
+
StateId state
|
132
|
+
) external {
|
133
|
+
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
134
|
+
instance.updateRiskState(riskId, state);
|
135
|
+
}
|
136
|
+
|
137
|
+
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
138
|
+
IRegistry.ObjectInfo memory productInfo;
|
139
|
+
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
140
|
+
product = Product(productInfo.objectAddress);
|
141
|
+
}
|
142
|
+
|
143
|
+
function calculatePremium(
|
144
|
+
RiskId riskId,
|
145
|
+
uint256 sumInsuredAmount,
|
146
|
+
uint256 lifetime,
|
147
|
+
bytes memory applicationData,
|
148
|
+
NftId bundleNftId,
|
149
|
+
ReferralId referralId
|
150
|
+
)
|
151
|
+
public
|
152
|
+
view
|
153
|
+
override
|
154
|
+
returns (
|
155
|
+
uint256 premiumAmount,
|
156
|
+
uint256 productFeeAmount,
|
157
|
+
uint256 poolFeeAmount,
|
158
|
+
uint256 bundleFeeAmount,
|
159
|
+
uint256 distributionFeeAmount
|
160
|
+
)
|
161
|
+
{
|
162
|
+
Product product = _getAndVerifyInstanceAndProduct();
|
163
|
+
uint256 netPremiumAmount = product.calculateNetPremium(
|
164
|
+
sumInsuredAmount,
|
165
|
+
riskId,
|
166
|
+
lifetime,
|
167
|
+
applicationData
|
168
|
+
);
|
169
|
+
|
170
|
+
(
|
171
|
+
productFeeAmount,
|
172
|
+
poolFeeAmount,
|
173
|
+
bundleFeeAmount,
|
174
|
+
distributionFeeAmount
|
175
|
+
) = _calculateFeeAmounts(
|
176
|
+
netPremiumAmount,
|
177
|
+
product,
|
178
|
+
bundleNftId,
|
179
|
+
referralId
|
180
|
+
);
|
181
|
+
|
182
|
+
premiumAmount = netPremiumAmount + productFeeAmount;
|
183
|
+
premiumAmount += poolFeeAmount + bundleFeeAmount;
|
184
|
+
premiumAmount += distributionFeeAmount;
|
185
|
+
}
|
186
|
+
|
187
|
+
function _calculateFeeAmounts(
|
188
|
+
uint256 netPremiumAmount,
|
189
|
+
Product product,
|
190
|
+
NftId bundleNftId,
|
191
|
+
ReferralId referralId
|
192
|
+
)
|
193
|
+
internal
|
194
|
+
view
|
195
|
+
returns (
|
196
|
+
uint256 productFeeAmount,
|
197
|
+
uint256 poolFeeAmount,
|
198
|
+
uint256 bundleFeeAmount,
|
199
|
+
uint256 distributionFeeAmount
|
200
|
+
)
|
201
|
+
{
|
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");
|
211
|
+
|
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
|
+
|
226
|
+
(bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
|
66
227
|
}
|
67
228
|
|
229
|
+
|
68
230
|
function createApplication(
|
69
231
|
address applicationOwner,
|
232
|
+
RiskId riskId,
|
70
233
|
uint256 sumInsuredAmount,
|
71
|
-
uint256 premiumAmount,
|
72
234
|
uint256 lifetime,
|
73
|
-
|
235
|
+
bytes memory applicationData,
|
236
|
+
NftId bundleNftId,
|
237
|
+
ReferralId referralId
|
74
238
|
) external override returns (NftId policyNftId) {
|
75
239
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
76
|
-
NftId productNftId = productInfo.nftId;
|
77
240
|
// TODO add validations (see create bundle in pool service)
|
78
241
|
|
79
|
-
policyNftId =
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
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
|
+
)
|
252
|
+
);
|
253
|
+
|
254
|
+
(uint256 premiumAmount,,,,) = calculatePremium(
|
255
|
+
riskId,
|
256
|
+
sumInsuredAmount,
|
257
|
+
lifetime,
|
258
|
+
applicationData,
|
259
|
+
bundleNftId,
|
260
|
+
referralId
|
84
261
|
);
|
85
262
|
|
86
|
-
|
87
|
-
|
88
|
-
|
263
|
+
IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
|
264
|
+
productInfo.nftId,
|
265
|
+
bundleNftId,
|
266
|
+
referralId,
|
267
|
+
riskId,
|
89
268
|
sumInsuredAmount,
|
90
269
|
premiumAmount,
|
270
|
+
0,
|
91
271
|
lifetime,
|
92
|
-
|
272
|
+
applicationData,
|
273
|
+
"",
|
274
|
+
0,
|
275
|
+
0,
|
276
|
+
0,
|
277
|
+
zeroTimestamp(),
|
278
|
+
zeroTimestamp(),
|
279
|
+
zeroTimestamp()
|
93
280
|
);
|
281
|
+
|
282
|
+
instance.createPolicy(policyNftId, policyInfo);
|
283
|
+
instance.updatePolicyState(policyNftId, APPLIED());
|
94
284
|
|
95
285
|
// TODO add logging
|
96
286
|
}
|
97
287
|
|
98
288
|
function _getAndVerifyUnderwritingSetup(
|
99
289
|
IInstance instance,
|
100
|
-
|
290
|
+
InstanceReader instanceReader,
|
291
|
+
IPolicy.PolicyInfo memory policyInfo,
|
292
|
+
ISetup.ProductSetupInfo memory productSetupInfo
|
101
293
|
)
|
102
294
|
internal
|
103
295
|
view
|
104
296
|
returns (
|
105
|
-
|
297
|
+
NftId bundleNftId,
|
106
298
|
IBundle.BundleInfo memory bundleInfo,
|
107
|
-
uint256 collateralAmount
|
108
|
-
bool poolIsVerifying,
|
109
|
-
bytes memory bundleFilter
|
299
|
+
uint256 collateralAmount
|
110
300
|
)
|
111
301
|
{
|
112
302
|
// check match between policy and bundle (via pool)
|
113
|
-
|
114
|
-
bundleInfo =
|
115
|
-
require(bundleInfo.poolNftId ==
|
303
|
+
bundleNftId = policyInfo.bundleNftId;
|
304
|
+
bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
305
|
+
require(bundleInfo.poolNftId == productSetupInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
|
116
306
|
|
117
307
|
// calculate required collateral
|
118
|
-
NftId poolNftId =
|
119
|
-
|
308
|
+
NftId poolNftId = productSetupInfo.poolNftId;
|
309
|
+
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
120
310
|
|
121
311
|
// obtain remaining return values
|
122
|
-
poolIsVerifying = poolInfo.isVerifying;
|
123
312
|
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
124
|
-
bundleFilter = bundleInfo.filter;
|
125
313
|
}
|
126
314
|
|
127
315
|
function _lockCollateralInBundle(
|
128
316
|
IInstance instance,
|
317
|
+
NftId bundleNftId,
|
129
318
|
IBundle.BundleInfo memory bundleInfo,
|
130
319
|
NftId policyNftId,
|
131
320
|
uint256 collateralAmount
|
@@ -134,28 +323,40 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
134
323
|
returns (IBundle.BundleInfo memory)
|
135
324
|
{
|
136
325
|
bundleInfo.lockedAmount += collateralAmount;
|
137
|
-
|
326
|
+
// FIXME: this
|
327
|
+
// instance.collateralizePolicy(bundleNftId, policyNftId, collateralAmount);
|
138
328
|
return bundleInfo;
|
139
329
|
}
|
140
330
|
|
141
331
|
function _underwriteByPool(
|
142
|
-
|
332
|
+
NftId poolNftId,
|
333
|
+
NftId policyNftId,
|
143
334
|
IPolicy.PolicyInfo memory policyInfo,
|
144
335
|
bytes memory bundleFilter,
|
145
336
|
uint256 collateralAmount
|
146
337
|
)
|
147
338
|
internal
|
148
339
|
{
|
149
|
-
address poolAddress =
|
340
|
+
address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
|
150
341
|
IPoolComponent pool = IPoolComponent(poolAddress);
|
151
342
|
pool.underwrite(
|
152
|
-
|
153
|
-
policyInfo.
|
343
|
+
policyNftId,
|
344
|
+
policyInfo.applicationData,
|
154
345
|
bundleFilter,
|
155
346
|
collateralAmount);
|
156
347
|
}
|
157
348
|
|
158
349
|
|
350
|
+
function revoke(
|
351
|
+
NftId policyNftId
|
352
|
+
)
|
353
|
+
external
|
354
|
+
override
|
355
|
+
{
|
356
|
+
require(false, "ERROR:PRS-234:NOT_YET_IMPLEMENTED");
|
357
|
+
}
|
358
|
+
|
359
|
+
|
159
360
|
function underwrite(
|
160
361
|
NftId policyNftId,
|
161
362
|
bool requirePremiumPayment,
|
@@ -169,36 +370,53 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
169
370
|
IRegistry.ObjectInfo memory productInfo,
|
170
371
|
IInstance instance
|
171
372
|
) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
373
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
172
374
|
|
173
375
|
// check match between policy and calling product
|
174
376
|
NftId productNftId = productInfo.nftId;
|
175
|
-
IPolicy.PolicyInfo memory policyInfo =
|
377
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
176
378
|
require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
177
|
-
require(
|
379
|
+
require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
178
380
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
381
|
+
NftId bundleNftId;
|
382
|
+
IBundle.BundleInfo memory bundleInfo;
|
383
|
+
uint256 collateralAmount;
|
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
|
+
}
|
189
398
|
|
190
399
|
// lock bundle collateral
|
191
400
|
bundleInfo = _lockCollateralInBundle(
|
192
401
|
instance,
|
402
|
+
bundleNftId,
|
193
403
|
bundleInfo,
|
194
404
|
policyNftId,
|
195
405
|
collateralAmount);
|
406
|
+
StateId newPolicyState = UNDERWRITTEN();
|
407
|
+
|
408
|
+
// optional activation of policy
|
409
|
+
if(activateAt > zeroTimestamp()) {
|
410
|
+
newPolicyState = ACTIVE();
|
411
|
+
policyInfo.activatedAt = activateAt;
|
412
|
+
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
413
|
+
}
|
196
414
|
|
197
|
-
//
|
415
|
+
// optional collection of premium
|
198
416
|
if(requirePremiumPayment) {
|
199
417
|
uint256 netPremiumAmount = _processPremiumByTreasury(
|
200
418
|
instance,
|
201
|
-
|
419
|
+
productInfo.nftId,
|
202
420
|
policyNftId,
|
203
421
|
policyInfo.premiumAmount);
|
204
422
|
|
@@ -206,38 +424,31 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
206
424
|
bundleInfo.balanceAmount += netPremiumAmount;
|
207
425
|
}
|
208
426
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
if(poolIsVerifying) {
|
228
|
-
_underwriteByPool(
|
229
|
-
productSetup,
|
230
|
-
policyInfo,
|
231
|
-
bundleFilter,
|
232
|
-
collateralAmount
|
233
|
-
);
|
427
|
+
instance.updatePolicy(policyNftId, policyInfo, newPolicyState);
|
428
|
+
_poolService.updateBundle(productInfo.parentNftId, bundleNftId, bundleInfo, KEEP_STATE());
|
429
|
+
|
430
|
+
// involve pool if necessary
|
431
|
+
{
|
432
|
+
NftId poolNftId = bundleInfo.poolNftId;
|
433
|
+
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
434
|
+
|
435
|
+
// FIXME: use poolInfo.isVerifying ???
|
436
|
+
if(poolInfo.isIntercepting) {
|
437
|
+
_underwriteByPool(
|
438
|
+
poolNftId,
|
439
|
+
policyNftId,
|
440
|
+
policyInfo,
|
441
|
+
bundleInfo.filter,
|
442
|
+
collateralAmount
|
443
|
+
);
|
444
|
+
}
|
234
445
|
}
|
235
446
|
|
236
447
|
// TODO add logging
|
237
448
|
}
|
238
449
|
|
239
450
|
function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
|
240
|
-
UFixed sumInsuredUFixed =
|
451
|
+
UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
|
241
452
|
UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
|
242
453
|
return collateralUFixed.toInt();
|
243
454
|
}
|
@@ -245,41 +456,37 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
245
456
|
function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
|
246
457
|
// check caller is registered product
|
247
458
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
459
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
248
460
|
|
249
|
-
//
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
uint256 premiumAmount = policyInfo.premiumAmount;
|
254
|
-
_processPremiumByTreasury(instance, product, policyNftId, premiumAmount);
|
461
|
+
// TODO: check if not paid
|
462
|
+
// TODO: transfer premium
|
463
|
+
// TODO: optionally activate
|
255
464
|
|
256
|
-
//
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
//
|
261
|
-
if(activateAt > zeroTimestamp()) {
|
262
|
-
require(
|
263
|
-
policyInfo.activatedAt.eqz(),
|
264
|
-
"ERROR:PRS-030:ALREADY_ACTIVATED");
|
465
|
+
// // perform actual token transfers (this code is probably not complete)
|
466
|
+
// IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
467
|
+
|
468
|
+
// uint256 premiumAmount = policyInfo.premiumAmount;
|
469
|
+
// _processPremiumByTreasury(instance, productInfo.nftId, policyNftId, premiumAmount);
|
265
470
|
|
266
|
-
|
267
|
-
|
471
|
+
// // policy level book keeping for premium paid
|
472
|
+
// policyInfo.premiumPaidAmount += premiumAmount;
|
268
473
|
|
269
|
-
|
270
|
-
policyInfo.state = ACTIVE();
|
271
|
-
}
|
474
|
+
// instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
272
475
|
|
273
|
-
|
476
|
+
// // optional activation of policy
|
477
|
+
// if(activateAt > zeroTimestamp()) {
|
478
|
+
// activate(policyNftId, activateAt);
|
479
|
+
// }
|
274
480
|
|
275
481
|
// TODO add logging
|
276
482
|
}
|
277
483
|
|
278
|
-
function activate(NftId policyNftId, Timestamp activateAt)
|
484
|
+
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
279
485
|
// check caller is registered product
|
280
486
|
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
487
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
281
488
|
|
282
|
-
IPolicy.PolicyInfo memory policyInfo =
|
489
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
283
490
|
|
284
491
|
require(
|
285
492
|
policyInfo.activatedAt.eqz(),
|
@@ -288,10 +495,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
288
495
|
policyInfo.activatedAt = activateAt;
|
289
496
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
290
497
|
|
291
|
-
|
292
|
-
policyInfo.state = ACTIVE();
|
293
|
-
|
294
|
-
instance.setPolicyInfo(policyInfo);
|
498
|
+
instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
|
295
499
|
|
296
500
|
// TODO add logging
|
297
501
|
}
|
@@ -311,12 +515,15 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
311
515
|
view
|
312
516
|
returns (NftId poolNftid)
|
313
517
|
{
|
314
|
-
|
518
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
519
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
520
|
+
return productSetupInfo.poolNftId;
|
315
521
|
}
|
316
522
|
|
523
|
+
|
317
524
|
function _processPremiumByTreasury(
|
318
525
|
IInstance instance,
|
319
|
-
|
526
|
+
NftId productNftId,
|
320
527
|
NftId policyNftId,
|
321
528
|
uint256 premiumAmount
|
322
529
|
)
|
@@ -325,25 +532,27 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
325
532
|
{
|
326
533
|
// process token transfer(s)
|
327
534
|
if(premiumAmount > 0) {
|
328
|
-
|
329
|
-
|
330
|
-
address
|
535
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
536
|
+
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
537
|
+
address policyOwner = getRegistry().ownerOf(policyNftId);
|
538
|
+
ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
|
539
|
+
address poolWallet = poolSetupInfo.wallet;
|
331
540
|
netPremiumAmount = premiumAmount;
|
332
|
-
Fee memory
|
541
|
+
Fee memory productFee = productSetupInfo.productFee;
|
333
542
|
|
334
|
-
if (FeeLib.feeIsZero(
|
543
|
+
if (FeeLib.feeIsZero(productFee)) {
|
335
544
|
tokenHandler.transfer(
|
336
545
|
policyOwner,
|
337
546
|
poolWallet,
|
338
547
|
premiumAmount
|
339
548
|
);
|
340
549
|
} else {
|
341
|
-
(uint256
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
tokenHandler.transfer(policyOwner,
|
550
|
+
(uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
551
|
+
address productWallet = productSetupInfo.wallet;
|
552
|
+
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
|
553
|
+
revert ErrorIProductServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
|
554
|
+
}
|
555
|
+
tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
|
347
556
|
tokenHandler.transfer(policyOwner, poolWallet, netAmount);
|
348
557
|
netPremiumAmount = netAmount;
|
349
558
|
}
|