@etherisc/gif-next 0.0.2-299fe4a-464 → 0.0.2-29a48ef-239
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 +192 -7
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.json +176 -23
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +618 -0
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.json +129 -23
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +152 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +74 -181
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +55 -177
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +463 -63
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +494 -70
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +66 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +24 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +4 -0
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +42 -0
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.json +101 -0
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +1132 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +4 -0
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +1082 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +906 -1243
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +480 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2406 -1112
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +917 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1422 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +931 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +508 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.json +540 -0
- 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 +429 -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/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +502 -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/module/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +211 -0
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{bundle/IBundle.sol → IBundle.sol}/IBundle.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.json +10 -0
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{policy/IPolicy.sol → IPolicy.sol}/IPolicy.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{access/IAccess.sol/IAccess.json → IRisk.sol/IRisk.json} +2 -2
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{pool/IPoolModule.sol/IPool.json → ISetup.sol/ISetup.json} +2 -2
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/module/{treasury/ITreasury.sol → ITreasury.sol}/ITreasury.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +393 -85
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +716 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +444 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +182 -80
- 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} +209 -63
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +347 -54
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +339 -56
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +545 -73
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +460 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +561 -99
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +488 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +186 -12
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +377 -37
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +947 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +34 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +487 -123
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1293 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +517 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +410 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.json +107 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +127 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +117 -37
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/{instance/service → shared}/IService.sol/IService.json +180 -59
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +60 -19
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +158 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +349 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +190 -37
- package/artifacts/contracts/shared/RegisterableUpgradable.sol/RegisterableUpgradable.dbg.json +4 -0
- package/artifacts/contracts/{instance/InstanceBase.sol/InstanceBase.json → shared/RegisterableUpgradable.sol/RegisterableUpgradable.json} +209 -80
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/{instance/service/ServiceBase.sol/ServiceBase.json → shared/Service.sol/Service.json} +227 -59
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +96 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +129 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +83 -19
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +30 -6
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +204 -36
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +44 -10
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +277 -84
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +14 -18
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +106 -50
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
- package/artifacts/contracts/test/Usdc.sol/USDC.json +376 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +2 -2
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +4 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +104 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +257 -0
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +125 -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/NumberId.sol/NumberIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.json +100 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +123 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +86 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +156 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +15 -2
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +10 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +479 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +101 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +22 -3
- package/contracts/components/BaseComponent.sol +26 -24
- package/contracts/components/Distribution.sol +163 -0
- package/contracts/components/IBaseComponent.sol +9 -3
- package/contracts/components/IDistributionComponent.sol +44 -0
- package/contracts/components/IPoolComponent.sol +15 -10
- package/contracts/components/IProductComponent.sol +25 -9
- package/contracts/components/Pool.sol +106 -33
- package/contracts/components/Product.sol +204 -32
- package/contracts/experiment/cloning/Cloner.sol +47 -0
- package/contracts/instance/AccessManagedSimple.sol +115 -0
- package/contracts/instance/AccessManagerSimple.sol +692 -0
- package/contracts/instance/IAccessManagerSimple.sol +391 -0
- package/contracts/instance/IInstance.sol +44 -40
- package/contracts/instance/IInstanceService.sol +30 -0
- package/contracts/instance/Instance.sol +426 -45
- package/contracts/instance/InstanceAccessManager.sol +288 -0
- package/contracts/instance/InstanceReader.sol +315 -0
- package/contracts/instance/InstanceService.sol +198 -0
- package/contracts/instance/InstanceServiceManager.sol +57 -0
- package/contracts/instance/base/ComponentServiceBase.sol +134 -0
- package/contracts/instance/base/IInstanceBase.sol +23 -0
- package/contracts/instance/base/IKeyValueStore.sol +49 -0
- package/contracts/instance/base/ILifecycle.sol +30 -0
- package/contracts/instance/base/KeyValueStore.sol +172 -0
- package/contracts/instance/{module/lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +51 -40
- package/contracts/instance/module/IAccess.sol +38 -0
- package/contracts/instance/module/IBundle.sol +20 -0
- package/contracts/instance/module/IDistribution.sol +39 -0
- package/contracts/instance/module/IPolicy.sol +45 -0
- package/contracts/instance/module/IRisk.sol +11 -0
- package/contracts/instance/module/ISetup.sol +47 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/ComponentOwnerService.sol +246 -103
- package/contracts/instance/service/DistributionService.sol +88 -0
- package/contracts/instance/service/DistributionServiceManager.sol +54 -0
- package/contracts/instance/service/IComponentOwnerService.sol +1 -3
- package/contracts/instance/service/IDistributionService.sol +12 -0
- package/contracts/instance/service/IPoolService.sol +14 -1
- package/contracts/instance/service/IProductService.sol +59 -7
- package/contracts/instance/service/PoolService.sol +150 -44
- package/contracts/instance/service/PoolServiceManager.sol +54 -0
- package/contracts/instance/service/ProductService.sol +344 -141
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +80 -37
- package/contracts/registry/IRegistry.sol +49 -25
- package/contracts/registry/IRegistryService.sol +50 -0
- package/contracts/registry/ITransferInterceptor.sol +6 -0
- package/contracts/registry/Registry.sol +337 -270
- package/contracts/registry/RegistryService.sol +358 -0
- package/contracts/registry/RegistryServiceManager.sol +80 -0
- package/contracts/registry/TokenRegistry.sol +111 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +6 -2
- package/contracts/shared/INftOwnable.sol +22 -0
- package/contracts/shared/IRegisterable.sol +8 -15
- package/contracts/{instance/service → shared}/IService.sol +3 -3
- package/contracts/shared/IVersionable.sol +56 -12
- package/contracts/shared/NftOwnable.sol +134 -0
- package/contracts/shared/ProxyManager.sol +94 -0
- package/contracts/shared/Registerable.sol +63 -59
- package/contracts/shared/RegisterableUpgradable.sol +16 -0
- package/contracts/shared/Service.sol +55 -0
- package/contracts/shared/TokenHandler.sol +27 -0
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +112 -57
- package/contracts/test/TestFee.sol +4 -4
- package/contracts/test/TestRegisterable.sol +5 -6
- package/contracts/test/TestRoleId.sol +2 -2
- package/contracts/test/TestService.sol +6 -17
- package/contracts/test/TestVersion.sol +4 -7
- package/contracts/test/TestVersionable.sol +2 -5
- package/contracts/test/Usdc.sol +26 -0
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +44 -20
- package/contracts/types/Key32.sol +50 -0
- package/contracts/types/NftId.sol +16 -1
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +51 -14
- package/contracts/types/Referral.sol +85 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +65 -11
- package/contracts/types/StateId.sol +12 -2
- package/contracts/types/Timestamp.sol +7 -3
- package/contracts/types/UFixed.sol +144 -25
- package/contracts/types/Version.sol +42 -26
- package/package.json +7 -3
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.json +0 -24
- package/artifacts/contracts/instance/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/access/Access.sol/AccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.json +0 -333
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.json +0 -333
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +0 -276
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +0 -276
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +0 -188
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.json +0 -10
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.json +0 -188
- package/artifacts/contracts/instance/module/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/module/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.json +0 -261
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.json +0 -261
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.json +0 -149
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.json +0 -149
- package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/product/IProductModule.sol/IProductModule.json +0 -10
- package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/product/ProductModule.sol/ProductModule.json +0 -10
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +0 -538
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +0 -76
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.json +0 -538
- 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/IChainNft.sol/IChainNft.dbg.json +0 -4
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.json +0 -452
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +0 -24
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +0 -4
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.json +0 -24
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +0 -4
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +0 -387
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +0 -4
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +0 -393
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +0 -453
- package/contracts/experiment/statemachine/README.md +0 -112
- package/contracts/instance/IInstanceLinked.sol +0 -8
- package/contracts/instance/IServiceLinked.sol +0 -12
- package/contracts/instance/InstanceBase.sol +0 -74
- package/contracts/instance/module/access/Access.sol +0 -149
- package/contracts/instance/module/access/IAccess.sol +0 -53
- package/contracts/instance/module/bundle/BundleModule.sol +0 -228
- package/contracts/instance/module/bundle/IBundle.sol +0 -53
- package/contracts/instance/module/component/ComponentModule.sol +0 -104
- package/contracts/instance/module/component/IComponent.sol +0 -53
- package/contracts/instance/module/lifecycle/ILifecycle.sol +0 -47
- package/contracts/instance/module/policy/IPolicy.sol +0 -60
- package/contracts/instance/module/policy/PolicyModule.sol +0 -84
- package/contracts/instance/module/pool/IPoolModule.sol +0 -41
- package/contracts/instance/module/pool/PoolModule.sol +0 -87
- package/contracts/instance/module/product/IProductModule.sol +0 -6
- package/contracts/instance/module/product/ProductModule.sol +0 -8
- package/contracts/instance/module/treasury/ITreasury.sol +0 -104
- package/contracts/instance/module/treasury/TokenHandler.sol +0 -48
- package/contracts/instance/module/treasury/TreasuryModule.sol +0 -148
- package/contracts/instance/service/ComponentServiceBase.sol +0 -41
- package/contracts/instance/service/ServiceBase.sol +0 -39
- package/contracts/registry/IChainNft.sol +0 -21
- package/contracts/registry/IRegistryLinked.sol +0 -8
- package/contracts/shared/IOwnable.sol +0 -6
- package/contracts/test/TestPool.sol +0 -22
- package/contracts/test/TestProduct.sol +0 -44
|
@@ -2,28 +2,44 @@
|
|
|
2
2
|
pragma solidity ^0.8.19;
|
|
3
3
|
|
|
4
4
|
import {IRegistry} from "../../registry/IRegistry.sol";
|
|
5
|
+
import {IProductComponent} from "../../components/IProductComponent.sol";
|
|
6
|
+
import {Product} from "../../components/Product.sol";
|
|
5
7
|
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
8
|
+
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
|
9
|
+
import {IInstance} from "../IInstance.sol";
|
|
10
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
|
11
|
+
import {IRisk} from "../module/IRisk.sol";
|
|
12
|
+
import {IBundle} from "../module/IBundle.sol";
|
|
10
13
|
import {IProductService} from "./IProductService.sol";
|
|
11
|
-
import {ITreasury
|
|
14
|
+
import {ITreasury} from "../module/ITreasury.sol";
|
|
15
|
+
import {ISetup} from "../module/ISetup.sol";
|
|
16
|
+
|
|
17
|
+
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
|
12
18
|
|
|
13
19
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
|
14
20
|
import {Versionable} from "../../shared/Versionable.sol";
|
|
15
21
|
|
|
16
22
|
import {Timestamp, zeroTimestamp} from "../../types/Timestamp.sol";
|
|
17
|
-
import {UFixed,
|
|
18
|
-
import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
|
|
19
|
-
import {APPLIED, UNDERWRITTEN, ACTIVE} from "../../types/StateId.sol";
|
|
20
|
-
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
|
23
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
|
21
24
|
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
|
22
|
-
import {
|
|
23
|
-
import {
|
|
24
|
-
|
|
25
|
-
import {
|
|
25
|
+
import {ObjectType, INSTANCE, PRODUCT, POLICY} from "../../types/ObjectType.sol";
|
|
26
|
+
import {APPLIED, UNDERWRITTEN, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
|
|
27
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
|
28
|
+
import {Fee, FeeLib} from "../../types/Fee.sol";
|
|
29
|
+
import {ReferralId} from "../../types/Referral.sol";
|
|
30
|
+
import {RiskId} from "../../types/RiskId.sol";
|
|
31
|
+
import {StateId} from "../../types/StateId.sol";
|
|
32
|
+
import {Version, VersionLib} from "../../types/Version.sol";
|
|
33
|
+
|
|
34
|
+
import {IService} from "../../shared/IService.sol";
|
|
35
|
+
import {Service} from "../../shared/Service.sol";
|
|
36
|
+
import {ComponentServiceBase} from "../base/ComponentServiceBase.sol";
|
|
26
37
|
import {IProductService} from "./IProductService.sol";
|
|
38
|
+
import {InstanceReader} from "../InstanceReader.sol";
|
|
39
|
+
import {IPoolService} from "./PoolService.sol";
|
|
40
|
+
import {POOL_SERVICE_NAME} from "./PoolService.sol";
|
|
41
|
+
|
|
42
|
+
string constant PRODUCT_SERVICE_NAME = "ProductService";
|
|
27
43
|
|
|
28
44
|
// TODO or name this ProtectionService to have Product be something more generic (loan, savings account, ...)
|
|
29
45
|
contract ProductService is ComponentServiceBase, IProductService {
|
|
@@ -31,104 +47,274 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
|
31
47
|
|
|
32
48
|
string public constant NAME = "ProductService";
|
|
33
49
|
|
|
50
|
+
address internal _registryAddress;
|
|
51
|
+
IPoolService internal _poolService;
|
|
52
|
+
|
|
34
53
|
event LogProductServiceSender(address sender);
|
|
35
54
|
|
|
36
|
-
|
|
37
|
-
address
|
|
38
|
-
|
|
39
|
-
)
|
|
55
|
+
function _initialize(
|
|
56
|
+
address owner,
|
|
57
|
+
bytes memory data
|
|
58
|
+
)
|
|
59
|
+
internal
|
|
60
|
+
initializer
|
|
61
|
+
virtual override
|
|
40
62
|
{
|
|
63
|
+
address initialOwner = address(0);
|
|
64
|
+
(_registryAddress, initialOwner) = abi.decode(data, (address, address));
|
|
65
|
+
|
|
66
|
+
_initializeService(_registryAddress, owner);
|
|
67
|
+
|
|
68
|
+
_poolService = IPoolService(_registry.getServiceAddress(POOL_SERVICE_NAME, getMajorVersion()));
|
|
69
|
+
|
|
70
|
+
_registerInterface(type(IService).interfaceId);
|
|
41
71
|
_registerInterface(type(IProductService).interfaceId);
|
|
42
72
|
}
|
|
43
73
|
|
|
44
|
-
function getVersion()
|
|
45
|
-
public
|
|
46
|
-
pure
|
|
47
|
-
virtual override (IVersionable, Versionable)
|
|
48
|
-
returns(Version)
|
|
49
|
-
{
|
|
50
|
-
return toVersion(
|
|
51
|
-
toVersionPart(3),
|
|
52
|
-
toVersionPart(0),
|
|
53
|
-
toVersionPart(0));
|
|
54
|
-
}
|
|
55
74
|
|
|
56
|
-
function getName()
|
|
75
|
+
function getName() public pure override(IService, Service) returns(string memory name) {
|
|
57
76
|
return NAME;
|
|
58
77
|
}
|
|
59
78
|
|
|
79
|
+
function _finalizeComponentRegistration(NftId componentNftId, bytes memory initialObjData, IInstance instance) internal override {
|
|
80
|
+
ISetup.ProductSetupInfo memory initialSetup = abi.decode(
|
|
81
|
+
initialObjData,
|
|
82
|
+
(ISetup.ProductSetupInfo)
|
|
83
|
+
);
|
|
84
|
+
instance.createProductSetup(componentNftId, initialSetup);
|
|
85
|
+
}
|
|
86
|
+
|
|
60
87
|
function setFees(
|
|
61
|
-
Fee memory
|
|
88
|
+
Fee memory productFee,
|
|
62
89
|
Fee memory processingFee
|
|
63
90
|
)
|
|
64
91
|
external
|
|
65
92
|
override
|
|
66
93
|
{
|
|
67
94
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
|
68
|
-
instance.
|
|
95
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
|
96
|
+
NftId productNftId = productInfo.nftId;
|
|
97
|
+
|
|
98
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
|
99
|
+
productSetupInfo.productFee = productFee;
|
|
100
|
+
productSetupInfo.processingFee = processingFee;
|
|
101
|
+
|
|
102
|
+
instance.updateProductSetup(productNftId, productSetupInfo, KEEP_STATE());
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function createRisk(
|
|
106
|
+
RiskId riskId,
|
|
107
|
+
bytes memory data
|
|
108
|
+
) external override {
|
|
109
|
+
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
|
110
|
+
NftId productNftId = productInfo.nftId;
|
|
111
|
+
IRisk.RiskInfo memory riskInfo = IRisk.RiskInfo(productNftId, data);
|
|
112
|
+
instance.createRisk(
|
|
113
|
+
riskId,
|
|
114
|
+
riskInfo
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
function updateRisk(
|
|
119
|
+
RiskId riskId,
|
|
120
|
+
bytes memory data
|
|
121
|
+
) external {
|
|
122
|
+
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
|
123
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
|
124
|
+
IRisk.RiskInfo memory riskInfo = instanceReader.getRiskInfo(riskId);
|
|
125
|
+
riskInfo.data = data;
|
|
126
|
+
instance.updateRisk(riskId, riskInfo, KEEP_STATE());
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function updateRiskState(
|
|
130
|
+
RiskId riskId,
|
|
131
|
+
StateId state
|
|
132
|
+
) external {
|
|
133
|
+
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
|
134
|
+
instance.updateRiskState(riskId, state);
|
|
69
135
|
}
|
|
70
136
|
|
|
137
|
+
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
|
138
|
+
IRegistry.ObjectInfo memory productInfo;
|
|
139
|
+
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
|
140
|
+
product = Product(productInfo.objectAddress);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function calculatePremium(
|
|
144
|
+
RiskId riskId,
|
|
145
|
+
uint256 sumInsuredAmount,
|
|
146
|
+
uint256 lifetime,
|
|
147
|
+
bytes memory applicationData,
|
|
148
|
+
NftId bundleNftId,
|
|
149
|
+
ReferralId referralId
|
|
150
|
+
)
|
|
151
|
+
public
|
|
152
|
+
view
|
|
153
|
+
override
|
|
154
|
+
returns (
|
|
155
|
+
uint256 premiumAmount,
|
|
156
|
+
uint256 productFeeAmount,
|
|
157
|
+
uint256 poolFeeAmount,
|
|
158
|
+
uint256 bundleFeeAmount,
|
|
159
|
+
uint256 distributionFeeAmount
|
|
160
|
+
)
|
|
161
|
+
{
|
|
162
|
+
Product product = _getAndVerifyInstanceAndProduct();
|
|
163
|
+
uint256 netPremiumAmount = product.calculateNetPremium(
|
|
164
|
+
sumInsuredAmount,
|
|
165
|
+
riskId,
|
|
166
|
+
lifetime,
|
|
167
|
+
applicationData
|
|
168
|
+
);
|
|
169
|
+
|
|
170
|
+
(
|
|
171
|
+
productFeeAmount,
|
|
172
|
+
poolFeeAmount,
|
|
173
|
+
bundleFeeAmount,
|
|
174
|
+
distributionFeeAmount
|
|
175
|
+
) = _calculateFeeAmounts(
|
|
176
|
+
netPremiumAmount,
|
|
177
|
+
product,
|
|
178
|
+
bundleNftId,
|
|
179
|
+
referralId
|
|
180
|
+
);
|
|
181
|
+
|
|
182
|
+
premiumAmount = netPremiumAmount + productFeeAmount;
|
|
183
|
+
premiumAmount += poolFeeAmount + bundleFeeAmount;
|
|
184
|
+
premiumAmount += distributionFeeAmount;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
function _calculateFeeAmounts(
|
|
188
|
+
uint256 netPremiumAmount,
|
|
189
|
+
Product product,
|
|
190
|
+
NftId bundleNftId,
|
|
191
|
+
ReferralId referralId
|
|
192
|
+
)
|
|
193
|
+
internal
|
|
194
|
+
view
|
|
195
|
+
returns (
|
|
196
|
+
uint256 productFeeAmount,
|
|
197
|
+
uint256 poolFeeAmount,
|
|
198
|
+
uint256 bundleFeeAmount,
|
|
199
|
+
uint256 distributionFeeAmount
|
|
200
|
+
)
|
|
201
|
+
{
|
|
202
|
+
InstanceReader instanceReader;
|
|
203
|
+
{
|
|
204
|
+
IInstance instance = product.getInstance();
|
|
205
|
+
instanceReader = instance.getInstanceReader();
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
NftId poolNftId = product.getPoolNftId();
|
|
209
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
|
210
|
+
require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
|
|
211
|
+
|
|
212
|
+
{
|
|
213
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
|
|
214
|
+
(productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
|
215
|
+
}
|
|
216
|
+
{
|
|
217
|
+
ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
|
218
|
+
(poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
|
|
219
|
+
}
|
|
220
|
+
{
|
|
221
|
+
NftId distributionNftId = product.getDistributionNftId();
|
|
222
|
+
ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
|
223
|
+
(distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
(bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
|
|
71
230
|
function createApplication(
|
|
72
231
|
address applicationOwner,
|
|
232
|
+
RiskId riskId,
|
|
73
233
|
uint256 sumInsuredAmount,
|
|
74
|
-
uint256 premiumAmount,
|
|
75
234
|
uint256 lifetime,
|
|
76
|
-
|
|
235
|
+
bytes memory applicationData,
|
|
236
|
+
NftId bundleNftId,
|
|
237
|
+
ReferralId referralId
|
|
77
238
|
) external override returns (NftId policyNftId) {
|
|
78
239
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
|
79
|
-
NftId productNftId = productInfo.nftId;
|
|
80
240
|
// TODO add validations (see create bundle in pool service)
|
|
81
241
|
|
|
82
|
-
policyNftId =
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
242
|
+
policyNftId = getRegistryService().registerPolicy(
|
|
243
|
+
IRegistry.ObjectInfo(
|
|
244
|
+
zeroNftId(),
|
|
245
|
+
productInfo.nftId,
|
|
246
|
+
POLICY(),
|
|
247
|
+
false, // intercepting property for policies is defined on product
|
|
248
|
+
address(0),
|
|
249
|
+
applicationOwner,
|
|
250
|
+
""
|
|
251
|
+
)
|
|
252
|
+
);
|
|
253
|
+
|
|
254
|
+
(uint256 premiumAmount,,,,) = calculatePremium(
|
|
255
|
+
riskId,
|
|
256
|
+
sumInsuredAmount,
|
|
257
|
+
lifetime,
|
|
258
|
+
applicationData,
|
|
259
|
+
bundleNftId,
|
|
260
|
+
referralId
|
|
87
261
|
);
|
|
88
262
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
263
|
+
IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
|
|
264
|
+
productInfo.nftId,
|
|
265
|
+
bundleNftId,
|
|
266
|
+
referralId,
|
|
267
|
+
riskId,
|
|
92
268
|
sumInsuredAmount,
|
|
93
269
|
premiumAmount,
|
|
270
|
+
0,
|
|
94
271
|
lifetime,
|
|
95
|
-
|
|
272
|
+
applicationData,
|
|
273
|
+
"",
|
|
274
|
+
0,
|
|
275
|
+
0,
|
|
276
|
+
0,
|
|
277
|
+
zeroTimestamp(),
|
|
278
|
+
zeroTimestamp(),
|
|
279
|
+
zeroTimestamp()
|
|
96
280
|
);
|
|
281
|
+
|
|
282
|
+
instance.createPolicy(policyNftId, policyInfo);
|
|
283
|
+
instance.updatePolicyState(policyNftId, APPLIED());
|
|
97
284
|
|
|
98
285
|
// TODO add logging
|
|
99
286
|
}
|
|
100
287
|
|
|
101
288
|
function _getAndVerifyUnderwritingSetup(
|
|
102
289
|
IInstance instance,
|
|
103
|
-
|
|
290
|
+
InstanceReader instanceReader,
|
|
291
|
+
IPolicy.PolicyInfo memory policyInfo,
|
|
292
|
+
ISetup.ProductSetupInfo memory productSetupInfo
|
|
104
293
|
)
|
|
105
294
|
internal
|
|
106
295
|
view
|
|
107
296
|
returns (
|
|
108
|
-
|
|
297
|
+
NftId bundleNftId,
|
|
109
298
|
IBundle.BundleInfo memory bundleInfo,
|
|
110
|
-
uint256 collateralAmount
|
|
111
|
-
bool poolIsVerifying,
|
|
112
|
-
bytes memory bundleFilter
|
|
299
|
+
uint256 collateralAmount
|
|
113
300
|
)
|
|
114
301
|
{
|
|
115
302
|
// check match between policy and bundle (via pool)
|
|
116
|
-
|
|
117
|
-
bundleInfo =
|
|
118
|
-
require(bundleInfo.poolNftId ==
|
|
303
|
+
bundleNftId = policyInfo.bundleNftId;
|
|
304
|
+
bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
|
305
|
+
require(bundleInfo.poolNftId == productSetupInfo.poolNftId, "POLICY_BUNDLE_MISMATCH");
|
|
119
306
|
|
|
120
307
|
// calculate required collateral
|
|
121
|
-
NftId poolNftId =
|
|
122
|
-
|
|
308
|
+
NftId poolNftId = productSetupInfo.poolNftId;
|
|
309
|
+
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
|
123
310
|
|
|
124
311
|
// obtain remaining return values
|
|
125
|
-
poolIsVerifying = poolInfo.isVerifying;
|
|
126
312
|
collateralAmount = calculateRequiredCollateral(poolInfo.collateralizationLevel, policyInfo.sumInsuredAmount);
|
|
127
|
-
bundleFilter = bundleInfo.filter;
|
|
128
313
|
}
|
|
129
314
|
|
|
130
315
|
function _lockCollateralInBundle(
|
|
131
316
|
IInstance instance,
|
|
317
|
+
NftId bundleNftId,
|
|
132
318
|
IBundle.BundleInfo memory bundleInfo,
|
|
133
319
|
NftId policyNftId,
|
|
134
320
|
uint256 collateralAmount
|
|
@@ -137,29 +323,39 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
|
137
323
|
returns (IBundle.BundleInfo memory)
|
|
138
324
|
{
|
|
139
325
|
bundleInfo.lockedAmount += collateralAmount;
|
|
140
|
-
|
|
141
|
-
instance.collateralizePolicy(bundleInfo.nftId, policyNftId, collateralAmount);
|
|
326
|
+
// TODO: track policy associated to bundle in bundlemanager (tbd) and how much is locked for it
|
|
142
327
|
return bundleInfo;
|
|
143
328
|
}
|
|
144
329
|
|
|
145
330
|
function _underwriteByPool(
|
|
146
|
-
|
|
331
|
+
NftId poolNftId,
|
|
332
|
+
NftId policyNftId,
|
|
147
333
|
IPolicy.PolicyInfo memory policyInfo,
|
|
148
334
|
bytes memory bundleFilter,
|
|
149
335
|
uint256 collateralAmount
|
|
150
336
|
)
|
|
151
337
|
internal
|
|
152
338
|
{
|
|
153
|
-
address poolAddress =
|
|
339
|
+
address poolAddress = getRegistry().getObjectInfo(poolNftId).objectAddress;
|
|
154
340
|
IPoolComponent pool = IPoolComponent(poolAddress);
|
|
155
341
|
pool.underwrite(
|
|
156
|
-
|
|
157
|
-
policyInfo.
|
|
342
|
+
policyNftId,
|
|
343
|
+
policyInfo.applicationData,
|
|
158
344
|
bundleFilter,
|
|
159
345
|
collateralAmount);
|
|
160
346
|
}
|
|
161
347
|
|
|
162
348
|
|
|
349
|
+
function revoke(
|
|
350
|
+
NftId policyNftId
|
|
351
|
+
)
|
|
352
|
+
external
|
|
353
|
+
override
|
|
354
|
+
{
|
|
355
|
+
require(false, "ERROR:PRS-234:NOT_YET_IMPLEMENTED");
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
|
|
163
359
|
function underwrite(
|
|
164
360
|
NftId policyNftId,
|
|
165
361
|
bool requirePremiumPayment,
|
|
@@ -173,36 +369,53 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
|
173
369
|
IRegistry.ObjectInfo memory productInfo,
|
|
174
370
|
IInstance instance
|
|
175
371
|
) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
|
372
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
|
176
373
|
|
|
177
374
|
// check match between policy and calling product
|
|
178
375
|
NftId productNftId = productInfo.nftId;
|
|
179
|
-
IPolicy.PolicyInfo memory policyInfo =
|
|
376
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
|
180
377
|
require(policyInfo.productNftId == productNftId, "POLICY_PRODUCT_MISMATCH");
|
|
181
|
-
require(
|
|
378
|
+
require(instanceReader.getPolicyState(policyNftId) == APPLIED(), "ERROR:PRS-021:STATE_NOT_APPLIED");
|
|
182
379
|
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
380
|
+
NftId bundleNftId;
|
|
381
|
+
IBundle.BundleInfo memory bundleInfo;
|
|
382
|
+
uint256 collateralAmount;
|
|
383
|
+
{
|
|
384
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
|
385
|
+
|
|
386
|
+
(
|
|
387
|
+
bundleNftId,
|
|
388
|
+
bundleInfo,
|
|
389
|
+
collateralAmount
|
|
390
|
+
) = _getAndVerifyUnderwritingSetup(
|
|
391
|
+
instance,
|
|
392
|
+
instanceReader,
|
|
393
|
+
policyInfo,
|
|
394
|
+
productSetupInfo
|
|
395
|
+
);
|
|
396
|
+
}
|
|
193
397
|
|
|
194
398
|
// lock bundle collateral
|
|
195
399
|
bundleInfo = _lockCollateralInBundle(
|
|
196
400
|
instance,
|
|
401
|
+
bundleNftId,
|
|
197
402
|
bundleInfo,
|
|
198
403
|
policyNftId,
|
|
199
404
|
collateralAmount);
|
|
405
|
+
StateId newPolicyState = UNDERWRITTEN();
|
|
406
|
+
|
|
407
|
+
// optional activation of policy
|
|
408
|
+
if(activateAt > zeroTimestamp()) {
|
|
409
|
+
newPolicyState = ACTIVE();
|
|
410
|
+
policyInfo.activatedAt = activateAt;
|
|
411
|
+
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
|
412
|
+
}
|
|
200
413
|
|
|
201
|
-
//
|
|
414
|
+
// optional collection of premium
|
|
202
415
|
if(requirePremiumPayment) {
|
|
203
416
|
uint256 netPremiumAmount = _processPremiumByTreasury(
|
|
204
417
|
instance,
|
|
205
|
-
|
|
418
|
+
productInfo.nftId,
|
|
206
419
|
policyNftId,
|
|
207
420
|
policyInfo.premiumAmount);
|
|
208
421
|
|
|
@@ -210,38 +423,30 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
|
210
423
|
bundleInfo.balanceAmount += netPremiumAmount;
|
|
211
424
|
}
|
|
212
425
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
// integrate pool component
|
|
231
|
-
if(poolIsVerifying) {
|
|
232
|
-
_underwriteByPool(
|
|
233
|
-
productSetup,
|
|
234
|
-
policyInfo,
|
|
235
|
-
bundleFilter,
|
|
236
|
-
collateralAmount
|
|
237
|
-
);
|
|
426
|
+
instance.updatePolicy(policyNftId, policyInfo, newPolicyState);
|
|
427
|
+
_poolService.updateBundle(productInfo.parentNftId, bundleNftId, bundleInfo, KEEP_STATE());
|
|
428
|
+
|
|
429
|
+
// involve pool if necessary
|
|
430
|
+
{
|
|
431
|
+
NftId poolNftId = bundleInfo.poolNftId;
|
|
432
|
+
ISetup.PoolSetupInfo memory poolInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
|
433
|
+
|
|
434
|
+
if(poolInfo.isConfirmingApplication) {
|
|
435
|
+
_underwriteByPool(
|
|
436
|
+
poolNftId,
|
|
437
|
+
policyNftId,
|
|
438
|
+
policyInfo,
|
|
439
|
+
bundleInfo.filter,
|
|
440
|
+
collateralAmount
|
|
441
|
+
);
|
|
442
|
+
}
|
|
238
443
|
}
|
|
239
444
|
|
|
240
445
|
// TODO add logging
|
|
241
446
|
}
|
|
242
447
|
|
|
243
448
|
function calculateRequiredCollateral(UFixed collateralizationLevel, uint256 sumInsuredAmount) public pure override returns(uint256 collateralAmount) {
|
|
244
|
-
UFixed sumInsuredUFixed =
|
|
449
|
+
UFixed sumInsuredUFixed = UFixedLib.toUFixed(sumInsuredAmount);
|
|
245
450
|
UFixed collateralUFixed = collateralizationLevel * sumInsuredUFixed;
|
|
246
451
|
return collateralUFixed.toInt();
|
|
247
452
|
}
|
|
@@ -249,41 +454,37 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
|
249
454
|
function collectPremium(NftId policyNftId, Timestamp activateAt) external override {
|
|
250
455
|
// check caller is registered product
|
|
251
456
|
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
|
457
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
|
252
458
|
|
|
253
|
-
//
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
uint256 premiumAmount = policyInfo.premiumAmount;
|
|
258
|
-
_processPremiumByTreasury(instance, product, policyNftId, premiumAmount);
|
|
459
|
+
// TODO: check if not paid
|
|
460
|
+
// TODO: transfer premium
|
|
461
|
+
// TODO: optionally activate
|
|
259
462
|
|
|
260
|
-
//
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
//
|
|
265
|
-
if(activateAt > zeroTimestamp()) {
|
|
266
|
-
require(
|
|
267
|
-
policyInfo.activatedAt.eqz(),
|
|
268
|
-
"ERROR:PRS-030:ALREADY_ACTIVATED");
|
|
463
|
+
// // perform actual token transfers (this code is probably not complete)
|
|
464
|
+
// IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
|
465
|
+
|
|
466
|
+
// uint256 premiumAmount = policyInfo.premiumAmount;
|
|
467
|
+
// _processPremiumByTreasury(instance, productInfo.nftId, policyNftId, premiumAmount);
|
|
269
468
|
|
|
270
|
-
|
|
271
|
-
|
|
469
|
+
// // policy level book keeping for premium paid
|
|
470
|
+
// policyInfo.premiumPaidAmount += premiumAmount;
|
|
272
471
|
|
|
273
|
-
|
|
274
|
-
policyInfo.state = ACTIVE();
|
|
275
|
-
}
|
|
472
|
+
// instance.updatePolicy(policyNftId, policyInfo, KEEP_STATE());
|
|
276
473
|
|
|
277
|
-
|
|
474
|
+
// // optional activation of policy
|
|
475
|
+
// if(activateAt > zeroTimestamp()) {
|
|
476
|
+
// activate(policyNftId, activateAt);
|
|
477
|
+
// }
|
|
278
478
|
|
|
279
479
|
// TODO add logging
|
|
280
480
|
}
|
|
281
481
|
|
|
282
|
-
function activate(NftId policyNftId, Timestamp activateAt)
|
|
482
|
+
function activate(NftId policyNftId, Timestamp activateAt) public override {
|
|
283
483
|
// check caller is registered product
|
|
284
484
|
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
|
485
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
|
285
486
|
|
|
286
|
-
IPolicy.PolicyInfo memory policyInfo =
|
|
487
|
+
IPolicy.PolicyInfo memory policyInfo = instanceReader.getPolicyInfo(policyNftId);
|
|
287
488
|
|
|
288
489
|
require(
|
|
289
490
|
policyInfo.activatedAt.eqz(),
|
|
@@ -292,10 +493,7 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
|
292
493
|
policyInfo.activatedAt = activateAt;
|
|
293
494
|
policyInfo.expiredAt = activateAt.addSeconds(policyInfo.lifetime);
|
|
294
495
|
|
|
295
|
-
|
|
296
|
-
policyInfo.state = ACTIVE();
|
|
297
|
-
|
|
298
|
-
instance.setPolicyInfo(policyInfo);
|
|
496
|
+
instance.updatePolicy(policyNftId, policyInfo, ACTIVE());
|
|
299
497
|
|
|
300
498
|
// TODO add logging
|
|
301
499
|
}
|
|
@@ -315,12 +513,15 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
|
315
513
|
view
|
|
316
514
|
returns (NftId poolNftid)
|
|
317
515
|
{
|
|
318
|
-
|
|
516
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
|
517
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(productNftId);
|
|
518
|
+
return productSetupInfo.poolNftId;
|
|
319
519
|
}
|
|
320
520
|
|
|
521
|
+
|
|
321
522
|
function _processPremiumByTreasury(
|
|
322
523
|
IInstance instance,
|
|
323
|
-
|
|
524
|
+
NftId productNftId,
|
|
324
525
|
NftId policyNftId,
|
|
325
526
|
uint256 premiumAmount
|
|
326
527
|
)
|
|
@@ -329,25 +530,27 @@ contract ProductService is ComponentServiceBase, IProductService {
|
|
|
329
530
|
{
|
|
330
531
|
// process token transfer(s)
|
|
331
532
|
if(premiumAmount > 0) {
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
address
|
|
533
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instance.getInstanceReader().getProductSetupInfo(productNftId);
|
|
534
|
+
TokenHandler tokenHandler = productSetupInfo.tokenHandler;
|
|
535
|
+
address policyOwner = getRegistry().ownerOf(policyNftId);
|
|
536
|
+
ISetup.PoolSetupInfo memory poolSetupInfo = instance.getInstanceReader().getPoolSetupInfo(productSetupInfo.poolNftId);
|
|
537
|
+
address poolWallet = poolSetupInfo.wallet;
|
|
335
538
|
netPremiumAmount = premiumAmount;
|
|
336
|
-
Fee memory
|
|
539
|
+
Fee memory productFee = productSetupInfo.productFee;
|
|
337
540
|
|
|
338
|
-
if (feeIsZero(
|
|
541
|
+
if (FeeLib.feeIsZero(productFee)) {
|
|
339
542
|
tokenHandler.transfer(
|
|
340
543
|
policyOwner,
|
|
341
544
|
poolWallet,
|
|
342
545
|
premiumAmount
|
|
343
546
|
);
|
|
344
547
|
} else {
|
|
345
|
-
(uint256
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
tokenHandler.transfer(policyOwner,
|
|
548
|
+
(uint256 productFeeAmount, uint256 netAmount) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
|
549
|
+
address productWallet = productSetupInfo.wallet;
|
|
550
|
+
if (tokenHandler.getToken().allowance(policyOwner, address(tokenHandler)) < premiumAmount) {
|
|
551
|
+
revert ErrorIProductServiceInsufficientAllowance(policyOwner, address(tokenHandler), premiumAmount);
|
|
552
|
+
}
|
|
553
|
+
tokenHandler.transfer(policyOwner, productWallet, productFeeAmount);
|
|
351
554
|
tokenHandler.transfer(policyOwner, poolWallet, netAmount);
|
|
352
555
|
netPremiumAmount = netAmount;
|
|
353
556
|
}
|