@etherisc/gif-next 0.0.2-78bf628-134 → 0.0.2-7a9d124-838
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 +179 -26
- 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 +484 -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 +880 -1080
- 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 +2478 -1095
- 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 +1407 -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 +33 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +27 -158
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +37 -245
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +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 +381 -77
- 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 +313 -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 +499 -78
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +472 -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 +358 -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 +466 -129
- 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 +513 -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} +188 -90
- 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 +14 -14
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +283 -62
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +103 -23
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +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 +134 -8
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +40 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/BaseComponent.sol +26 -23
- package/contracts/components/Distribution.sol +159 -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 +96 -28
- package/contracts/components/Product.sol +199 -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 -43
- package/contracts/instance/IInstanceService.sol +30 -0
- package/contracts/instance/Instance.sol +427 -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 +95 -10
- package/contracts/instance/base/IInstanceBase.sol +6 -2
- package/contracts/instance/base/IKeyValueStore.sol +13 -14
- package/contracts/instance/base/ILifecycle.sol +3 -3
- package/contracts/instance/base/KeyValueStore.sol +49 -38
- package/contracts/instance/base/Lifecycle.sol +11 -3
- 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 +44 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/ComponentOwnerService.sol +238 -83
- 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 +56 -7
- package/contracts/instance/service/PoolService.sol +122 -47
- package/contracts/instance/service/PoolServiceManager.sol +54 -0
- package/contracts/instance/service/ProductService.sol +350 -140
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +80 -37
- package/contracts/registry/IRegistry.sol +47 -25
- package/contracts/registry/IRegistryService.sol +50 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +333 -270
- package/contracts/registry/RegistryService.sol +358 -0
- package/contracts/registry/RegistryServiceManager.sol +80 -0
- package/contracts/registry/TokenRegistry.sol +111 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +6 -2
- package/contracts/shared/INftOwnable.sol +22 -0
- package/contracts/shared/IRegisterable.sol +8 -15
- package/contracts/{instance/base → shared}/IService.sol +3 -3
- package/contracts/shared/IVersionable.sol +55 -11
- package/contracts/shared/NftOwnable.sol +134 -0
- package/contracts/shared/ProxyManager.sol +94 -0
- package/contracts/shared/Registerable.sol +63 -59
- package/contracts/shared/RegisterableUpgradable.sol +16 -0
- package/contracts/shared/Service.sol +55 -0
- package/contracts/shared/TokenHandler.sol +27 -0
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +113 -55
- package/contracts/test/TestFee.sol +2 -2
- package/contracts/test/TestRegisterable.sol +5 -6
- package/contracts/test/TestRoleId.sol +1 -1
- package/contracts/test/TestService.sol +5 -13
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +10 -5
- package/contracts/types/Key32.sol +8 -3
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +44 -11
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +62 -10
- 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 -112
- 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 -112
- 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 -271
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -271
- 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 -84
- 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 -75
- package/contracts/instance/module/component/IComponent.sol +0 -27
- package/contracts/instance/module/policy/IPolicy.sol +0 -61
- package/contracts/instance/module/policy/PolicyModule.sol +0 -77
- 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
|
-
|
343
|
+
policyNftId,
|
153
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,50 @@ 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
|
-
|
377
|
+
// FIXME: this
|
378
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
176
379
|
require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
177
|
-
require(
|
380
|
+
require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
381
|
+
|
382
|
+
NftId bundleNftId;
|
383
|
+
IBundle.BundleInfo memory bundleInfo;
|
384
|
+
uint256 collateralAmount;
|
385
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
178
386
|
|
179
387
|
(
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
bool poolIsVerifying,
|
184
|
-
bytes memory bundleFilter
|
388
|
+
bundleNftId,
|
389
|
+
bundleInfo,
|
390
|
+
collateralAmount
|
185
391
|
) = _getAndVerifyUnderwritingSetup(
|
186
392
|
instance,
|
187
|
-
|
393
|
+
instanceReader,
|
394
|
+
policyInfo,
|
395
|
+
productSetupInfo
|
188
396
|
);
|
189
397
|
|
190
398
|
// lock bundle collateral
|
191
399
|
bundleInfo = _lockCollateralInBundle(
|
192
400
|
instance,
|
401
|
+
bundleNftId,
|
193
402
|
bundleInfo,
|
194
403
|
policyNftId,
|
195
404
|
collateralAmount);
|
405
|
+
|
406
|
+
// optional activation of policy
|
407
|
+
if(activateAt > zeroTimestamp()) {
|
408
|
+
policyInfo.activatedAt = activateAt;
|
409
|
+
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
410
|
+
}
|
196
411
|
|
197
|
-
//
|
412
|
+
// optional collection of premium
|
198
413
|
if(requirePremiumPayment) {
|
199
414
|
uint256 netPremiumAmount = _processPremiumByTreasury(
|
200
415
|
instance,
|
201
|
-
|
416
|
+
productInfo.nftId,
|
202
417
|
policyNftId,
|
203
418
|
policyInfo.premiumAmount);
|
204
419
|
|
@@ -206,38 +421,31 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
206
421
|
bundleInfo.balanceAmount += netPremiumAmount;
|
207
422
|
}
|
208
423
|
|
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
|
-
);
|
424
|
+
instance.updatePolicy(policyNftId, policyInfo, UNDERWRITTEN());
|
425
|
+
_poolService.updateBundle(productInfo.parentNftId, bundleNftId, bundleInfo, KEEP_STATE());
|
426
|
+
|
427
|
+
// involve pool if necessary
|
428
|
+
{
|
429
|
+
NftId poolNftId = bundleInfo.poolNftId;
|
430
|
+
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
431
|
+
|
432
|
+
// FIXME: use poolInfo.isVerifying ???
|
433
|
+
if(poolInfo.isIntercepting) {
|
434
|
+
_underwriteByPool(
|
435
|
+
poolNftId,
|
436
|
+
policyNftId,
|
437
|
+
policyInfo,
|
438
|
+
bundleInfo.filter,
|
439
|
+
collateralAmount
|
440
|
+
);
|
441
|
+
}
|
234
442
|
}
|
235
443
|
|
236
444
|
// TODO add logging
|
237
445
|
}
|
238
446
|
|
239
447
|
function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
|
240
|
-
UFixed sumInsuredUFixed =
|
448
|
+
UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
|
241
449
|
UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
|
242
450
|
return collateralUFixed.toInt();
|
243
451
|
}
|
@@ -247,51 +455,49 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
247
455
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
248
456
|
|
249
457
|
// perform actual token transfers
|
250
|
-
|
251
|
-
|
458
|
+
// FIXME: this
|
459
|
+
// IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
|
460
|
+
// ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productInfo.nftId);
|
252
461
|
|
253
|
-
uint256 premiumAmount = policyInfo.premiumAmount;
|
254
|
-
_processPremiumByTreasury(instance,
|
462
|
+
// uint256 premiumAmount = policyInfo.premiumAmount;
|
463
|
+
// _processPremiumByTreasury(instance, productInfo.nftId, treasuryInfo, policyNftId, premiumAmount);
|
255
464
|
|
256
|
-
// policy level book keeping for premium paid
|
257
|
-
policyInfo.premiumPaidAmount += premiumAmount;
|
258
|
-
policyInfo.updatedIn = blockNumber();
|
465
|
+
// // policy level book keeping for premium paid
|
466
|
+
// policyInfo.premiumPaidAmount += premiumAmount;
|
259
467
|
|
260
|
-
// optional activation of policy
|
261
|
-
if(activateAt > zeroTimestamp()) {
|
262
|
-
|
263
|
-
|
264
|
-
|
468
|
+
// // optional activation of policy
|
469
|
+
// if(activateAt > zeroTimestamp()) {
|
470
|
+
// require(
|
471
|
+
// policyInfo.activatedAt.eqz(),
|
472
|
+
// "ERROR:PRS-030:ALREADY_ACTIVATED");
|
265
473
|
|
266
|
-
|
267
|
-
|
474
|
+
// policyInfo.activatedAt = activateAt;
|
475
|
+
// policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
268
476
|
|
269
|
-
|
270
|
-
|
271
|
-
}
|
477
|
+
// instance.updatePolicyState(policyNftId, ACTIVE());
|
478
|
+
// }
|
272
479
|
|
273
|
-
instance.setPolicyInfo(policyInfo);
|
480
|
+
// instance.setPolicyInfo(policyNftId, policyInfo);
|
274
481
|
|
275
482
|
// TODO add logging
|
276
483
|
}
|
277
484
|
|
485
|
+
// FIXME: this
|
278
486
|
function activate(NftId policyNftId, Timestamp activateAt) external override {
|
279
487
|
// check caller is registered product
|
280
488
|
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
281
489
|
|
282
|
-
IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
|
490
|
+
// IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
|
283
491
|
|
284
|
-
require(
|
285
|
-
|
286
|
-
|
492
|
+
// require(
|
493
|
+
// policyInfo.activatedAt.eqz(),
|
494
|
+
// "ERROR:PRS-020:ALREADY_ACTIVATED");
|
287
495
|
|
288
|
-
policyInfo.activatedAt = activateAt;
|
289
|
-
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
496
|
+
// policyInfo.activatedAt = activateAt;
|
497
|
+
// policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
290
498
|
|
291
|
-
//
|
292
|
-
|
293
|
-
|
294
|
-
instance.setPolicyInfo(policyInfo);
|
499
|
+
// instance.setPolicyInfo(policyNftId, policyInfo);
|
500
|
+
// instance.updatePolicyState(policyNftId, ACTIVE());
|
295
501
|
|
296
502
|
// TODO add logging
|
297
503
|
}
|
@@ -311,12 +517,14 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
311
517
|
view
|
312
518
|
returns (NftId poolNftid)
|
313
519
|
{
|
314
|
-
|
520
|
+
// FIXME: this
|
521
|
+
// return instance.getTreasuryInfo(productNftId).poolNftId;
|
315
522
|
}
|
316
523
|
|
524
|
+
|
317
525
|
function _processPremiumByTreasury(
|
318
526
|
IInstance instance,
|
319
|
-
|
527
|
+
NftId productNftId,
|
320
528
|
NftId policyNftId,
|
321
529
|
uint256 premiumAmount
|
322
530
|
)
|
@@ -325,28 +533,30 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
325
533
|
{
|
326
534
|
// process token transfer(s)
|
327
535
|
if(premiumAmount > 0) {
|
328
|
-
|
329
|
-
|
330
|
-
address
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
536
|
+
// FIXME: this
|
537
|
+
// TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
|
538
|
+
// address policyOwner = getRegistry().ownerOf(policyNftId);
|
539
|
+
// address poolWallet = instance.getComponentWallet(treasuryInfo.poolNftId);
|
540
|
+
// netPremiumAmount = premiumAmount;
|
541
|
+
// Fee memory productFee = treasuryInfo.productFee;
|
542
|
+
|
543
|
+
// if (FeeLib.feeIsZero(productFee)) {
|
544
|
+
// tokenHandler.transfer(
|
545
|
+
// policyOwner,
|
546
|
+
// poolWallet,
|
547
|
+
// premiumAmount
|
548
|
+
// );
|
549
|
+
// } else {
|
550
|
+
// (uint256 feeAmount, uint256 netAmount) = instance.calculateFeeAmount(
|
551
|
+
// premiumAmount,
|
552
|
+
// productFee
|
553
|
+
// );
|
554
|
+
|
555
|
+
// address productWallet = instance.getComponentWallet(productNftId);
|
556
|
+
// tokenHandler.transfer(policyOwner, productWallet, feeAmount);
|
557
|
+
// tokenHandler.transfer(policyOwner, poolWallet, netAmount);
|
558
|
+
// netPremiumAmount = netAmount;
|
559
|
+
// }
|
350
560
|
}
|
351
561
|
|
352
562
|
// TODO add logging
|