@etherisc/gif-next 0.0.2-ce8407f-016 → 0.0.2-ce87da3-250
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 +243 -2
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +4 -0
- package/artifacts/contracts/components/Component.sol/Component.json +853 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +1346 -0
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/ServiceBase.sol/ServiceBase.json → components/IComponent.sol/IComponent.json} +195 -150
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +900 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +887 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +806 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +4 -0
- package/artifacts/contracts/components/Pool.sol/Pool.json +1322 -0
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +4 -0
- package/artifacts/contracts/components/Product.sol/Product.json +1246 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +764 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/{AccessManagedSimple.sol/AccessManagedSimple.json → Cloneable.sol/Cloneable.json} +86 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2475 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +509 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1051 -1183
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +211 -144
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +562 -54
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +958 -29
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +693 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +261 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +552 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +0 -77
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +10 -244
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +2 -2
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +59 -16
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +869 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +657 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1096 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +661 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +754 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +637 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1254 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +753 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +473 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +633 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +409 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +639 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +583 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +347 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +384 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1120 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +717 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +727 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +649 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +777 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +649 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +47 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +236 -63
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +323 -178
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +210 -212
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +285 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +432 -268
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +323 -129
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +547 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +498 -0
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +40 -29
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +129 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +21 -34
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{experiment/inheritance/IB.sol/IB.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +18 -20
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/{components/IBaseComponent.sol/IBaseComponent.json → shared/IService.sol/IService.json} +67 -39
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +120 -27
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +248 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +294 -61
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +129 -51
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +84 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/{instance/base/IService.sol/IService.json → shared/Service.sol/Service.json} +155 -151
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +4 -4
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +129 -51
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +111 -5
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +147 -226
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +91 -53
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/test/Usdc.sol/USDC.json +91 -53
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +100 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +4 -4
- 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 +26 -3
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- 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/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +100 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- 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/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +4 -0
- package/artifacts/contracts/{experiment/types/TypeB.sol/TypeBLib.json → types/UFixed.sol/MathLib.json} +4 -4
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +4 -0
- package/artifacts/contracts/types/UFixed.sol/{UFixedMathLib.json → UFixedLib.json} +3 -3
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -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/Component.sol +241 -0
- package/contracts/components/Distribution.sol +287 -0
- package/contracts/components/IComponent.sol +54 -0
- package/contracts/components/IDistributionComponent.sol +92 -0
- package/contracts/components/IPoolComponent.sol +87 -0
- package/contracts/components/IProductComponent.sol +39 -0
- package/contracts/components/Pool.sol +254 -0
- package/contracts/components/Product.sol +285 -0
- package/contracts/instance/BundleManager.sol +125 -0
- package/contracts/instance/Cloneable.sol +46 -0
- package/contracts/instance/IInstance.sol +87 -1
- package/contracts/instance/IInstanceService.sol +59 -0
- package/contracts/instance/Instance.sol +137 -238
- package/contracts/instance/InstanceAccessManager.sol +90 -81
- package/contracts/instance/InstanceReader.sol +86 -28
- package/contracts/instance/InstanceService.sol +453 -22
- package/contracts/instance/InstanceServiceManager.sol +54 -0
- package/contracts/instance/ObjectManager.sol +84 -0
- package/contracts/instance/base/ComponentService.sol +134 -0
- package/contracts/instance/base/IKeyValueStore.sol +5 -4
- package/contracts/instance/base/KeyValueStore.sol +4 -20
- package/contracts/instance/module/IAccess.sol +28 -19
- package/contracts/instance/module/IBundle.sol +1 -0
- package/contracts/instance/module/IDistribution.sol +1 -0
- package/contracts/instance/module/IPolicy.sol +4 -2
- package/contracts/instance/module/ISetup.sol +10 -3
- package/contracts/instance/module/ITreasury.sol +1 -1
- package/contracts/instance/service/ApplicationService.sol +268 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +298 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/ClaimService.sol +151 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +366 -0
- package/contracts/instance/service/DistributionServiceManager.sol +51 -0
- package/contracts/instance/service/IApplicationService.sol +82 -0
- package/contracts/instance/service/IBundleService.sol +54 -0
- package/contracts/instance/service/IClaimService.sol +61 -0
- package/contracts/instance/service/IDistributionService.sol +81 -0
- package/contracts/instance/service/IPolicyService.sol +89 -0
- package/contracts/instance/service/IPoolService.sol +20 -0
- package/contracts/instance/service/IProductService.sol +40 -0
- package/contracts/instance/service/PolicyService.sol +476 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +109 -0
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +233 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +41 -26
- package/contracts/registry/IRegistry.sol +51 -25
- package/contracts/registry/IRegistryService.sol +54 -16
- package/contracts/registry/Registry.sol +279 -306
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +170 -256
- package/contracts/registry/RegistryServiceManager.sol +30 -11
- package/contracts/registry/ReleaseManager.sol +322 -0
- package/contracts/registry/TokenRegistry.sol +116 -0
- package/contracts/shared/ERC165.sol +15 -9
- package/contracts/shared/INftOwnable.sol +11 -10
- package/contracts/shared/IPolicyHolder.sol +26 -0
- package/contracts/shared/IRegisterable.sol +4 -6
- package/contracts/shared/IRegistryLinked.sol +12 -0
- package/contracts/shared/IService.sol +18 -0
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +67 -83
- package/contracts/shared/PolicyHolder.sol +81 -0
- package/contracts/shared/ProxyManager.sol +101 -26
- package/contracts/shared/Registerable.sol +15 -30
- package/contracts/shared/RegistryLinked.sol +48 -0
- package/contracts/shared/Service.sol +58 -0
- package/contracts/shared/TokenHandler.sol +2 -2
- package/contracts/shared/UpgradableProxyWithAdmin.sol +2 -2
- package/contracts/shared/Versionable.sol +5 -93
- package/contracts/test/TestFee.sol +2 -2
- package/contracts/test/TestRegisterable.sol +1 -1
- package/contracts/test/TestRoleId.sol +6 -6
- package/contracts/test/TestService.sol +6 -7
- package/contracts/types/ClaimId.sol +52 -0
- package/contracts/types/DistributorType.sol +2 -2
- package/contracts/types/Fee.sol +3 -3
- package/contracts/types/NftIdSet.sol +26 -24
- package/contracts/types/ObjectType.sol +9 -5
- package/contracts/types/PayoutId.sol +54 -0
- package/contracts/types/RoleId.sol +19 -4
- package/contracts/types/StateId.sol +4 -0
- package/contracts/types/UFixed.sol +128 -12
- package/contracts/types/Version.sol +4 -1
- package/package.json +6 -5
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.json +0 -37
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagedSimple.sol/AccessManagedSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/AccessManagerSimple.sol/AccessManagerSimple.json +0 -1119
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.dbg.json +0 -4
- package/artifacts/contracts/instance/IAccessManagerSimple.sol/IAccessManagerSimple.json +0 -1082
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +0 -4
- package/artifacts/contracts/instance/base/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 -457
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +0 -4
- package/contracts/components/IBaseComponent.sol +0 -19
- package/contracts/experiment/errors/Require.sol +0 -38
- package/contracts/experiment/errors/Revert.sol +0 -44
- package/contracts/experiment/inheritance/A.sol +0 -53
- package/contracts/experiment/inheritance/B.sol +0 -28
- package/contracts/experiment/inheritance/C.sol +0 -34
- package/contracts/experiment/inheritance/IA.sol +0 -13
- package/contracts/experiment/inheritance/IB.sol +0 -10
- package/contracts/experiment/inheritance/IC.sol +0 -12
- package/contracts/experiment/statemachine/Dummy.sol +0 -27
- package/contracts/experiment/statemachine/ISM.sol +0 -25
- package/contracts/experiment/statemachine/SM.sol +0 -57
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
- package/contracts/experiment/types/TypeA.sol +0 -47
- package/contracts/experiment/types/TypeB.sol +0 -29
- package/contracts/instance/AccessManagedSimple.sol +0 -114
- package/contracts/instance/AccessManagerSimple.sol +0 -682
- package/contracts/instance/IAccessManagerSimple.sol +0 -391
- package/contracts/instance/base/IService.sol +0 -15
- package/contracts/instance/base/ServiceBase.sol +0 -44
- package/contracts/registry/IChainNft.sol +0 -22
@@ -0,0 +1,134 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IComponent} from "../../components/IComponent.sol";
|
5
|
+
import {IRegistry} from "../../registry/IRegistry.sol";
|
6
|
+
import {IRegistryService} from "../../registry/IRegistryService.sol";
|
7
|
+
import {IInstance} from "../../instance/IInstance.sol";
|
8
|
+
import {IAccess} from "../module/IAccess.sol";
|
9
|
+
import {ObjectType, INSTANCE, REGISTRY} from "../../types/ObjectType.sol";
|
10
|
+
import {NftId} from "../../types/NftId.sol";
|
11
|
+
import {RoleId} from "../../types/RoleId.sol";
|
12
|
+
|
13
|
+
import {Service} from "../../shared/Service.sol";
|
14
|
+
import {InstanceService} from "../InstanceService.sol";
|
15
|
+
import {InstanceAccessManager} from "../InstanceAccessManager.sol";
|
16
|
+
|
17
|
+
abstract contract ComponentService is Service {
|
18
|
+
|
19
|
+
error ErrorComponentServiceAlreadyRegistered(address component, NftId nftId);
|
20
|
+
error ErrorComponentServiceNotComponent(address component);
|
21
|
+
error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
|
22
|
+
error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
|
23
|
+
error ErrorComponentServiceExpectedRoleMissing(NftId instanceNftId, RoleId requiredRole, address sender);
|
24
|
+
error ErrorComponentServiceComponentLocked(address component);
|
25
|
+
|
26
|
+
/// @dev modifier to check if caller is a registered service
|
27
|
+
modifier onlyService() {
|
28
|
+
address caller = msg.sender;
|
29
|
+
require(getRegistry().isRegisteredService(caller), "ERROR_NOT_SERVICE");
|
30
|
+
_;
|
31
|
+
}
|
32
|
+
|
33
|
+
// view functions
|
34
|
+
|
35
|
+
function getRegistryService() public view virtual returns (IRegistryService) {
|
36
|
+
address service = getRegistry().getServiceAddress(REGISTRY(), getMajorVersion());
|
37
|
+
return IRegistryService(service);
|
38
|
+
}
|
39
|
+
|
40
|
+
function getInstanceService() public view returns (InstanceService) {
|
41
|
+
address service = getRegistry().getServiceAddress(INSTANCE(), getMajorVersion());
|
42
|
+
return InstanceService(service);
|
43
|
+
}
|
44
|
+
|
45
|
+
// internal functions
|
46
|
+
function _checkComponentForRegistration(
|
47
|
+
address componentAddress,
|
48
|
+
ObjectType requiredType,
|
49
|
+
RoleId requiredRole
|
50
|
+
)
|
51
|
+
internal
|
52
|
+
view
|
53
|
+
returns (
|
54
|
+
IComponent component,
|
55
|
+
address owner,
|
56
|
+
IInstance instance,
|
57
|
+
NftId instanceNftId
|
58
|
+
)
|
59
|
+
{
|
60
|
+
// component may only be registerd by initial owner of component
|
61
|
+
owner = msg.sender;
|
62
|
+
|
63
|
+
// check component has not already been registerd
|
64
|
+
NftId compoentNftId = getRegistry().getNftId(componentAddress);
|
65
|
+
if(compoentNftId.gtz()) {
|
66
|
+
revert ErrorComponentServiceAlreadyRegistered(componentAddress, compoentNftId);
|
67
|
+
}
|
68
|
+
|
69
|
+
// check this is a component
|
70
|
+
component = IComponent(componentAddress);
|
71
|
+
if(!component.supportsInterface(type(IComponent).interfaceId)) {
|
72
|
+
revert ErrorComponentServiceNotComponent(componentAddress);
|
73
|
+
}
|
74
|
+
|
75
|
+
// check component is of required type
|
76
|
+
IRegistry.ObjectInfo memory componentInfo = component.getInitialInfo();
|
77
|
+
if(componentInfo.objectType != requiredType) {
|
78
|
+
revert ErrorComponentServiceInvalidType(componentAddress, requiredType, componentInfo.objectType);
|
79
|
+
}
|
80
|
+
|
81
|
+
// check msg.sender is component owner
|
82
|
+
address initialOwner = componentInfo.initialOwner;
|
83
|
+
if(owner != initialOwner) {
|
84
|
+
revert ErrorComponentServiceSenderNotOwner(componentAddress, componentInfo.initialOwner, owner);
|
85
|
+
}
|
86
|
+
|
87
|
+
// check instance has assigned required role to owner
|
88
|
+
instanceNftId = componentInfo.parentNftId;
|
89
|
+
instance = _getInstance(instanceNftId);
|
90
|
+
bool hasRole = getInstanceService().hasRole(
|
91
|
+
owner,
|
92
|
+
requiredRole,
|
93
|
+
address(instance));
|
94
|
+
|
95
|
+
if(!hasRole) {
|
96
|
+
revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
|
97
|
+
}
|
98
|
+
}
|
99
|
+
|
100
|
+
// internal view functions
|
101
|
+
|
102
|
+
function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
|
103
|
+
IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
|
104
|
+
return IInstance(instanceInfo.objectAddress);
|
105
|
+
}
|
106
|
+
|
107
|
+
function _getAndVerifyComponentInfoAndInstance(
|
108
|
+
//address component,
|
109
|
+
ObjectType expectedType
|
110
|
+
)
|
111
|
+
internal
|
112
|
+
view
|
113
|
+
returns(
|
114
|
+
IRegistry.ObjectInfo memory info,
|
115
|
+
IInstance instance
|
116
|
+
)
|
117
|
+
{
|
118
|
+
IRegistry registry = getRegistry();
|
119
|
+
//TODO redundant check -> just check type
|
120
|
+
//NftId componentNftId = registry.getNftId(component);
|
121
|
+
//require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
|
122
|
+
|
123
|
+
info = registry.getObjectInfo(msg.sender);
|
124
|
+
require(info.objectType == expectedType, "OBJECT_TYPE_INVALID");
|
125
|
+
|
126
|
+
address instanceAddress = registry.getObjectInfo(info.parentNftId).objectAddress;
|
127
|
+
instance = IInstance(instanceAddress);
|
128
|
+
|
129
|
+
InstanceAccessManager accessManager = InstanceAccessManager(instance.authority());
|
130
|
+
if (accessManager.isTargetLocked(info.objectAddress)) {
|
131
|
+
revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
|
132
|
+
}
|
133
|
+
}
|
134
|
+
}
|
@@ -9,6 +9,7 @@ import {StateId} from "../../types/StateId.sol";
|
|
9
9
|
|
10
10
|
import {ILifecycle} from "./ILifecycle.sol";
|
11
11
|
|
12
|
+
// TODO remove - internal only?
|
12
13
|
interface IKeyValueStore is ILifecycle {
|
13
14
|
|
14
15
|
struct Value {
|
@@ -33,10 +34,10 @@ interface IKeyValueStore is ILifecycle {
|
|
33
34
|
event LogStateUpdated(ObjectType objectType, KeyId keyId, StateId stateOld, StateId stateNew, address updatedBy, address txOrigin, Blocknumber lastUpdatedIn);
|
34
35
|
|
35
36
|
// generic state changing functions
|
36
|
-
function create(Key32 key, bytes memory data) external;
|
37
|
-
function update(Key32 key, bytes memory data, StateId state) external;
|
38
|
-
function updateData(Key32 key, bytes memory data) external;
|
39
|
-
function updateState(Key32 key, StateId state) external;
|
37
|
+
// function create(Key32 key, bytes memory data) external;
|
38
|
+
// function update(Key32 key, bytes memory data, StateId state) external;
|
39
|
+
// function updateData(Key32 key, bytes memory data) external;
|
40
|
+
// function updateState(Key32 key, StateId state) external;
|
40
41
|
|
41
42
|
function exists(Key32 key) external view returns (bool);
|
42
43
|
function get(Key32 key) external view returns (Value memory value);
|
@@ -14,25 +14,12 @@ import {IKeyValueStore} from "./IKeyValueStore.sol";
|
|
14
14
|
contract KeyValueStore is Lifecycle, IKeyValueStore {
|
15
15
|
|
16
16
|
mapping(Key32 key32 => Value value) private _value;
|
17
|
-
address private _owner;
|
18
|
-
|
19
|
-
modifier onlyOwner() {
|
20
|
-
require(
|
21
|
-
msg.sender == _owner,
|
22
|
-
"ERROR:KVS-001:NOT_OWNER");
|
23
|
-
_;
|
24
|
-
}
|
25
|
-
|
26
|
-
constructor() {
|
27
|
-
_owner = msg.sender;
|
28
|
-
}
|
29
17
|
|
30
18
|
function create(
|
31
19
|
Key32 key32,
|
32
20
|
bytes memory data
|
33
21
|
)
|
34
|
-
|
35
|
-
onlyOwner
|
22
|
+
internal
|
36
23
|
{
|
37
24
|
_create(key32, data);
|
38
25
|
}
|
@@ -72,8 +59,7 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
|
|
72
59
|
bytes memory data,
|
73
60
|
StateId state
|
74
61
|
)
|
75
|
-
|
76
|
-
onlyOwner
|
62
|
+
internal
|
77
63
|
{
|
78
64
|
_update(key32, data, state);
|
79
65
|
}
|
@@ -108,8 +94,7 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
|
|
108
94
|
}
|
109
95
|
|
110
96
|
function updateData(Key32 key32, bytes memory data)
|
111
|
-
|
112
|
-
onlyOwner
|
97
|
+
internal
|
113
98
|
{
|
114
99
|
_updateData(key32, data);
|
115
100
|
}
|
@@ -136,8 +121,7 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
|
|
136
121
|
}
|
137
122
|
|
138
123
|
function updateState(Key32 key32, StateId state)
|
139
|
-
|
140
|
-
onlyOwner
|
124
|
+
internal
|
141
125
|
{
|
142
126
|
_updateState(key32, state);
|
143
127
|
}
|
@@ -1,38 +1,47 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
5
|
-
import {ShortString, ShortStrings} from "@openzeppelin5/contracts/utils/ShortStrings.sol";
|
4
|
+
import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
|
6
5
|
|
7
6
|
import {RoleId} from "../../types/RoleId.sol";
|
7
|
+
import {Timestamp} from "../../types/Timestamp.sol";
|
8
8
|
|
9
9
|
interface IAccess {
|
10
|
+
|
10
11
|
struct RoleInfo {
|
11
12
|
ShortString name;
|
12
13
|
bool isCustom;
|
14
|
+
bool isLocked;
|
15
|
+
Timestamp createdAt;
|
16
|
+
Timestamp updatedAt;
|
13
17
|
}
|
14
18
|
|
15
19
|
struct TargetInfo {
|
16
20
|
ShortString name;
|
17
21
|
bool isCustom;
|
22
|
+
bool isLocked;
|
23
|
+
Timestamp createdAt;
|
24
|
+
Timestamp updatedAt;
|
18
25
|
}
|
19
26
|
|
20
|
-
error
|
21
|
-
error
|
22
|
-
error
|
23
|
-
error
|
24
|
-
error
|
25
|
-
|
26
|
-
error
|
27
|
-
error
|
28
|
-
error
|
29
|
-
error
|
30
|
-
error
|
31
|
-
error
|
32
|
-
error ErrorRoleNameNotUnique(RoleId roleId, ShortString name);
|
33
|
-
error ErrorRoleInvalidUpdate(RoleId roleId, bool isCustom);
|
34
|
-
error ErrorGrantNonexstentRole(RoleId roleId);
|
35
|
-
error ErrorRevokeNonexstentRole(RoleId roleId);
|
36
|
-
error ErrorRenounceNonexstentRole(RoleId roleId);
|
27
|
+
error ErrorIAccessRoleIdInvalid(RoleId roleId);
|
28
|
+
error ErrorIAccessRoleIdTooBig(RoleId roleId);
|
29
|
+
error ErrorIAccessRoleIdTooSmall(RoleId roleId);
|
30
|
+
error ErrorIAccessRoleIdAlreadyExists(RoleId roleId, ShortString name);
|
31
|
+
error ErrorIAccessRoleIdNotActive(RoleId roleId);
|
32
|
+
error ErrorIAccessRoleNameEmpty(RoleId roleId);
|
33
|
+
error ErrorIAccessRoleNameNotUnique(RoleId roleId, ShortString name);
|
34
|
+
error ErrorIAccessRoleInvalidUpdate(RoleId roleId, bool isCustom);
|
35
|
+
error ErrorIAccessRoleIsCustomIsImmutable(RoleId roleId, bool isCustom, bool isCustomExisting);
|
36
|
+
error ErrorIAccessGrantNonexstentRole(RoleId roleId);
|
37
|
+
error ErrorIAccessRevokeNonexstentRole(RoleId roleId);
|
38
|
+
error ErrorIAccessRenounceNonexstentRole(RoleId roleId);
|
37
39
|
|
40
|
+
error ErrorIAccessTargetAddressZero();
|
41
|
+
error ErrorIAccessTargetDoesNotExist(ShortString name);
|
42
|
+
error ErrorIAccessTargetAddressDoesNotExist(address target);
|
43
|
+
error ErrorIAccessTargetExists(address target, ShortString name);
|
44
|
+
error ErrorIAccessTargetNameEmpty(address target);
|
45
|
+
error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
|
46
|
+
error ErrorIAccessTargetLocked(address target);
|
38
47
|
}
|
@@ -13,6 +13,7 @@ interface IBundle {
|
|
13
13
|
uint256 capitalAmount; // net investment capital + net premiums - payouts
|
14
14
|
uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
|
15
15
|
uint256 balanceAmount; // total amount of funds: capitalAmount + fees (balance >= captial)
|
16
|
+
uint256 lifetime;
|
16
17
|
Timestamp expiredAt; // no new policies
|
17
18
|
Timestamp closedAt; // no open policies, locked amount = 0
|
18
19
|
}
|
@@ -2,12 +2,14 @@
|
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {NftId} from "../../types/NftId.sol";
|
5
|
-
import {
|
5
|
+
import {ClaimId} from "../../types/ClaimId.sol";
|
6
6
|
import {ReferralId} from "../../types/Referral.sol";
|
7
7
|
import {RiskId} from "../../types/RiskId.sol";
|
8
8
|
import {Timestamp} from "../../types/Timestamp.sol";
|
9
9
|
|
10
10
|
interface IPolicy {
|
11
|
+
|
12
|
+
/// @dev policy data for the full policy lifecycle
|
11
13
|
struct PolicyInfo {
|
12
14
|
NftId productNftId;
|
13
15
|
NftId bundleNftId;
|
@@ -37,7 +39,7 @@ interface IPolicy {
|
|
37
39
|
|
38
40
|
// claimId neeeds to be encoded policyNftId:claimId combination
|
39
41
|
struct PayoutInfo {
|
40
|
-
|
42
|
+
ClaimId claimId;
|
41
43
|
uint256 amount;
|
42
44
|
bytes data;
|
43
45
|
Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
|
@@ -1,10 +1,11 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC20Metadata} from "@
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
|
6
6
|
import {Fee} from "../../types/Fee.sol";
|
7
7
|
import {NftId} from "../../types/NftId.sol";
|
8
|
+
import {UFixed} from "../../types/UFixed.sol";
|
8
9
|
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
9
10
|
|
10
11
|
interface ISetup {
|
@@ -19,23 +20,29 @@ interface ISetup {
|
|
19
20
|
Fee poolFee; // pool fee on net premium
|
20
21
|
Fee stakingFee; // pool fee on staked capital from investor
|
21
22
|
Fee performanceFee; // pool fee on profits from capital investors
|
23
|
+
bool isIntercepting; // intercepts nft transfers (for products)
|
24
|
+
address wallet;
|
22
25
|
}
|
23
26
|
|
24
27
|
struct DistributionSetupInfo {
|
25
28
|
NftId productNftId;
|
26
29
|
TokenHandler tokenHandler;
|
27
30
|
Fee distributionFee; // default distribution fee (no referral id)
|
28
|
-
bool isIntercepting; // intercepts nft transfers (for distributors)
|
29
31
|
address wallet;
|
32
|
+
// TODO: add sum of distibution owner fees (excl commissions from distributors)
|
30
33
|
}
|
31
34
|
|
32
35
|
struct PoolSetupInfo {
|
33
36
|
NftId productNftId;
|
34
37
|
TokenHandler tokenHandler;
|
38
|
+
bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
|
39
|
+
bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
|
40
|
+
bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
|
41
|
+
UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
|
42
|
+
UFixed retentionLevel; // amount of collateral held in pool (default 100%)
|
35
43
|
Fee poolFee; // pool fee on net premium
|
36
44
|
Fee stakingFee; // pool fee on staked capital from investor
|
37
45
|
Fee performanceFee; // pool fee on profits from capital investors
|
38
|
-
bool isIntercepting; // intercepts nft transfers (for bundles)
|
39
46
|
address wallet;
|
40
47
|
}
|
41
48
|
}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC20Metadata} from "@
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
|
6
6
|
import {Fee} from "../../types/Fee.sol";
|
7
7
|
import {NftId} from "../../types/NftId.sol";
|
@@ -0,0 +1,268 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRisk} from "../module/IRisk.sol";
|
5
|
+
import {IService} from "./IApplicationService.sol";
|
6
|
+
|
7
|
+
import {IRegistry} from "../../registry/IRegistry.sol";
|
8
|
+
import {IProductComponent} from "../../components/IProductComponent.sol";
|
9
|
+
import {Product} from "../../components/Product.sol";
|
10
|
+
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
11
|
+
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
12
|
+
import {IInstance} from "../IInstance.sol";
|
13
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
14
|
+
import {IRisk} from "../module/IRisk.sol";
|
15
|
+
import {IBundle} from "../module/IBundle.sol";
|
16
|
+
import {IProductService} from "./IProductService.sol";
|
17
|
+
import {ITreasury} from "../module/ITreasury.sol";
|
18
|
+
import {ISetup} from "../module/ISetup.sol";
|
19
|
+
|
20
|
+
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
21
|
+
|
22
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
23
|
+
import {Versionable} from "../../shared/Versionable.sol";
|
24
|
+
|
25
|
+
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
26
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
27
|
+
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
28
|
+
import {ObjectType, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, BUNDLE} from "../../types/ObjectType.sol";
|
29
|
+
import {APPLIED, REVOKED, UNDERWRITTEN, ACTIVE, KEEP_STATE, CLOSED} from "../../types/StateId.sol";
|
30
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
31
|
+
import {Fee, FeeLib} from "../../types/Fee.sol";
|
32
|
+
import {ReferralId} from "../../types/Referral.sol";
|
33
|
+
import {RiskId} from "../../types/RiskId.sol";
|
34
|
+
import {StateId} from "../../types/StateId.sol";
|
35
|
+
import {Version, VersionLib} from "../../types/Version.sol";
|
36
|
+
|
37
|
+
import {ComponentService} from "../base/ComponentService.sol";
|
38
|
+
import {InstanceReader} from "../InstanceReader.sol";
|
39
|
+
import {IApplicationService} from "./IApplicationService.sol";
|
40
|
+
import {IBundleService} from "./IBundleService.sol";
|
41
|
+
import {IPoolService} from "./IPoolService.sol";
|
42
|
+
import {IService} from "../../shared/IService.sol";
|
43
|
+
import {Service} from "../../shared/Service.sol";
|
44
|
+
|
45
|
+
|
46
|
+
contract ApplicationService is
|
47
|
+
ComponentService,
|
48
|
+
IApplicationService
|
49
|
+
{
|
50
|
+
|
51
|
+
function _initialize(
|
52
|
+
address owner,
|
53
|
+
bytes memory data
|
54
|
+
)
|
55
|
+
internal
|
56
|
+
virtual override
|
57
|
+
initializer()
|
58
|
+
{
|
59
|
+
// TODO check this, might no longer be the way, refactor if necessary
|
60
|
+
address registryAddress;
|
61
|
+
address initialOwner;
|
62
|
+
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
63
|
+
|
64
|
+
initializeService(registryAddress, owner);
|
65
|
+
registerInterface(type(IApplicationService).interfaceId);
|
66
|
+
}
|
67
|
+
|
68
|
+
|
69
|
+
function getDomain() public pure override(IService, Service) returns(ObjectType) {
|
70
|
+
return APPLICATION();
|
71
|
+
}
|
72
|
+
|
73
|
+
|
74
|
+
function create(
|
75
|
+
address applicationOwner,
|
76
|
+
RiskId riskId,
|
77
|
+
uint256 sumInsuredAmount,
|
78
|
+
uint256 lifetime,
|
79
|
+
NftId bundleNftId,
|
80
|
+
ReferralId referralId,
|
81
|
+
bytes memory applicationData
|
82
|
+
)
|
83
|
+
external
|
84
|
+
virtual
|
85
|
+
returns (NftId applicationNftId)
|
86
|
+
{
|
87
|
+
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
88
|
+
// TODO: add validations (see create bundle in pool service)
|
89
|
+
|
90
|
+
applicationNftId = getRegistryService().registerPolicy(
|
91
|
+
IRegistry.ObjectInfo(
|
92
|
+
zeroNftId(),
|
93
|
+
productInfo.nftId,
|
94
|
+
POLICY(),
|
95
|
+
false, // intercepting property for policies is defined on product
|
96
|
+
address(0),
|
97
|
+
applicationOwner,
|
98
|
+
""
|
99
|
+
)
|
100
|
+
);
|
101
|
+
|
102
|
+
(uint256 premiumAmount,,,,) = calculatePremium(
|
103
|
+
riskId,
|
104
|
+
sumInsuredAmount,
|
105
|
+
lifetime,
|
106
|
+
applicationData,
|
107
|
+
bundleNftId,
|
108
|
+
referralId
|
109
|
+
);
|
110
|
+
|
111
|
+
IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
|
112
|
+
productInfo.nftId,
|
113
|
+
bundleNftId,
|
114
|
+
referralId,
|
115
|
+
riskId,
|
116
|
+
sumInsuredAmount,
|
117
|
+
premiumAmount,
|
118
|
+
0,
|
119
|
+
lifetime,
|
120
|
+
applicationData,
|
121
|
+
"",
|
122
|
+
0,
|
123
|
+
0,
|
124
|
+
0,
|
125
|
+
zeroTimestamp(),
|
126
|
+
zeroTimestamp(),
|
127
|
+
zeroTimestamp()
|
128
|
+
);
|
129
|
+
|
130
|
+
instance.createApplication(applicationNftId, policyInfo);
|
131
|
+
instance.updateApplicationState(applicationNftId, APPLIED());
|
132
|
+
|
133
|
+
// TODO: add logging
|
134
|
+
}
|
135
|
+
|
136
|
+
|
137
|
+
function renew(
|
138
|
+
NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
|
139
|
+
NftId bundleNftId // will likely need a newer bundle for underwriting
|
140
|
+
)
|
141
|
+
external
|
142
|
+
virtual override
|
143
|
+
returns (NftId applicationNftId)
|
144
|
+
{
|
145
|
+
|
146
|
+
}
|
147
|
+
|
148
|
+
|
149
|
+
function adjust(
|
150
|
+
NftId applicationNftId,
|
151
|
+
RiskId riskId,
|
152
|
+
NftId bundleNftId,
|
153
|
+
ReferralId referralId,
|
154
|
+
uint256 sumInsuredAmount,
|
155
|
+
uint256 lifetime,
|
156
|
+
bytes memory applicationData
|
157
|
+
)
|
158
|
+
external
|
159
|
+
virtual override
|
160
|
+
{
|
161
|
+
|
162
|
+
}
|
163
|
+
|
164
|
+
function revoke(NftId applicationNftId)
|
165
|
+
external
|
166
|
+
virtual override
|
167
|
+
{
|
168
|
+
(, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
169
|
+
instance.updateApplicationState(applicationNftId, REVOKED());
|
170
|
+
}
|
171
|
+
|
172
|
+
|
173
|
+
function calculatePremium(
|
174
|
+
RiskId riskId,
|
175
|
+
uint256 sumInsuredAmount,
|
176
|
+
uint256 lifetime,
|
177
|
+
bytes memory applicationData,
|
178
|
+
NftId bundleNftId,
|
179
|
+
ReferralId referralId
|
180
|
+
)
|
181
|
+
public
|
182
|
+
view
|
183
|
+
virtual override
|
184
|
+
returns (
|
185
|
+
uint256 premiumAmount,
|
186
|
+
uint256 distributionFeeAmount,
|
187
|
+
uint256 productFeeAmount,
|
188
|
+
uint256 poolFeeAmount,
|
189
|
+
uint256 bundleFeeAmount
|
190
|
+
)
|
191
|
+
{
|
192
|
+
Product product = _getAndVerifyInstanceAndProduct();
|
193
|
+
uint256 netPremiumAmount = product.calculateNetPremium(
|
194
|
+
sumInsuredAmount,
|
195
|
+
riskId,
|
196
|
+
lifetime,
|
197
|
+
applicationData
|
198
|
+
);
|
199
|
+
|
200
|
+
(
|
201
|
+
productFeeAmount,
|
202
|
+
poolFeeAmount,
|
203
|
+
bundleFeeAmount,
|
204
|
+
distributionFeeAmount
|
205
|
+
) = _calculateFeeAmounts(
|
206
|
+
netPremiumAmount,
|
207
|
+
product,
|
208
|
+
bundleNftId,
|
209
|
+
referralId
|
210
|
+
);
|
211
|
+
|
212
|
+
premiumAmount = netPremiumAmount + productFeeAmount;
|
213
|
+
premiumAmount += poolFeeAmount + bundleFeeAmount;
|
214
|
+
premiumAmount += distributionFeeAmount;
|
215
|
+
}
|
216
|
+
|
217
|
+
|
218
|
+
// internal functions
|
219
|
+
|
220
|
+
function _calculateFeeAmounts(
|
221
|
+
uint256 netPremiumAmount,
|
222
|
+
Product product,
|
223
|
+
NftId bundleNftId,
|
224
|
+
ReferralId referralId
|
225
|
+
)
|
226
|
+
internal
|
227
|
+
view
|
228
|
+
returns (
|
229
|
+
uint256 productFeeAmount,
|
230
|
+
uint256 poolFeeAmount,
|
231
|
+
uint256 bundleFeeAmount,
|
232
|
+
uint256 distributionFeeAmount
|
233
|
+
)
|
234
|
+
{
|
235
|
+
InstanceReader instanceReader;
|
236
|
+
{
|
237
|
+
IInstance instance = product.getInstance();
|
238
|
+
instanceReader = instance.getInstanceReader();
|
239
|
+
}
|
240
|
+
|
241
|
+
NftId poolNftId = product.getPoolNftId();
|
242
|
+
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
243
|
+
require(bundleInfo.poolNftId == poolNftId,"ERROR:PRS-035:BUNDLE_POOL_MISMATCH");
|
244
|
+
|
245
|
+
{
|
246
|
+
ISetup.ProductSetupInfo memory productSetupInfo = instanceReader.getProductSetupInfo(product.getProductNftId());
|
247
|
+
(productFeeAmount,) = FeeLib.calculateFee(productSetupInfo.productFee, netPremiumAmount);
|
248
|
+
}
|
249
|
+
{
|
250
|
+
ISetup.PoolSetupInfo memory poolSetupInfo = instanceReader.getPoolSetupInfo(poolNftId);
|
251
|
+
(poolFeeAmount,) = FeeLib.calculateFee(poolSetupInfo.poolFee, netPremiumAmount);
|
252
|
+
}
|
253
|
+
{
|
254
|
+
NftId distributionNftId = product.getDistributionNftId();
|
255
|
+
ISetup.DistributionSetupInfo memory distributionSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
256
|
+
(distributionFeeAmount,) = FeeLib.calculateFee(distributionSetupInfo.distributionFee, netPremiumAmount);
|
257
|
+
}
|
258
|
+
|
259
|
+
(bundleFeeAmount,) = FeeLib.calculateFee(bundleInfo.fee, netPremiumAmount);
|
260
|
+
}
|
261
|
+
|
262
|
+
|
263
|
+
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
264
|
+
IRegistry.ObjectInfo memory productInfo;
|
265
|
+
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
266
|
+
product = Product(productInfo.objectAddress);
|
267
|
+
}
|
268
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
5
|
+
import {ProxyManager} from "../../shared/ProxyManager.sol";
|
6
|
+
import {ApplicationService} from "./ApplicationService.sol";
|
7
|
+
|
8
|
+
contract ApplicationServiceManager is ProxyManager {
|
9
|
+
|
10
|
+
ApplicationService private _applicationService;
|
11
|
+
|
12
|
+
/// @dev initializes proxy manager with service implementation
|
13
|
+
constructor(
|
14
|
+
address registryAddress
|
15
|
+
)
|
16
|
+
ProxyManager(registryAddress)
|
17
|
+
{
|
18
|
+
ApplicationService svc = new ApplicationService();
|
19
|
+
bytes memory data = abi.encode(registryAddress, address(this));
|
20
|
+
IVersionable versionable = deploy(
|
21
|
+
address(svc),
|
22
|
+
data);
|
23
|
+
|
24
|
+
_applicationService = ApplicationService(address(versionable));
|
25
|
+
}
|
26
|
+
|
27
|
+
//--- view functions ----------------------------------------------------//
|
28
|
+
function getApplicationService()
|
29
|
+
external
|
30
|
+
view
|
31
|
+
returns (ApplicationService)
|
32
|
+
{
|
33
|
+
return _applicationService;
|
34
|
+
}
|
35
|
+
}
|