@etherisc/gif-next 0.0.2-d679de9-140 → 0.0.2-d81820a-051
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 +255 -8
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +302 -23
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +744 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +217 -23
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +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 +90 -171
- 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 +615 -63
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +620 -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/Require.sol/Require.json +2 -2
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
- 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/TypeA.sol/TypeALib.json +2 -2
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
- 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/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +775 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +185 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +923 -1091
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +485 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2543 -1091
- 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 +970 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +512 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +272 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +276 -36
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +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 +6 -6
- 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 +401 -65
- 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 +401 -49
- 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 +629 -51
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +464 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +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 +10 -10
- 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 +44 -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 +12 -12
- 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 +4 -0
- package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +2 -2
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
- 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 +4 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +26 -3
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
- 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/UFixedLib.json +479 -0
- 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 +72 -31
- package/contracts/components/Distribution.sol +163 -0
- package/contracts/components/IBaseComponent.sol +15 -3
- package/contracts/components/IDistributionComponent.sol +44 -0
- package/contracts/components/IPoolComponent.sol +19 -10
- package/contracts/components/IProductComponent.sol +25 -9
- package/contracts/components/Pool.sol +126 -33
- package/contracts/components/Product.sol +204 -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/BundleManager.sol +129 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IAccessManagerSimple.sol +391 -0
- package/contracts/instance/IInstance.sol +49 -45
- package/contracts/instance/IInstanceService.sol +32 -0
- package/contracts/instance/Instance.sol +437 -51
- package/contracts/instance/InstanceAccessManager.sol +288 -0
- package/contracts/instance/InstanceReader.sol +315 -0
- package/contracts/instance/InstanceService.sol +232 -0
- package/contracts/instance/InstanceServiceManager.sol +57 -0
- package/contracts/instance/ObjectManager.sol +95 -0
- package/contracts/instance/base/ComponentServiceBase.sol +102 -10
- package/contracts/instance/base/IInstanceBase.sol +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 +46 -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 +24 -3
- package/contracts/instance/service/IProductService.sol +59 -7
- package/contracts/instance/service/PoolService.sol +206 -42
- package/contracts/instance/service/PoolServiceManager.sol +54 -0
- package/contracts/instance/service/ProductService.sol +349 -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/test/Usdc.sol +26 -0
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +10 -5
- package/contracts/types/Key32.sol +8 -3
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +51 -14
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +65 -11
- package/contracts/types/StateId.sol +5 -1
- package/contracts/types/Timestamp.sol +7 -3
- package/contracts/types/UFixed.sol +139 -24
- package/contracts/types/Version.sol +13 -1
- package/package.json +7 -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/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -479
- 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);
|
66
141
|
}
|
67
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);
|
227
|
+
}
|
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,39 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
134
323
|
returns (IBundle.BundleInfo memory)
|
135
324
|
{
|
136
325
|
bundleInfo.lockedAmount += collateralAmount;
|
137
|
-
|
326
|
+
// TODO: track policy associated to bundle in bundlemanager (tbd) and how much is locked for it
|
138
327
|
return bundleInfo;
|
139
328
|
}
|
140
329
|
|
141
330
|
function _underwriteByPool(
|
142
|
-
|
331
|
+
NftId poolNftId,
|
332
|
+
NftId policyNftId,
|
143
333
|
IPolicy.PolicyInfo memory policyInfo,
|
144
334
|
bytes memory bundleFilter,
|
145
335
|
uint256 collateralAmount
|
146
336
|
)
|
147
337
|
internal
|
148
338
|
{
|
149
|
-
address poolAddress =
|
339
|
+
address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
|
150
340
|
IPoolComponent pool = IPoolComponent(poolAddress);
|
151
341
|
pool.underwrite(
|
152
|
-
|
153
|
-
policyInfo.
|
342
|
+
policyNftId,
|
343
|
+
policyInfo.applicationData,
|
154
344
|
bundleFilter,
|
155
345
|
collateralAmount);
|
156
346
|
}
|
157
347
|
|
158
348
|
|
349
|
+
function revoke(
|
350
|
+
NftId policyNftId
|
351
|
+
)
|
352
|
+
external
|
353
|
+
override
|
354
|
+
{
|
355
|
+
require(false, "ERROR:PRS-234:NOT_YET_IMPLEMENTED");
|
356
|
+
}
|
357
|
+
|
358
|
+
|
159
359
|
function underwrite(
|
160
360
|
NftId policyNftId,
|
161
361
|
bool requirePremiumPayment,
|
@@ -169,75 +369,93 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
169
369
|
IRegistry.ObjectInfo memory productInfo,
|
170
370
|
IInstance instance
|
171
371
|
) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
372
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
172
373
|
|
173
374
|
// check match between policy and calling product
|
174
375
|
NftId productNftId = productInfo.nftId;
|
175
|
-
IPolicy.PolicyInfo memory policyInfo =
|
376
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
176
377
|
require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
177
|
-
require(
|
378
|
+
require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
379
|
+
|
380
|
+
NftId bundleNftId;
|
381
|
+
IBundle.BundleInfo memory bundleInfo;
|
382
|
+
uint256 collateralAmount;
|
383
|
+
uint256 netPremiumAmount = 0; // > 0 if immediate premium payment
|
384
|
+
{
|
385
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
386
|
+
IBundle.BundleInfo memory bundleInfo;
|
387
|
+
|
388
|
+
(
|
389
|
+
bundleNftId,
|
390
|
+
bundleInfo,
|
391
|
+
collateralAmount
|
392
|
+
) = _getAndVerifyUnderwritingSetup(
|
393
|
+
instance,
|
394
|
+
instanceReader,
|
395
|
+
policyInfo,
|
396
|
+
productSetupInfo
|
397
|
+
);
|
398
|
+
}
|
178
399
|
|
179
|
-
(
|
180
|
-
ITreasury.ProductSetup memory productSetup,
|
181
|
-
IBundle.BundleInfo memory bundleInfo,
|
182
|
-
uint256 collateralAmount,
|
183
|
-
bool poolIsVerifying,
|
184
|
-
bytes memory bundleFilter
|
185
|
-
) = _getAndVerifyUnderwritingSetup(
|
186
|
-
instance,
|
187
|
-
policyInfo
|
188
|
-
);
|
189
400
|
|
190
401
|
// lock bundle collateral
|
191
402
|
bundleInfo = _lockCollateralInBundle(
|
192
403
|
instance,
|
404
|
+
bundleNftId,
|
405
|
+
bundleInfo,
|
406
|
+
policyNftId,
|
407
|
+
collateralAmount);
|
408
|
+
|
409
|
+
// lock bundle collateral
|
410
|
+
bundleInfo = _lockCollateralInBundle(
|
411
|
+
instance,
|
412
|
+
bundleNftId,
|
193
413
|
bundleInfo,
|
194
414
|
policyNftId,
|
195
415
|
collateralAmount);
|
416
|
+
StateId newPolicyState = UNDERWRITTEN();
|
417
|
+
|
418
|
+
// optional activation of policy
|
419
|
+
if(activateAt > zeroTimestamp()) {
|
420
|
+
newPolicyState = ACTIVE();
|
421
|
+
policyInfo.activatedAt = activateAt;
|
422
|
+
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
423
|
+
}
|
196
424
|
|
197
|
-
//
|
425
|
+
// optional collection of premium
|
198
426
|
if(requirePremiumPayment) {
|
199
|
-
|
427
|
+
netPremiumAmount = _processPremiumByTreasury(
|
200
428
|
instance,
|
201
|
-
|
429
|
+
productInfo.nftId,
|
202
430
|
policyNftId,
|
203
431
|
policyInfo.premiumAmount);
|
204
432
|
|
205
433
|
policyInfo.premiumPaidAmount += policyInfo.premiumAmount;
|
206
|
-
bundleInfo.balanceAmount += netPremiumAmount;
|
207
434
|
}
|
208
435
|
|
209
|
-
|
210
|
-
|
211
|
-
policyInfo.state = UNDERWRITTEN();
|
212
|
-
policyInfo.updatedIn = blockNumber();
|
436
|
+
_poolService.underwritePolicy(instance, policyNftId, bundleNftId, collateralAmount, netPremiumAmount);
|
437
|
+
instance.updatePolicy(policyNftId, policyInfo, newPolicyState);
|
213
438
|
|
214
|
-
//
|
215
|
-
|
216
|
-
|
217
|
-
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
218
|
-
|
219
|
-
// TODO add require for state change
|
220
|
-
policyInfo.state = ACTIVE();
|
221
|
-
}
|
439
|
+
// involve pool if necessary
|
440
|
+
{
|
441
|
+
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(bundleInfo.poolNftId);
|
222
442
|
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
collateralAmount
|
233
|
-
);
|
443
|
+
if(poolInfo.isConfirmingApplication) {
|
444
|
+
_underwriteByPool(
|
445
|
+
bundleInfo.poolNftId,
|
446
|
+
policyNftId,
|
447
|
+
policyInfo,
|
448
|
+
bundleInfo.filter,
|
449
|
+
collateralAmount
|
450
|
+
);
|
451
|
+
}
|
234
452
|
}
|
235
453
|
|
236
454
|
// TODO add logging
|
237
455
|
}
|
238
456
|
|
239
457
|
function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
|
240
|
-
UFixed sumInsuredUFixed =
|
458
|
+
UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
|
241
459
|
UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
|
242
460
|
return collateralUFixed.toInt();
|
243
461
|
}
|
@@ -245,41 +463,37 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
245
463
|
function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
|
246
464
|
// check caller is registered product
|
247
465
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
466
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
248
467
|
|
249
|
-
//
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
uint256 premiumAmount = policyInfo.premiumAmount;
|
254
|
-
_processPremiumByTreasury(instance, product, policyNftId, premiumAmount);
|
468
|
+
// TODO: check if not paid
|
469
|
+
// TODO: transfer premium
|
470
|
+
// TODO: optionally activate
|
255
471
|
|
256
|
-
//
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
//
|
261
|
-
if(activateAt > zeroTimestamp()) {
|
262
|
-
require(
|
263
|
-
policyInfo.activatedAt.eqz(),
|
264
|
-
"ERROR:PRS-030:ALREADY_ACTIVATED");
|
472
|
+
// // perform actual token transfers (this code is probably not complete)
|
473
|
+
// IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
474
|
+
|
475
|
+
// uint256 premiumAmount = policyInfo.premiumAmount;
|
476
|
+
// _processPremiumByTreasury(instance, productInfo.nftId, policyNftId, premiumAmount);
|
265
477
|
|
266
|
-
|
267
|
-
|
478
|
+
// // policy level book keeping for premium paid
|
479
|
+
// policyInfo.premiumPaidAmount += premiumAmount;
|
268
480
|
|
269
|
-
|
270
|
-
policyInfo.state = ACTIVE();
|
271
|
-
}
|
481
|
+
// instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
272
482
|
|
273
|
-
|
483
|
+
// // optional activation of policy
|
484
|
+
// if(activateAt > zeroTimestamp()) {
|
485
|
+
// activate(policyNftId, activateAt);
|
486
|
+
// }
|
274
487
|
|
275
488
|
// TODO add logging
|
276
489
|
}
|
277
490
|
|
278
|
-
function activate(NftId policyNftId, Timestamp activateAt)
|
491
|
+
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
279
492
|
// check caller is registered product
|
280
493
|
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
494
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
281
495
|
|
282
|
-
IPolicy.PolicyInfo memory policyInfo =
|
496
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
283
497
|
|
284
498
|
require(
|
285
499
|
policyInfo.activatedAt.eqz(),
|
@@ -288,10 +502,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
288
502
|
policyInfo.activatedAt = activateAt;
|
289
503
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
290
504
|
|
291
|
-
|
292
|
-
policyInfo.state = ACTIVE();
|
293
|
-
|
294
|
-
instance.setPolicyInfo(policyInfo);
|
505
|
+
instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
|
295
506
|
|
296
507
|
// TODO add logging
|
297
508
|
}
|
@@ -311,12 +522,15 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
311
522
|
view
|
312
523
|
returns (NftId poolNftid)
|
313
524
|
{
|
314
|
-
|
525
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
526
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
527
|
+
return productSetupInfo.poolNftId;
|
315
528
|
}
|
316
529
|
|
530
|
+
|
317
531
|
function _processPremiumByTreasury(
|
318
532
|
IInstance instance,
|
319
|
-
|
533
|
+
NftId productNftId,
|
320
534
|
NftId policyNftId,
|
321
535
|
uint256 premiumAmount
|
322
536
|
)
|
@@ -325,25 +539,27 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
325
539
|
{
|
326
540
|
// process token transfer(s)
|
327
541
|
if(premiumAmount > 0) {
|
328
|
-
|
329
|
-
|
330
|
-
address
|
542
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
543
|
+
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
544
|
+
address policyOwner = getRegistry().ownerOf(policyNftId);
|
545
|
+
ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
|
546
|
+
address poolWallet = poolSetupInfo.wallet;
|
331
547
|
netPremiumAmount = premiumAmount;
|
332
|
-
Fee memory
|
548
|
+
Fee memory productFee = productSetupInfo.productFee;
|
333
549
|
|
334
|
-
if (FeeLib.feeIsZero(
|
550
|
+
if (FeeLib.feeIsZero(productFee)) {
|
335
551
|
tokenHandler.transfer(
|
336
552
|
policyOwner,
|
337
553
|
poolWallet,
|
338
554
|
premiumAmount
|
339
555
|
);
|
340
556
|
} else {
|
341
|
-
(uint256
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
tokenHandler.transfer(policyOwner,
|
557
|
+
(uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
558
|
+
address productWallet = productSetupInfo.wallet;
|
559
|
+
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
|
560
|
+
revert ErrorIProductServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
|
561
|
+
}
|
562
|
+
tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
|
347
563
|
tokenHandler.transfer(policyOwner, poolWallet, netAmount);
|
348
564
|
netPremiumAmount = netAmount;
|
349
565
|
}
|