@etherisc/gif-next 0.0.2-f752d2a-551 → 0.0.2-f79a517-071
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 +175 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +166 -39
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +557 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +119 -39
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +177 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +108 -156
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +67 -139
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +417 -88
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +360 -51
- 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/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- 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/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +768 -694
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +954 -816
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +224 -43
- 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 +49 -0
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IService.sol/IService.json +174 -53
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +263 -45
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +41 -23
- 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/base/ModuleBase.sol/ModuleBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +220 -52
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +55 -54
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +56 -55
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +22 -93
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +22 -93
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/distribution/DistributionModule.sol/DistributionModule.json +10 -0
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistribution.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{compensation/ICompensation.sol/ICompensation.json → distribution/IDistribution.sol/IDistribution.json} +2 -2
- package/artifacts/contracts/instance/module/distribution/IDistribution.sol/IDistributionModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{compensation/ICompensation.sol/ICompensationModule.json → distribution/IDistribution.sol/IDistributionModule.json} +2 -2
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +61 -51
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +61 -51
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +1 -1
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +29 -14
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +28 -13
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +104 -1
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +126 -5
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +326 -221
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +326 -221
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +374 -70
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +630 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +176 -74
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +446 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +235 -50
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +325 -51
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +335 -53
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +468 -73
- 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 +190 -51
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +872 -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 +380 -139
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1245 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +496 -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/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/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/TestDistribution.sol/TestDistribution.dbg.json +4 -0
- package/artifacts/contracts/test/TestDistribution.sol/TestDistribution.json +557 -0
- 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/TestPool.sol/TestPool.dbg.json +1 -1
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +417 -88
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +1 -1
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +407 -56
- 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 +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +267 -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 +89 -25
- 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/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 +2 -2
- 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/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ReferralId.sol/ReferralIdLib.json +99 -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 +2 -2
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- 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 +2 -2
- package/contracts/components/BaseComponent.sol +11 -20
- package/contracts/components/Distribution.sol +155 -0
- package/contracts/components/IBaseComponent.sol +1 -1
- package/contracts/components/IDistributionComponent.sol +46 -0
- package/contracts/components/IPoolComponent.sol +15 -8
- package/contracts/components/IProductComponent.sol +26 -8
- package/contracts/components/Pool.sol +99 -27
- package/contracts/components/Product.sol +204 -22
- package/contracts/experiment/cloning/Cloner.sol +47 -0
- package/contracts/instance/IInstance.sol +11 -11
- package/contracts/instance/Instance.sol +28 -13
- package/contracts/instance/base/ComponentServiceBase.sol +13 -6
- package/contracts/instance/base/IInstanceBase.sol +11 -2
- package/contracts/instance/base/IKeyValueStore.sol +4 -3
- package/contracts/instance/base/InstanceBase.sol +19 -10
- package/contracts/instance/base/KeyValueStore.sol +12 -7
- package/contracts/instance/base/Lifecycle.sol +15 -10
- package/contracts/instance/base/ModuleBase.sol +22 -17
- package/contracts/instance/base/ServiceBase.sol +20 -13
- package/contracts/instance/module/bundle/BundleModule.sol +10 -12
- package/contracts/instance/module/bundle/IBundle.sol +6 -11
- package/contracts/instance/module/component/ComponentModule.sol +33 -57
- package/contracts/instance/module/component/IComponent.sol +6 -31
- package/contracts/instance/module/distribution/DistributionModule.sol +17 -0
- package/contracts/instance/module/distribution/IDistribution.sol +10 -0
- package/contracts/instance/module/policy/IPolicy.sol +13 -10
- package/contracts/instance/module/policy/PolicyModule.sol +35 -20
- package/contracts/instance/module/pool/IPoolModule.sol +4 -4
- package/contracts/instance/module/pool/PoolModule.sol +23 -15
- package/contracts/instance/module/risk/IRisk.sol +18 -2
- package/contracts/instance/module/risk/RiskModule.sol +56 -2
- package/contracts/instance/module/treasury/ITreasury.sol +31 -50
- package/contracts/instance/module/treasury/TokenHandler.sol +1 -1
- package/contracts/instance/module/treasury/TreasuryModule.sol +70 -91
- package/contracts/instance/service/ComponentOwnerService.sol +238 -93
- package/contracts/instance/service/DistributionService.sol +54 -0
- package/contracts/instance/service/IComponentOwnerService.sol +0 -2
- package/contracts/instance/service/IDistributionService.sol +12 -0
- package/contracts/instance/service/IPoolService.sol +7 -0
- package/contracts/instance/service/IProductService.sol +56 -7
- package/contracts/instance/service/PoolService.sol +49 -23
- package/contracts/instance/service/ProductService.sol +250 -94
- package/contracts/registry/ChainNft.sol +80 -37
- package/contracts/registry/IRegistry.sol +28 -28
- package/contracts/registry/IRegistryService.sol +35 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +314 -272
- package/contracts/registry/RegistryService.sol +441 -0
- package/contracts/registry/RegistryServiceManager.sol +64 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/INftOwnable.sol +22 -0
- package/contracts/shared/IRegisterable.sol +8 -15
- package/contracts/shared/IVersionable.sol +55 -11
- package/contracts/shared/NftOwnable.sol +136 -0
- package/contracts/shared/ProxyManager.sol +94 -0
- package/contracts/shared/Registerable.sol +62 -59
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +112 -54
- package/contracts/test/TestDistribution.sol +22 -0
- package/contracts/test/TestFee.sol +2 -2
- package/contracts/test/TestPool.sol +7 -2
- package/contracts/test/TestProduct.sol +37 -7
- package/contracts/test/TestRegisterable.sol +5 -6
- package/contracts/test/TestService.sol +5 -11
- package/contracts/types/Fee.sol +10 -5
- package/contracts/types/ObjectType.sol +24 -8
- package/contracts/types/ReferralId.sol +48 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +9 -2
- package/contracts/types/UFixed.sol +128 -12
- package/contracts/types/Version.sol +9 -0
- package/package.json +4 -3
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.json +0 -10
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
- package/artifacts/contracts/instance/module/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/ICompensationModule.dbg.json +0 -4
- 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/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
- package/contracts/experiment/statemachine/README.md +0 -112
- package/contracts/instance/module/access/Access.sol +0 -149
- package/contracts/instance/module/access/IAccess.sol +0 -53
- package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
- package/contracts/instance/module/compensation/ICompensation.sol +0 -10
- package/contracts/registry/IChainNft.sol +0 -21
- package/contracts/registry/IRegistryLinked.sol +0 -8
- package/contracts/shared/IOwnable.sol +0 -6
@@ -3,16 +3,19 @@ pragma solidity ^0.8.19;
|
|
3
3
|
|
4
4
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
5
|
import {IInstance} from "../../instance/IInstance.sol";
|
6
|
+
import {IBundle} from "../../instance/module/bundle/IBundle.sol";
|
6
7
|
import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
|
7
8
|
|
8
9
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
9
10
|
import {Versionable} from "../../shared/Versionable.sol";
|
10
11
|
|
11
|
-
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
12
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
12
13
|
import {POOL, BUNDLE} from "../../types/ObjectType.sol";
|
13
14
|
import {Fee} from "../../types/Fee.sol";
|
14
15
|
import {Version, VersionLib} from "../../types/Version.sol";
|
15
16
|
|
17
|
+
import {IService} from "../base/IService.sol";
|
18
|
+
import {ServiceBase} from "../base/ServiceBase.sol";
|
16
19
|
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
17
20
|
import {IPoolService} from "./IPoolService.sol";
|
18
21
|
|
@@ -24,38 +27,38 @@ contract PoolService is ComponentServiceBase, IPoolService {
|
|
24
27
|
|
25
28
|
constructor(
|
26
29
|
address registry,
|
27
|
-
NftId registryNftId
|
28
|
-
|
30
|
+
NftId registryNftId,
|
31
|
+
address initialOwner
|
32
|
+
) ComponentServiceBase(registry, registryNftId, initialOwner)
|
29
33
|
{
|
30
34
|
_registerInterface(type(IPoolService).interfaceId);
|
31
35
|
}
|
32
36
|
|
33
|
-
function
|
34
|
-
public
|
35
|
-
pure
|
36
|
-
virtual override (IVersionable, Versionable)
|
37
|
-
returns(Version)
|
38
|
-
{
|
39
|
-
return VersionLib.toVersion(3,0,0);
|
40
|
-
}
|
41
|
-
|
42
|
-
function getName() external pure override returns(string memory name) {
|
37
|
+
function getName() public pure override(IService, ServiceBase) returns(string memory name) {
|
43
38
|
return NAME;
|
44
39
|
}
|
45
40
|
|
46
41
|
function setFees(
|
42
|
+
Fee memory poolFee,
|
47
43
|
Fee memory stakingFee,
|
48
44
|
Fee memory performanceFee
|
49
45
|
)
|
50
46
|
external
|
51
47
|
override
|
52
48
|
{
|
53
|
-
(IRegistry.ObjectInfo memory
|
54
|
-
|
49
|
+
(IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
50
|
+
|
51
|
+
NftId productNftId = instance.getProductNftId(poolInfo.nftId);
|
52
|
+
ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
|
53
|
+
treasuryInfo.poolFee = poolFee;
|
54
|
+
treasuryInfo.stakingFee = stakingFee;
|
55
|
+
treasuryInfo.performanceFee = performanceFee;
|
56
|
+
instance.setTreasuryInfo(productNftId, treasuryInfo);
|
55
57
|
}
|
56
58
|
|
57
59
|
function createBundle(
|
58
60
|
address owner,
|
61
|
+
Fee memory fee,
|
59
62
|
uint256 stakingAmount,
|
60
63
|
uint256 lifetime,
|
61
64
|
bytes calldata filter
|
@@ -68,16 +71,23 @@ contract PoolService is ComponentServiceBase, IPoolService {
|
|
68
71
|
|
69
72
|
// register bundle with registry
|
70
73
|
NftId poolNftId = info.nftId;
|
71
|
-
bundleNftId =
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
74
|
+
bundleNftId = getRegistryService().registerBundle(
|
75
|
+
IRegistry.ObjectInfo(
|
76
|
+
zeroNftId(),
|
77
|
+
poolNftId,
|
78
|
+
BUNDLE(),
|
79
|
+
false, // intercepting property for bundles is defined on pool
|
80
|
+
address(0),
|
81
|
+
owner,
|
82
|
+
""
|
83
|
+
)
|
84
|
+
);
|
76
85
|
|
77
86
|
// create bundle info in instance
|
78
87
|
instance.createBundleInfo(
|
79
88
|
bundleNftId,
|
80
89
|
poolNftId,
|
90
|
+
fee,
|
81
91
|
stakingAmount,
|
82
92
|
lifetime,
|
83
93
|
filter);
|
@@ -98,6 +108,21 @@ contract PoolService is ComponentServiceBase, IPoolService {
|
|
98
108
|
// TODO add logging
|
99
109
|
}
|
100
110
|
|
111
|
+
function setBundleFee(
|
112
|
+
NftId bundleNftId,
|
113
|
+
Fee memory fee
|
114
|
+
)
|
115
|
+
external
|
116
|
+
override
|
117
|
+
{
|
118
|
+
(IRegistry.ObjectInfo memory poolInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(POOL());
|
119
|
+
IBundle.BundleInfo memory bundleInfo = instance.getBundleInfo(bundleNftId);
|
120
|
+
require(bundleInfo.poolNftId.gtz(), "ERROR:PLS-010:BUNDLE_UNKNOWN");
|
121
|
+
require(poolInfo.nftId == bundleInfo.poolNftId, "ERROR:PLS-011:BUNDLE_POOL_MISMATCH");
|
122
|
+
bundleInfo.fee = fee;
|
123
|
+
instance.setBundleInfo(bundleNftId, bundleInfo);
|
124
|
+
}
|
125
|
+
|
101
126
|
|
102
127
|
function _processStakingByTreasury(
|
103
128
|
IInstance instance,
|
@@ -109,9 +134,10 @@ contract PoolService is ComponentServiceBase, IPoolService {
|
|
109
134
|
{
|
110
135
|
// process token transfer(s)
|
111
136
|
if(stakingAmount > 0) {
|
112
|
-
|
113
|
-
|
114
|
-
address
|
137
|
+
NftId productNftId = instance.getProductNftId(poolNftId);
|
138
|
+
TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
|
139
|
+
address bundleOwner = getRegistry().ownerOf(bundleNftId);
|
140
|
+
address poolWallet = instance.getComponentWallet(poolNftId);
|
115
141
|
|
116
142
|
tokenHandler.transfer(
|
117
143
|
bundleOwner,
|
@@ -2,10 +2,14 @@
|
|
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";
|
8
|
+
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
6
9
|
import {IInstance} from "../../instance/IInstance.sol";
|
7
10
|
import {IPolicy, IPolicyModule} from "../module/policy/IPolicy.sol";
|
8
11
|
import {IPool} from "../module/pool/IPoolModule.sol";
|
12
|
+
import {IRisk} from "../module/risk/IRisk.sol";
|
9
13
|
import {IBundle} from "../module/bundle/IBundle.sol";
|
10
14
|
import {IProductService} from "./IProductService.sol";
|
11
15
|
import {ITreasury, ITreasuryModule, TokenHandler} from "../../instance/module/treasury/ITreasury.sol";
|
@@ -14,14 +18,19 @@ import {IVersionable} from "../../shared/IVersionable.sol";
|
|
14
18
|
import {Versionable} from "../../shared/Versionable.sol";
|
15
19
|
|
16
20
|
import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
|
17
|
-
import {UFixed,
|
21
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
22
|
+
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
18
23
|
import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
|
19
24
|
import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
|
20
|
-
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
21
|
-
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
25
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
22
26
|
import {Fee, FeeLib} from "../../types/Fee.sol";
|
27
|
+
import {ReferralId} from "../../types/ReferralId.sol";
|
28
|
+
import {RiskId} from "../../types/RiskId.sol";
|
29
|
+
import {StateId} from "../../types/StateId.sol";
|
23
30
|
import {Version, VersionLib} from "../../types/Version.sol";
|
24
31
|
|
32
|
+
import {IService} from "../base/IService.sol";
|
33
|
+
import {ServiceBase} from "../base/ServiceBase.sol";
|
25
34
|
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
26
35
|
import {IProductService} from "./IProductService.sol";
|
27
36
|
|
@@ -35,57 +44,186 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
35
44
|
|
36
45
|
constructor(
|
37
46
|
address registry,
|
38
|
-
NftId registryNftId
|
39
|
-
|
47
|
+
NftId registryNftId,
|
48
|
+
address initialOwner
|
49
|
+
) ComponentServiceBase(registry, registryNftId, initialOwner)
|
40
50
|
{
|
41
51
|
_registerInterface(type(IProductService).interfaceId);
|
42
52
|
}
|
43
53
|
|
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
54
|
|
53
|
-
function getName()
|
55
|
+
function getName() public pure override(IService, ServiceBase) returns(string memory name) {
|
54
56
|
return NAME;
|
55
57
|
}
|
56
58
|
|
57
59
|
function setFees(
|
58
|
-
Fee memory
|
60
|
+
Fee memory productFee,
|
59
61
|
Fee memory processingFee
|
60
62
|
)
|
61
63
|
external
|
62
64
|
override
|
63
65
|
{
|
64
66
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
65
|
-
|
67
|
+
NftId productNftId = productInfo.nftId;
|
68
|
+
ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productNftId);
|
69
|
+
treasuryInfo.productFee = productFee;
|
70
|
+
treasuryInfo.processingFee = processingFee;
|
71
|
+
instance.setTreasuryInfo(productNftId, treasuryInfo);
|
72
|
+
}
|
73
|
+
|
74
|
+
function createRisk(
|
75
|
+
RiskId riskId,
|
76
|
+
bytes memory data
|
77
|
+
) external override {
|
78
|
+
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
79
|
+
NftId productNftId = productInfo.nftId;
|
80
|
+
instance.createRisk(
|
81
|
+
riskId,
|
82
|
+
productNftId,
|
83
|
+
data
|
84
|
+
);
|
85
|
+
}
|
86
|
+
|
87
|
+
function setRiskInfo(
|
88
|
+
RiskId riskId,
|
89
|
+
IRisk.RiskInfo memory info
|
90
|
+
) external {
|
91
|
+
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
92
|
+
instance.setRiskInfo(
|
93
|
+
riskId,
|
94
|
+
info
|
95
|
+
);
|
96
|
+
}
|
97
|
+
|
98
|
+
function updateRiskState(
|
99
|
+
RiskId riskId,
|
100
|
+
StateId state
|
101
|
+
) external {
|
102
|
+
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
103
|
+
instance.updateRiskState(
|
104
|
+
riskId,
|
105
|
+
state
|
106
|
+
);
|
107
|
+
}
|
108
|
+
|
109
|
+
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
110
|
+
IRegistry.ObjectInfo memory productInfo;
|
111
|
+
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
112
|
+
product = Product(productInfo.objectAddress);
|
113
|
+
}
|
114
|
+
|
115
|
+
function calculatePremium(
|
116
|
+
RiskId riskId,
|
117
|
+
uint256 sumInsuredAmount,
|
118
|
+
uint256 lifetime,
|
119
|
+
bytes memory applicationData,
|
120
|
+
NftId bundleNftId,
|
121
|
+
ReferralId referralId
|
122
|
+
)
|
123
|
+
public
|
124
|
+
view
|
125
|
+
override
|
126
|
+
returns (
|
127
|
+
uint256 premiumAmount,
|
128
|
+
uint256 productFeeAmount,
|
129
|
+
uint256 poolFeeAmount,
|
130
|
+
uint256 bundleFeeAmount,
|
131
|
+
uint256 distributionFeeAmount
|
132
|
+
)
|
133
|
+
{
|
134
|
+
Product product = _getAndVerifyInstanceAndProduct();
|
135
|
+
uint256 netPremiumAmount = product.calculateNetPremium(
|
136
|
+
sumInsuredAmount,
|
137
|
+
riskId,
|
138
|
+
lifetime,
|
139
|
+
applicationData
|
140
|
+
);
|
141
|
+
|
142
|
+
(
|
143
|
+
productFeeAmount,
|
144
|
+
poolFeeAmount,
|
145
|
+
bundleFeeAmount,
|
146
|
+
distributionFeeAmount
|
147
|
+
) = _calculateFeeAmounts(
|
148
|
+
netPremiumAmount,
|
149
|
+
product,
|
150
|
+
bundleNftId,
|
151
|
+
referralId
|
152
|
+
);
|
153
|
+
|
154
|
+
premiumAmount = netPremiumAmount + productFeeAmount;
|
155
|
+
premiumAmount += poolFeeAmount + bundleFeeAmount;
|
156
|
+
premiumAmount += distributionFeeAmount;
|
157
|
+
}
|
158
|
+
|
159
|
+
function _calculateFeeAmounts(
|
160
|
+
uint256 netPremiumAmount,
|
161
|
+
Product product,
|
162
|
+
NftId bundleNftId,
|
163
|
+
ReferralId referralId
|
164
|
+
)
|
165
|
+
internal
|
166
|
+
view
|
167
|
+
returns (
|
168
|
+
uint256 productFeeAmount,
|
169
|
+
uint256 poolFeeAmount,
|
170
|
+
uint256 bundleFeeAmount,
|
171
|
+
uint256 distributionFeeAmount
|
172
|
+
)
|
173
|
+
{
|
174
|
+
IInstance instance = product.getInstance();
|
175
|
+
ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(product.getNftId());
|
176
|
+
IBundle.BundleInfo memory bundleInfo = instance.getBundleInfo(bundleNftId);
|
177
|
+
require(bundleInfo.poolNftId == treasuryInfo.poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
|
178
|
+
|
179
|
+
(productFeeAmount,) = FeeLib.calculateFee(treasuryInfo.productFee, netPremiumAmount);
|
180
|
+
(poolFeeAmount,) = FeeLib.calculateFee(treasuryInfo.poolFee, netPremiumAmount);
|
181
|
+
(bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
|
182
|
+
|
183
|
+
IRegistry.ObjectInfo memory distributionInfo = getRegistry().getObjectInfo(treasuryInfo.distributionNftId);
|
184
|
+
IDistributionComponent distribution = IDistributionComponent(distributionInfo.objectAddress);
|
185
|
+
distributionFeeAmount = distribution.calculateFeeAmount(referralId, netPremiumAmount);
|
66
186
|
}
|
67
187
|
|
188
|
+
|
68
189
|
function createApplication(
|
69
190
|
address applicationOwner,
|
191
|
+
RiskId riskId,
|
70
192
|
uint256 sumInsuredAmount,
|
71
|
-
uint256 premiumAmount,
|
72
193
|
uint256 lifetime,
|
73
|
-
|
194
|
+
bytes memory applicationData,
|
195
|
+
NftId bundleNftId,
|
196
|
+
ReferralId referralId
|
74
197
|
) external override returns (NftId policyNftId) {
|
75
198
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
76
|
-
NftId productNftId = productInfo.nftId;
|
77
199
|
// TODO add validations (see create bundle in pool service)
|
78
200
|
|
79
|
-
policyNftId =
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
201
|
+
policyNftId = getRegistryService().registerPolicy(
|
202
|
+
IRegistry.ObjectInfo(
|
203
|
+
zeroNftId(),
|
204
|
+
productInfo.nftId,
|
205
|
+
POLICY(),
|
206
|
+
false, // intercepting property for policies is defined on product
|
207
|
+
address(0),
|
208
|
+
applicationOwner,
|
209
|
+
""
|
210
|
+
)
|
84
211
|
);
|
85
212
|
|
86
|
-
|
87
|
-
|
213
|
+
(uint256 premiumAmount,,,,) = calculatePremium(
|
214
|
+
riskId,
|
215
|
+
sumInsuredAmount,
|
216
|
+
lifetime,
|
217
|
+
applicationData,
|
218
|
+
bundleNftId,
|
219
|
+
referralId
|
220
|
+
);
|
221
|
+
|
222
|
+
instance.createPolicyInfo(
|
88
223
|
policyNftId,
|
224
|
+
productInfo.nftId,
|
225
|
+
referralId,
|
226
|
+
riskId,
|
89
227
|
sumInsuredAmount,
|
90
228
|
premiumAmount,
|
91
229
|
lifetime,
|
@@ -102,30 +240,29 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
102
240
|
internal
|
103
241
|
view
|
104
242
|
returns (
|
105
|
-
ITreasury.
|
243
|
+
ITreasury.TreasuryInfo memory treasuryInfo,
|
244
|
+
NftId bundleNftId,
|
106
245
|
IBundle.BundleInfo memory bundleInfo,
|
107
|
-
uint256 collateralAmount
|
108
|
-
bool poolIsVerifying,
|
109
|
-
bytes memory bundleFilter
|
246
|
+
uint256 collateralAmount
|
110
247
|
)
|
111
248
|
{
|
112
249
|
// check match between policy and bundle (via pool)
|
113
|
-
|
114
|
-
|
115
|
-
|
250
|
+
treasuryInfo = instance.getTreasuryInfo(policyInfo.productNftId);
|
251
|
+
bundleNftId = policyInfo.bundleNftId;
|
252
|
+
bundleInfo = instance.getBundleInfo(bundleNftId);
|
253
|
+
require(bundleInfo.poolNftId == treasuryInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
|
116
254
|
|
117
255
|
// calculate required collateral
|
118
|
-
NftId poolNftId =
|
256
|
+
NftId poolNftId = treasuryInfo.poolNftId;
|
119
257
|
IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
|
120
258
|
|
121
259
|
// obtain remaining return values
|
122
|
-
poolIsVerifying = poolInfo.isVerifying;
|
123
260
|
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
124
|
-
bundleFilter = bundleInfo.filter;
|
125
261
|
}
|
126
262
|
|
127
263
|
function _lockCollateralInBundle(
|
128
264
|
IInstance instance,
|
265
|
+
NftId bundleNftId,
|
129
266
|
IBundle.BundleInfo memory bundleInfo,
|
130
267
|
NftId policyNftId,
|
131
268
|
uint256 collateralAmount
|
@@ -134,28 +271,39 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
134
271
|
returns (IBundle.BundleInfo memory)
|
135
272
|
{
|
136
273
|
bundleInfo.lockedAmount += collateralAmount;
|
137
|
-
instance.collateralizePolicy(
|
274
|
+
instance.collateralizePolicy(bundleNftId, policyNftId, collateralAmount);
|
138
275
|
return bundleInfo;
|
139
276
|
}
|
140
277
|
|
141
278
|
function _underwriteByPool(
|
142
|
-
ITreasury.
|
279
|
+
ITreasury.TreasuryInfo memory treasuryInfo,
|
280
|
+
NftId policyNftId,
|
143
281
|
IPolicy.PolicyInfo memory policyInfo,
|
144
282
|
bytes memory bundleFilter,
|
145
283
|
uint256 collateralAmount
|
146
284
|
)
|
147
285
|
internal
|
148
286
|
{
|
149
|
-
address poolAddress =
|
287
|
+
address poolAddress = getRegistry().getObjectInfo(treasuryInfo.poolNftId).objectAddress;
|
150
288
|
IPoolComponent pool = IPoolComponent(poolAddress);
|
151
289
|
pool.underwrite(
|
152
|
-
|
153
|
-
policyInfo.
|
290
|
+
policyNftId,
|
291
|
+
policyInfo.applicationData,
|
154
292
|
bundleFilter,
|
155
293
|
collateralAmount);
|
156
294
|
}
|
157
295
|
|
158
296
|
|
297
|
+
function revoke(
|
298
|
+
NftId policyNftId
|
299
|
+
)
|
300
|
+
external
|
301
|
+
override
|
302
|
+
{
|
303
|
+
require(false, "ERROR:PRS-234:NOT_YET_IMPLEMENTED");
|
304
|
+
}
|
305
|
+
|
306
|
+
|
159
307
|
function underwrite(
|
160
308
|
NftId policyNftId,
|
161
309
|
bool requirePremiumPayment,
|
@@ -174,14 +322,18 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
174
322
|
NftId productNftId = productInfo.nftId;
|
175
323
|
IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
|
176
324
|
require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
177
|
-
require(
|
325
|
+
require(instance.getState(policyNftId.toKey32(POLICY())) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
326
|
+
|
327
|
+
ITreasury.TreasuryInfo memory treasuryInfo;
|
328
|
+
NftId bundleNftId;
|
329
|
+
IBundle.BundleInfo memory bundleInfo;
|
330
|
+
uint256 collateralAmount;
|
178
331
|
|
179
332
|
(
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
bytes memory bundleFilter
|
333
|
+
treasuryInfo,
|
334
|
+
bundleNftId,
|
335
|
+
bundleInfo,
|
336
|
+
collateralAmount
|
185
337
|
) = _getAndVerifyUnderwritingSetup(
|
186
338
|
instance,
|
187
339
|
policyInfo
|
@@ -190,15 +342,28 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
190
342
|
// lock bundle collateral
|
191
343
|
bundleInfo = _lockCollateralInBundle(
|
192
344
|
instance,
|
345
|
+
bundleNftId,
|
193
346
|
bundleInfo,
|
194
347
|
policyNftId,
|
195
348
|
collateralAmount);
|
196
349
|
|
197
|
-
//
|
350
|
+
// set policy state to underwritten
|
351
|
+
instance.updatePolicyState(policyNftId, UNDERWRITTEN());
|
352
|
+
|
353
|
+
// optional activation of policy
|
354
|
+
if(activateAt > zeroTimestamp()) {
|
355
|
+
policyInfo.activatedAt = activateAt;
|
356
|
+
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
357
|
+
|
358
|
+
instance.updatePolicyState(policyNftId, ACTIVE());
|
359
|
+
}
|
360
|
+
|
361
|
+
// optional collection of premium
|
198
362
|
if(requirePremiumPayment) {
|
199
363
|
uint256 netPremiumAmount = _processPremiumByTreasury(
|
200
364
|
instance,
|
201
|
-
|
365
|
+
productInfo.nftId,
|
366
|
+
treasuryInfo,
|
202
367
|
policyNftId,
|
203
368
|
policyInfo.premiumAmount);
|
204
369
|
|
@@ -206,38 +371,30 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
206
371
|
bundleInfo.balanceAmount += netPremiumAmount;
|
207
372
|
}
|
208
373
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
// integrate pool component
|
227
|
-
if(poolIsVerifying) {
|
228
|
-
_underwriteByPool(
|
229
|
-
productSetup,
|
230
|
-
policyInfo,
|
231
|
-
bundleFilter,
|
232
|
-
collateralAmount
|
233
|
-
);
|
374
|
+
instance.setPolicyInfo(policyNftId, policyInfo);
|
375
|
+
instance.setBundleInfo(bundleNftId, bundleInfo);
|
376
|
+
|
377
|
+
// involve pool if necessary
|
378
|
+
{
|
379
|
+
NftId poolNftId = treasuryInfo.poolNftId;
|
380
|
+
IPool.PoolInfo memory poolInfo = instance.getPoolInfo(poolNftId);
|
381
|
+
|
382
|
+
if(poolInfo.isVerifying) {
|
383
|
+
_underwriteByPool(
|
384
|
+
treasuryInfo,
|
385
|
+
policyNftId,
|
386
|
+
policyInfo,
|
387
|
+
bundleInfo.filter,
|
388
|
+
collateralAmount
|
389
|
+
);
|
390
|
+
}
|
234
391
|
}
|
235
392
|
|
236
393
|
// TODO add logging
|
237
394
|
}
|
238
395
|
|
239
396
|
function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
|
240
|
-
UFixed sumInsuredUFixed =
|
397
|
+
UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
|
241
398
|
UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
|
242
399
|
return collateralUFixed.toInt();
|
243
400
|
}
|
@@ -248,14 +405,13 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
248
405
|
|
249
406
|
// perform actual token transfers
|
250
407
|
IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
|
251
|
-
ITreasury.
|
408
|
+
ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productInfo.nftId);
|
252
409
|
|
253
410
|
uint256 premiumAmount = policyInfo.premiumAmount;
|
254
|
-
_processPremiumByTreasury(instance,
|
411
|
+
_processPremiumByTreasury(instance, productInfo.nftId, treasuryInfo, policyNftId, premiumAmount);
|
255
412
|
|
256
413
|
// policy level book keeping for premium paid
|
257
414
|
policyInfo.premiumPaidAmount += premiumAmount;
|
258
|
-
policyInfo.updatedIn = blockNumber();
|
259
415
|
|
260
416
|
// optional activation of policy
|
261
417
|
if(activateAt > zeroTimestamp()) {
|
@@ -266,11 +422,10 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
266
422
|
policyInfo.activatedAt = activateAt;
|
267
423
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
268
424
|
|
269
|
-
|
270
|
-
policyInfo.state = ACTIVE();
|
425
|
+
instance.updatePolicyState(policyNftId, ACTIVE());
|
271
426
|
}
|
272
427
|
|
273
|
-
instance.setPolicyInfo(policyInfo);
|
428
|
+
instance.setPolicyInfo(policyNftId, policyInfo);
|
274
429
|
|
275
430
|
// TODO add logging
|
276
431
|
}
|
@@ -288,10 +443,8 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
288
443
|
policyInfo.activatedAt = activateAt;
|
289
444
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
290
445
|
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
instance.setPolicyInfo(policyInfo);
|
446
|
+
instance.setPolicyInfo(policyNftId, policyInfo);
|
447
|
+
instance.updatePolicyState(policyNftId, ACTIVE());
|
295
448
|
|
296
449
|
// TODO add logging
|
297
450
|
}
|
@@ -311,12 +464,14 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
311
464
|
view
|
312
465
|
returns (NftId poolNftid)
|
313
466
|
{
|
314
|
-
return instance.
|
467
|
+
return instance.getTreasuryInfo(productNftId).poolNftId;
|
315
468
|
}
|
316
469
|
|
470
|
+
|
317
471
|
function _processPremiumByTreasury(
|
318
472
|
IInstance instance,
|
319
|
-
|
473
|
+
NftId productNftId,
|
474
|
+
ITreasury.TreasuryInfo memory treasuryInfo,
|
320
475
|
NftId policyNftId,
|
321
476
|
uint256 premiumAmount
|
322
477
|
)
|
@@ -325,13 +480,13 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
325
480
|
{
|
326
481
|
// process token transfer(s)
|
327
482
|
if(premiumAmount > 0) {
|
328
|
-
TokenHandler tokenHandler = instance.getTokenHandler(
|
329
|
-
address policyOwner =
|
330
|
-
address poolWallet = instance.
|
483
|
+
TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
|
484
|
+
address policyOwner = getRegistry().ownerOf(policyNftId);
|
485
|
+
address poolWallet = instance.getComponentWallet(treasuryInfo.poolNftId);
|
331
486
|
netPremiumAmount = premiumAmount;
|
332
|
-
Fee memory
|
487
|
+
Fee memory productFee = treasuryInfo.productFee;
|
333
488
|
|
334
|
-
if (FeeLib.feeIsZero(
|
489
|
+
if (FeeLib.feeIsZero(productFee)) {
|
335
490
|
tokenHandler.transfer(
|
336
491
|
policyOwner,
|
337
492
|
poolWallet,
|
@@ -340,10 +495,11 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
340
495
|
} else {
|
341
496
|
(uint256 feeAmount, uint256 netAmount) = instance.calculateFeeAmount(
|
342
497
|
premiumAmount,
|
343
|
-
|
498
|
+
productFee
|
344
499
|
);
|
345
500
|
|
346
|
-
|
501
|
+
address productWallet = instance.getComponentWallet(productNftId);
|
502
|
+
tokenHandler.transfer(policyOwner, productWallet, feeAmount);
|
347
503
|
tokenHandler.transfer(policyOwner, poolWallet, netAmount);
|
348
504
|
netPremiumAmount = netAmount;
|
349
505
|
}
|