@etherisc/gif-next 0.0.2-f752d2a-551 → 0.0.2-f7b8c9f-436
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 +71 -0
- 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/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 +913 -530
- 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 +1043 -556
- 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/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 +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 +350 -79
- 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 +466 -71
- 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 +298 -39
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +745 -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 +489 -120
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +997 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +468 -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 +2 -2
- 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/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/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 +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/UFixedMathLib.dbg.json +1 -1
- 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 -21
- 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 +12 -10
- package/contracts/instance/Instance.sol +28 -9
- 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/access/Access.sol +3 -3
- 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 +34 -58
- 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 +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 +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 +200 -95
- 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 +248 -92
- package/contracts/registry/ChainNft.sol +43 -15
- package/contracts/registry/IChainNft.sol +3 -2
- package/contracts/registry/IRegistry.sol +42 -26
- package/contracts/registry/IRegistryService.sol +29 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +384 -274
- package/contracts/registry/RegistryService.sol +368 -0
- package/contracts/registry/RegistryServiceManager.sol +43 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +1 -1
- package/contracts/shared/INftOwnable.sol +22 -0
- package/contracts/shared/IRegisterable.sol +9 -16
- 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/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 +8 -3
- 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 +2 -2
- package/contracts/types/Version.sol +9 -0
- package/package.json +1 -1
- 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/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/contracts/experiment/statemachine/README.md +0 -112
- package/contracts/instance/module/compensation/CompensationModule.sol +0 -8
- package/contracts/instance/module/compensation/ICompensation.sol +0 -10
- package/contracts/registry/IRegistryLinked.sol +0 -8
- package/contracts/shared/IOwnable.sol +0 -6
@@ -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,13 +19,18 @@ 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
|
|
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,31 +371,23 @@ 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
|
@@ -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
|
}
|
@@ -1,8 +1,11 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {ERC721, ERC721Enumerable} from "@openzeppelin5/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
|
5
|
+
import {IERC721} from "@openzeppelin5/contracts/token/ERC721/IERC721.sol";
|
3
6
|
|
4
|
-
import {ERC721, ERC721Enumerable} from "@openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol";
|
5
7
|
import {IChainNft} from "./IChainNft.sol";
|
8
|
+
import {ITransferInterceptor} from "./ITransferInterceptor.sol";
|
6
9
|
|
7
10
|
contract ChainNft is ERC721Enumerable, IChainNft {
|
8
11
|
string public constant NAME = "Dezentralized Insurance Protocol Registry";
|
@@ -11,6 +14,9 @@ contract ChainNft is ERC721Enumerable, IChainNft {
|
|
11
14
|
uint256 public constant PROTOCOL_NFT_ID = 1101;
|
12
15
|
uint256 public constant GLOBAL_REGISTRY_ID = 2101;
|
13
16
|
|
17
|
+
// remember interceptors
|
18
|
+
mapping(uint256 tokenId => address interceptor) private _interceptor;
|
19
|
+
|
14
20
|
// remember token uri
|
15
21
|
mapping(uint256 tokenId => string uri) private _uri;
|
16
22
|
|
@@ -37,18 +43,36 @@ contract ChainNft is ERC721Enumerable, IChainNft {
|
|
37
43
|
_chainIdInt = block.chainid;
|
38
44
|
_chainIdDigits = _countDigits(_chainIdInt);
|
39
45
|
_chainIdMultiplier = 10 ** _chainIdDigits;
|
40
|
-
_idNext =
|
46
|
+
_idNext = 4;
|
41
47
|
}
|
42
48
|
|
49
|
+
/**
|
50
|
+
* @dev mints a token for a specified token id
|
51
|
+
* not part of the IRegistry interface only needed for
|
52
|
+
* initial registry setup (protocol and global registry objects)
|
53
|
+
*/
|
54
|
+
function mint(address to, uint256 tokenId) external onlyRegistry {
|
55
|
+
_totalMinted++;
|
56
|
+
_safeMint(to, tokenId);
|
57
|
+
}
|
58
|
+
|
59
|
+
|
43
60
|
/**
|
44
61
|
* @dev mints the next token to register new objects
|
62
|
+
* non-zero transferInterceptors are recorded and called during nft token transfers.
|
63
|
+
* the contract receiving such a notification may decides to revert or record the transfer
|
45
64
|
*/
|
46
65
|
function mint(
|
47
66
|
address to,
|
67
|
+
address interceptor,
|
48
68
|
string memory uri
|
49
|
-
)
|
69
|
+
) public onlyRegistry returns (uint256 tokenId) {
|
50
70
|
tokenId = _getNextTokenId();
|
51
71
|
|
72
|
+
if (interceptor != address(0)) {
|
73
|
+
_interceptor[tokenId] = interceptor;
|
74
|
+
}
|
75
|
+
|
52
76
|
if (bytes(uri).length > 0) {
|
53
77
|
_uri[tokenId] = uri;
|
54
78
|
}
|
@@ -57,18 +81,22 @@ contract ChainNft is ERC721Enumerable, IChainNft {
|
|
57
81
|
_totalMinted++;
|
58
82
|
}
|
59
83
|
|
84
|
+
|
60
85
|
/**
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
86
|
+
* @dev amend the open zeppelin transferFrom function by an interceptor call if such an interceptor is defined for the nft token id
|
87
|
+
* this allows distribution, product and pool components to be notified when distributors, policies and bundles are transferred.
|
88
|
+
*/
|
89
|
+
function transferFrom(address from, address to, uint256 tokenId) public override (ERC721, IERC721) {
|
90
|
+
super.transferFrom(from, to, tokenId);
|
91
|
+
|
92
|
+
if (_interceptor[tokenId] != address(0)) {
|
93
|
+
ITransferInterceptor(_interceptor[tokenId]).nftTransferFrom(from, to, tokenId);
|
94
|
+
}
|
68
95
|
}
|
69
96
|
|
97
|
+
|
70
98
|
function burn(uint256 tokenId) external override onlyRegistry {
|
71
|
-
|
99
|
+
_requireOwned(tokenId);
|
72
100
|
_burn(tokenId);
|
73
101
|
delete _uri[tokenId];
|
74
102
|
}
|
@@ -79,18 +107,18 @@ contract ChainNft is ERC721Enumerable, IChainNft {
|
|
79
107
|
) external override onlyRegistry {
|
80
108
|
require(bytes(uri).length > 0, "ERROR:CRG-011:URI_EMPTY");
|
81
109
|
|
82
|
-
|
110
|
+
_requireOwned(tokenId);
|
83
111
|
_uri[tokenId] = uri;
|
84
112
|
}
|
85
113
|
|
86
114
|
function exists(uint256 tokenId) external view override returns (bool) {
|
87
|
-
return
|
115
|
+
return _ownerOf(tokenId) != address(0);
|
88
116
|
}
|
89
117
|
|
90
118
|
function tokenURI(
|
91
119
|
uint256 tokenId
|
92
120
|
) public view override returns (string memory) {
|
93
|
-
|
121
|
+
_requireOwned(tokenId);
|
94
122
|
return _uri[tokenId];
|
95
123
|
}
|
96
124
|
|
@@ -1,11 +1,12 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
|
-
pragma solidity ^0.8.
|
2
|
+
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC721Enumerable} from "@
|
4
|
+
import {IERC721Enumerable} from "@openzeppelin5/contracts/token/ERC721/extensions/IERC721Enumerable.sol";
|
5
5
|
|
6
6
|
interface IChainNft is IERC721Enumerable {
|
7
7
|
function mint(
|
8
8
|
address to,
|
9
|
+
address interceptor,
|
9
10
|
string memory uri
|
10
11
|
) external returns (uint256 tokenId);
|
11
12
|
|