@etherisc/gif-next 0.0.2-6f2f76e-746 → 0.0.2-719a8f1-103
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 +73 -11
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +80 -41
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +445 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +43 -40
- 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 +299 -84
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +250 -53
- 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/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +793 -638
- 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 +1022 -716
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/{InstanceBase.sol/InstanceBase.json → base/ComponentServiceBase.sol/ComponentServiceBase.json} +145 -65
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +113 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +560 -0
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/{module/lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/instance/{service → base}/IService.sol/IService.json +100 -56
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +456 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +710 -0
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
- package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
- package/artifacts/contracts/instance/{module/compensation/ICompensation.sol/ICompensation.json → base/ModuleBase.sol/ModuleBase.json} +2 -2
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/{service → base}/ServiceBase.sol/ServiceBase.json +136 -56
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +71 -50
- 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 +71 -50
- 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/ICompensationModule.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/distribution/IDistribution.sol/IDistributionModule.json +10 -0
- 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 -38
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +1 -1
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +61 -38
- 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 +271 -72
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +526 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +99 -74
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/{ComponentServiceBase.sol/ComponentServiceBase.json → IDistributionService.sol/IDistributionService.json} +125 -56
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +158 -50
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +246 -49
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +230 -52
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +361 -70
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +141 -12
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +5 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +293 -40
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +668 -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 +483 -120
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +885 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +460 -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/IOwnable.sol/IOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +43 -40
- 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 +132 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +344 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +76 -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 +445 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +1 -1
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +299 -84
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +1 -1
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +297 -58
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +93 -39
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +38 -4
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +161 -68
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- 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 +4 -0
- package/artifacts/contracts/test/Usdc.sol/USDC.json +338 -0
- 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 +50 -11
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
- 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 +4 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +34 -8
- 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 +12 -22
- package/contracts/components/Distribution.sol +155 -0
- package/contracts/components/IBaseComponent.sol +2 -2
- 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/instance/IInstance.sol +17 -16
- package/contracts/instance/Instance.sol +32 -13
- package/contracts/instance/{service → base}/ComponentServiceBase.sol +13 -5
- package/contracts/instance/base/IInstanceBase.sol +23 -0
- package/contracts/instance/base/IKeyValueStore.sol +50 -0
- package/contracts/instance/base/ILifecycle.sol +30 -0
- package/contracts/instance/base/InstanceBase.sol +89 -0
- package/contracts/instance/base/KeyValueStore.sol +161 -0
- package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +50 -39
- package/contracts/instance/base/ModuleBase.sol +57 -0
- package/contracts/instance/base/ServiceBase.sol +43 -0
- package/contracts/instance/module/access/Access.sol +6 -6
- package/contracts/instance/module/bundle/BundleModule.sol +24 -118
- package/contracts/instance/module/bundle/IBundle.sol +9 -9
- package/contracts/instance/module/component/ComponentModule.sol +32 -64
- package/contracts/instance/module/component/IComponent.sol +7 -32
- 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 +12 -9
- package/contracts/instance/module/policy/PolicyModule.sol +33 -26
- 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 +32 -51
- package/contracts/instance/module/treasury/TokenHandler.sol +2 -2
- package/contracts/instance/module/treasury/TreasuryModule.sol +68 -89
- package/contracts/instance/service/ComponentOwnerService.sol +197 -96
- package/contracts/instance/service/DistributionService.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 +8 -1
- package/contracts/instance/service/IProductService.sol +56 -7
- package/contracts/instance/service/PoolService.sol +50 -24
- package/contracts/instance/service/ProductService.sol +249 -94
- package/contracts/registry/ChainNft.sol +43 -15
- package/contracts/registry/IChainNft.sol +3 -2
- package/contracts/registry/IRegistry.sol +44 -28
- package/contracts/registry/IRegistryService.sol +29 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +384 -275
- package/contracts/registry/RegistryService.sol +375 -0
- package/contracts/registry/RegistryServiceManager.sol +52 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +1 -1
- package/contracts/shared/IRegisterable.sol +7 -9
- package/contracts/shared/IVersionable.sol +55 -11
- package/contracts/shared/NftOwnable.sol +87 -0
- package/contracts/shared/ProxyManager.sol +103 -0
- package/contracts/shared/Registerable.sol +74 -43
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +112 -54
- package/contracts/test/TestDistribution.sol +22 -0
- package/contracts/test/TestPool.sol +7 -2
- package/contracts/test/TestProduct.sol +37 -7
- package/contracts/test/TestRegisterable.sol +5 -6
- package/contracts/test/TestRoleId.sol +2 -2
- package/contracts/test/TestService.sol +6 -12
- package/contracts/test/Usdc.sol +26 -0
- package/contracts/types/Fee.sol +8 -3
- package/contracts/types/Key32.sol +45 -0
- package/contracts/types/NftId.sol +16 -1
- 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 +12 -10
- package/contracts/types/StateId.sol +7 -1
- package/contracts/types/UFixed.sol +19 -16
- package/contracts/types/Version.sol +9 -0
- package/package.json +1 -1
- package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/IServiceLinked.sol/IServiceLinked.json +0 -50
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +0 -4
- 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/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
- package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/service/IService.sol/IService.dbg.json +0 -4
- package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
- package/contracts/experiment/statemachine/README.md +0 -112
- package/contracts/instance/IServiceLinked.sol +0 -12
- package/contracts/instance/InstanceBase.sol +0 -71
- package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
- package/contracts/instance/module/compensation/ICompensation.sol +0 -10
- package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
- package/contracts/instance/service/ServiceBase.sol +0 -39
- package/contracts/registry/IRegistryLinked.sol +0 -8
- /package/contracts/instance/{service → base}/IService.sol +0 -0
@@ -3,17 +3,20 @@ 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
|
|
16
|
-
import {
|
17
|
+
import {IService} from "../base/IService.sol";
|
18
|
+
import {ServiceBase} from "../base/ServiceBase.sol";
|
19
|
+
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
17
20
|
import {IPoolService} from "./IPoolService.sol";
|
18
21
|
|
19
22
|
|
@@ -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";
|
@@ -15,14 +19,19 @@ import {Versionable} from "../../shared/Versionable.sol";
|
|
15
19
|
|
16
20
|
import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
|
17
21
|
import {UFixed, UFixedMathLib} 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
|
|
25
|
-
import {
|
32
|
+
import {IService} from "../base/IService.sol";
|
33
|
+
import {ServiceBase} from "../base/ServiceBase.sol";
|
34
|
+
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
26
35
|
import {IProductService} from "./IProductService.sol";
|
27
36
|
|
28
37
|
// TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
|
@@ -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,29 +271,39 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
134
271
|
returns (IBundle.BundleInfo memory)
|
135
272
|
{
|
136
273
|
bundleInfo.lockedAmount += collateralAmount;
|
137
|
-
|
138
|
-
instance.collateralizePolicy(bundleInfo.nftId, policyNftId, collateralAmount);
|
274
|
+
instance.collateralizePolicy(bundleNftId, policyNftId, collateralAmount);
|
139
275
|
return bundleInfo;
|
140
276
|
}
|
141
277
|
|
142
278
|
function _underwriteByPool(
|
143
|
-
ITreasury.
|
279
|
+
ITreasury.TreasuryInfo memory treasuryInfo,
|
280
|
+
NftId policyNftId,
|
144
281
|
IPolicy.PolicyInfo memory policyInfo,
|
145
282
|
bytes memory bundleFilter,
|
146
283
|
uint256 collateralAmount
|
147
284
|
)
|
148
285
|
internal
|
149
286
|
{
|
150
|
-
address poolAddress =
|
287
|
+
address poolAddress = getRegistry().getObjectInfo(treasuryInfo.poolNftId).objectAddress;
|
151
288
|
IPoolComponent pool = IPoolComponent(poolAddress);
|
152
289
|
pool.underwrite(
|
153
|
-
|
154
|
-
policyInfo.
|
290
|
+
policyNftId,
|
291
|
+
policyInfo.applicationData,
|
155
292
|
bundleFilter,
|
156
293
|
collateralAmount);
|
157
294
|
}
|
158
295
|
|
159
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
|
+
|
160
307
|
function underwrite(
|
161
308
|
NftId policyNftId,
|
162
309
|
bool requirePremiumPayment,
|
@@ -175,14 +322,18 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
175
322
|
NftId productNftId = productInfo.nftId;
|
176
323
|
IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
|
177
324
|
require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
178
|
-
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;
|
179
331
|
|
180
332
|
(
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
bytes memory bundleFilter
|
333
|
+
treasuryInfo,
|
334
|
+
bundleNftId,
|
335
|
+
bundleInfo,
|
336
|
+
collateralAmount
|
186
337
|
) = _getAndVerifyUnderwritingSetup(
|
187
338
|
instance,
|
188
339
|
policyInfo
|
@@ -191,15 +342,28 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
191
342
|
// lock bundle collateral
|
192
343
|
bundleInfo = _lockCollateralInBundle(
|
193
344
|
instance,
|
345
|
+
bundleNftId,
|
194
346
|
bundleInfo,
|
195
347
|
policyNftId,
|
196
348
|
collateralAmount);
|
197
349
|
|
198
|
-
//
|
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
|
199
362
|
if(requirePremiumPayment) {
|
200
363
|
uint256 netPremiumAmount = _processPremiumByTreasury(
|
201
364
|
instance,
|
202
|
-
|
365
|
+
productInfo.nftId,
|
366
|
+
treasuryInfo,
|
203
367
|
policyNftId,
|
204
368
|
policyInfo.premiumAmount);
|
205
369
|
|
@@ -207,31 +371,23 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
207
371
|
bundleInfo.balanceAmount += netPremiumAmount;
|
208
372
|
}
|
209
373
|
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
// integrate pool component
|
228
|
-
if(poolIsVerifying) {
|
229
|
-
_underwriteByPool(
|
230
|
-
productSetup,
|
231
|
-
policyInfo,
|
232
|
-
bundleFilter,
|
233
|
-
collateralAmount
|
234
|
-
);
|
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
|
+
}
|
235
391
|
}
|
236
392
|
|
237
393
|
// TODO add logging
|
@@ -249,14 +405,13 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
249
405
|
|
250
406
|
// perform actual token transfers
|
251
407
|
IPolicy.PolicyInfo memory policyInfo = instance.getPolicyInfo(policyNftId);
|
252
|
-
ITreasury.
|
408
|
+
ITreasury.TreasuryInfo memory treasuryInfo = instance.getTreasuryInfo(productInfo.nftId);
|
253
409
|
|
254
410
|
uint256 premiumAmount = policyInfo.premiumAmount;
|
255
|
-
_processPremiumByTreasury(instance,
|
411
|
+
_processPremiumByTreasury(instance, productInfo.nftId, treasuryInfo, policyNftId, premiumAmount);
|
256
412
|
|
257
413
|
// policy level book keeping for premium paid
|
258
414
|
policyInfo.premiumPaidAmount += premiumAmount;
|
259
|
-
policyInfo.updatedIn = blockNumber();
|
260
415
|
|
261
416
|
// optional activation of policy
|
262
417
|
if(activateAt > zeroTimestamp()) {
|
@@ -267,11 +422,10 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
267
422
|
policyInfo.activatedAt = activateAt;
|
268
423
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
269
424
|
|
270
|
-
|
271
|
-
policyInfo.state = ACTIVE();
|
425
|
+
instance.updatePolicyState(policyNftId, ACTIVE());
|
272
426
|
}
|
273
427
|
|
274
|
-
instance.setPolicyInfo(policyInfo);
|
428
|
+
instance.setPolicyInfo(policyNftId, policyInfo);
|
275
429
|
|
276
430
|
// TODO add logging
|
277
431
|
}
|
@@ -289,10 +443,8 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
289
443
|
policyInfo.activatedAt = activateAt;
|
290
444
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
291
445
|
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
instance.setPolicyInfo(policyInfo);
|
446
|
+
instance.setPolicyInfo(policyNftId, policyInfo);
|
447
|
+
instance.updatePolicyState(policyNftId, ACTIVE());
|
296
448
|
|
297
449
|
// TODO add logging
|
298
450
|
}
|
@@ -312,12 +464,14 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
312
464
|
view
|
313
465
|
returns (NftId poolNftid)
|
314
466
|
{
|
315
|
-
return instance.
|
467
|
+
return instance.getTreasuryInfo(productNftId).poolNftId;
|
316
468
|
}
|
317
469
|
|
470
|
+
|
318
471
|
function _processPremiumByTreasury(
|
319
472
|
IInstance instance,
|
320
|
-
|
473
|
+
NftId productNftId,
|
474
|
+
ITreasury.TreasuryInfo memory treasuryInfo,
|
321
475
|
NftId policyNftId,
|
322
476
|
uint256 premiumAmount
|
323
477
|
)
|
@@ -326,13 +480,13 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
326
480
|
{
|
327
481
|
// process token transfer(s)
|
328
482
|
if(premiumAmount > 0) {
|
329
|
-
TokenHandler tokenHandler = instance.getTokenHandler(
|
330
|
-
address policyOwner =
|
331
|
-
address poolWallet = instance.
|
483
|
+
TokenHandler tokenHandler = instance.getTokenHandler(productNftId);
|
484
|
+
address policyOwner = getRegistry().ownerOf(policyNftId);
|
485
|
+
address poolWallet = instance.getComponentWallet(treasuryInfo.poolNftId);
|
332
486
|
netPremiumAmount = premiumAmount;
|
333
|
-
Fee memory
|
487
|
+
Fee memory productFee = treasuryInfo.productFee;
|
334
488
|
|
335
|
-
if (FeeLib.feeIsZero(
|
489
|
+
if (FeeLib.feeIsZero(productFee)) {
|
336
490
|
tokenHandler.transfer(
|
337
491
|
policyOwner,
|
338
492
|
poolWallet,
|
@@ -341,10 +495,11 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
341
495
|
} else {
|
342
496
|
(uint256 feeAmount, uint256 netAmount) = instance.calculateFeeAmount(
|
343
497
|
premiumAmount,
|
344
|
-
|
498
|
+
productFee
|
345
499
|
);
|
346
500
|
|
347
|
-
|
501
|
+
address productWallet = instance.getComponentWallet(productNftId);
|
502
|
+
tokenHandler.transfer(policyOwner, productWallet, feeAmount);
|
348
503
|
tokenHandler.transfer(policyOwner, poolWallet, netAmount);
|
349
504
|
netPremiumAmount = netAmount;
|
350
505
|
}
|