@etherisc/gif-next 0.0.2-fe77319 → 0.0.2-ff8087d-237
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 +359 -8
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +727 -33
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +4 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +1376 -0
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +636 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +1000 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +1095 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +861 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +1281 -69
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +1064 -79
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +778 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +4 -0
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +190 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +2365 -529
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +600 -0
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +2965 -581
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +1330 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +1569 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +1099 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +724 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +4 -0
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +256 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +631 -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/base/ILifecycle.sol/ILifecycle.json +115 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +532 -0
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +194 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +237 -0
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/{access/IAccess.sol/IAccess.json → module/IBundle.sol/IBundle.json} +2 -2
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/{component/IComponent.sol/IComponent.json → module/IComponents.sol/IComponents.json} +2 -2
- 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/{policy → module}/IPolicy.sol/IPolicy.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool/IPoolModule.sol/IPool.json → module/IRisk.sol/IRisk.json} +2 -2
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +4 -0
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.json +10 -0
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.json +10 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1124 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +688 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +1283 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +696 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1384 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +752 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1847 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +816 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +619 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +730 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +743 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +1059 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +651 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +1077 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +442 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +1281 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +740 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1622 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +708 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +864 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +640 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +4 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +784 -0
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +559 -74
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +858 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +4 -0
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +52 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +646 -77
- 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 +4 -0
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +1150 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +4 -0
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +657 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +559 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +485 -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 +4 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +73 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +125 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +175 -0
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{instance/access/IAccess.sol/IAccessCheckRole.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +11 -11
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/shared/IService.sol/IService.json +327 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +55 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +4 -0
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +238 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +569 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +339 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +4 -0
- package/artifacts/contracts/shared/Service.sol/Service.json +488 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +114 -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 +4 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +78 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +370 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
- package/artifacts/contracts/test/TestService.sol/TestService.json +588 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +376 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +104 -0
- 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 +4 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +281 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +4 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +174 -0
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +10 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
- 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 +312 -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 +4 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +166 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +33 -0
- 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 +4 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +4 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +142 -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/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +4 -0
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +280 -0
- 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 +4 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.json +177 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +49 -0
- package/contracts/components/Component.sol +250 -40
- package/contracts/components/Distribution.sol +285 -0
- package/contracts/components/IComponent.sol +90 -0
- package/contracts/components/IDistributionComponent.sol +71 -0
- package/contracts/components/IPoolComponent.sol +114 -0
- package/contracts/components/IProductComponent.sol +41 -0
- package/contracts/components/Pool.sol +291 -18
- package/contracts/components/Product.sol +340 -33
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +126 -0
- package/contracts/instance/Cloneable.sol +51 -0
- package/contracts/instance/IInstance.sol +99 -15
- package/contracts/instance/IInstanceService.sol +63 -0
- package/contracts/instance/Instance.sol +297 -42
- package/contracts/instance/InstanceAccessManager.sol +527 -0
- package/contracts/instance/InstanceReader.sol +366 -0
- package/contracts/instance/InstanceService.sol +484 -0
- package/contracts/instance/InstanceServiceManager.sol +54 -0
- package/contracts/instance/ObjectManager.sol +82 -0
- package/contracts/instance/base/ComponentService.sol +130 -0
- package/contracts/instance/base/IKeyValueStore.sol +49 -0
- package/contracts/instance/base/ILifecycle.sol +30 -0
- package/contracts/instance/base/KeyValueStore.sol +149 -0
- package/contracts/instance/base/Lifecycle.sol +120 -0
- package/contracts/instance/module/IAccess.sol +54 -0
- package/contracts/instance/module/IBundle.sol +23 -0
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +42 -0
- package/contracts/instance/module/IPolicy.sol +77 -0
- package/contracts/instance/module/IRisk.sol +11 -0
- package/contracts/instance/module/ISetup.sol +33 -0
- package/contracts/instance/module/ITreasury.sol +23 -0
- package/contracts/instance/service/ApplicationService.sol +356 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +385 -0
- package/contracts/instance/service/BundleServiceManager.sol +51 -0
- package/contracts/instance/service/ClaimService.sol +443 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +432 -0
- package/contracts/instance/service/DistributionServiceManager.sol +51 -0
- package/contracts/instance/service/IApplicationService.sol +79 -0
- package/contracts/instance/service/IBundleService.sol +118 -0
- package/contracts/instance/service/IClaimService.sol +90 -0
- package/contracts/instance/service/IDistributionService.sol +101 -0
- package/contracts/instance/service/IPolicyService.sol +80 -0
- package/contracts/instance/service/IPoolService.sol +114 -0
- package/contracts/instance/service/IProductService.sol +40 -0
- package/contracts/instance/service/PolicyService.sol +372 -0
- package/contracts/instance/service/PolicyServiceManager.sol +54 -0
- package/contracts/instance/service/PoolService.sol +403 -0
- package/contracts/instance/service/PoolServiceManager.sol +51 -0
- package/contracts/instance/service/ProductService.sol +210 -0
- package/contracts/instance/service/ProductServiceManager.sol +54 -0
- package/contracts/registry/ChainNft.sol +210 -0
- package/contracts/registry/IRegistry.sol +87 -52
- package/contracts/registry/IRegistryService.sol +66 -0
- package/contracts/registry/ITransferInterceptor.sol +7 -0
- package/contracts/registry/Registry.sol +399 -129
- package/contracts/registry/RegistryAccessManager.sol +216 -0
- package/contracts/registry/RegistryService.sol +282 -0
- package/contracts/registry/RegistryServiceManager.sol +62 -0
- package/contracts/registry/ReleaseManager.sol +324 -0
- package/contracts/registry/TokenRegistry.sol +116 -0
- package/contracts/shared/ContractDeployerLib.sol +72 -0
- package/contracts/shared/ERC165.sol +27 -0
- package/contracts/shared/INftOwnable.sol +23 -0
- package/contracts/shared/IPolicyHolder.sol +40 -0
- package/contracts/shared/IRegisterable.sol +15 -0
- package/contracts/shared/IRegistryLinked.sol +11 -0
- package/contracts/shared/IService.sol +18 -0
- package/contracts/shared/IVersionable.sol +53 -0
- package/contracts/shared/NftOwnable.sol +118 -0
- package/contracts/shared/PolicyHolder.sol +94 -0
- package/contracts/shared/ProxyManager.sol +169 -0
- package/contracts/shared/Registerable.sol +75 -0
- package/contracts/shared/RegistryLinked.sol +43 -0
- package/contracts/shared/Service.sol +72 -0
- package/contracts/shared/TokenHandler.sol +35 -0
- package/contracts/shared/UpgradableProxyWithAdmin.sol +16 -0
- package/contracts/shared/Versionable.sol +59 -0
- package/contracts/test/TestFee.sol +25 -0
- package/contracts/test/TestRegisterable.sol +18 -0
- package/contracts/test/TestRoleId.sol +14 -0
- package/contracts/test/TestService.sol +25 -0
- package/contracts/test/TestToken.sol +26 -0
- package/contracts/test/TestVersion.sol +44 -0
- package/contracts/test/TestVersionable.sol +17 -0
- package/contracts/test/Usdc.sol +26 -0
- package/contracts/types/AddressSet.sol +58 -0
- package/contracts/types/Amount.sol +109 -0
- package/contracts/types/Blocknumber.sol +119 -0
- package/contracts/types/ChainId.sol +38 -0
- package/contracts/types/ClaimId.sol +75 -0
- package/contracts/types/DistributorType.sol +55 -0
- package/contracts/types/Fee.sol +65 -0
- package/contracts/types/Key32.sol +50 -0
- package/contracts/types/NftId.sol +80 -0
- package/contracts/types/NftIdSet.sol +62 -0
- package/contracts/types/NumberId.sol +52 -0
- package/contracts/types/ObjectType.sol +157 -0
- package/contracts/types/PayoutId.sol +82 -0
- package/contracts/types/Referral.sol +89 -0
- package/contracts/types/RiskId.sol +43 -0
- package/contracts/types/RoleId.sol +97 -0
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +110 -0
- package/contracts/types/Timestamp.sol +132 -0
- package/contracts/types/UFixed.sol +326 -0
- package/contracts/types/Version.sol +108 -0
- package/package.json +21 -6
- package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
- package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IPool.sol/IPoolComponent.json +0 -179
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -192
- package/artifacts/contracts/experiment/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/B.sol/B.json +0 -76
- package/artifacts/contracts/experiment/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/C.sol/C.json +0 -89
- package/artifacts/contracts/experiment/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/IA.sol/IA.json +0 -128
- package/artifacts/contracts/experiment/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/IA.sol/ISharedA.json +0 -37
- package/artifacts/contracts/experiment/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/IB.sol/IB.json +0 -50
- package/artifacts/contracts/experiment/IC.sol/IC.dbg.json +0 -4
- package/artifacts/contracts/experiment/IC.sol/IC.json +0 -63
- package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/access/Access.sol/AccessModule.json +0 -400
- package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.json +0 -336
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.json +0 -327
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -105
- package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.json +0 -179
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.json +0 -245
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -94
- package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.json +0 -24
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.json +0 -231
- package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.json +0 -231
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.json +0 -149
- package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.json +0 -162
- package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
- package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -114
- package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -125
- package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IOwnable.json +0 -24
- package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.json +0 -166
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
- package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
- package/artifacts/contracts/registry/Registry.sol/Registerable.json +0 -166
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
- package/contracts/components/IPool.sol +0 -9
- package/contracts/components/IProduct.sol +0 -11
- package/contracts/experiment/A.sol +0 -56
- package/contracts/experiment/B.sol +0 -23
- package/contracts/experiment/C.sol +0 -28
- package/contracts/experiment/IA.sol +0 -18
- package/contracts/experiment/IB.sol +0 -9
- package/contracts/experiment/IC.sol +0 -11
- package/contracts/instance/access/Access.sol +0 -218
- package/contracts/instance/access/IAccess.sol +0 -83
- package/contracts/instance/component/ComponentModule.sol +0 -259
- package/contracts/instance/component/IComponent.sol +0 -94
- package/contracts/instance/policy/IPolicy.sol +0 -66
- package/contracts/instance/policy/PolicyModule.sol +0 -106
- package/contracts/instance/pool/IPoolModule.sol +0 -40
- package/contracts/instance/pool/PoolModule.sol +0 -83
- package/contracts/instance/product/IProductService.sol +0 -45
- package/contracts/instance/product/ProductService.sol +0 -105
@@ -0,0 +1,432 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRegistry} from "../../registry/IRegistry.sol";
|
5
|
+
import {IInstance} from "../../instance/IInstance.sol";
|
6
|
+
import {InstanceAccessManager} from "../InstanceAccessManager.sol";
|
7
|
+
import {InstanceReader} from "../../instance/InstanceReader.sol";
|
8
|
+
import {ISetup} from "../../instance/module/ISetup.sol";
|
9
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
10
|
+
|
11
|
+
import {Amount, AmountLib} from "../../types/Amount.sol";
|
12
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
13
|
+
import {Fee, FeeLib} from "../../types/Fee.sol";
|
14
|
+
import {PRODUCT_SERVICE_ROLE, DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
|
15
|
+
import {KEEP_STATE} from "../../types/StateId.sol";
|
16
|
+
import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR} from "../../types/ObjectType.sol";
|
17
|
+
import {Version, VersionLib} from "../../types/Version.sol";
|
18
|
+
import {RoleId} from "../../types/RoleId.sol";
|
19
|
+
|
20
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
21
|
+
import {Versionable} from "../../shared/Versionable.sol";
|
22
|
+
|
23
|
+
import {IService} from "../../shared/IService.sol";
|
24
|
+
import {Service} from "../../shared/Service.sol";
|
25
|
+
import {ComponentService} from "../base/ComponentService.sol";
|
26
|
+
import {InstanceService} from "../InstanceService.sol";
|
27
|
+
import {IComponent} from "../../components/IComponent.sol";
|
28
|
+
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
29
|
+
import {IDistributionService} from "./IDistributionService.sol";
|
30
|
+
|
31
|
+
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
32
|
+
import {DistributorType, DistributorTypeLib} from "../../types/DistributorType.sol";
|
33
|
+
import {ReferralId, ReferralStatus, ReferralLib} from "../../types/Referral.sol";
|
34
|
+
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
35
|
+
import {Key32} from "../../types/Key32.sol";
|
36
|
+
import {IDistribution} from "../module/IDistribution.sol";
|
37
|
+
|
38
|
+
|
39
|
+
contract DistributionService is
|
40
|
+
ComponentService,
|
41
|
+
IDistributionService
|
42
|
+
{
|
43
|
+
using NftIdLib for NftId;
|
44
|
+
using TimestampLib for Timestamp;
|
45
|
+
using UFixedLib for UFixed;
|
46
|
+
using FeeLib for Fee;
|
47
|
+
using ReferralLib for ReferralId;
|
48
|
+
|
49
|
+
address internal _registryAddress;
|
50
|
+
|
51
|
+
function _initialize(
|
52
|
+
address owner,
|
53
|
+
bytes memory data
|
54
|
+
)
|
55
|
+
internal
|
56
|
+
initializer
|
57
|
+
virtual override
|
58
|
+
{
|
59
|
+
address initialOwner;
|
60
|
+
address registryAddress;
|
61
|
+
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
62
|
+
// TODO while DistributionService is not deployed in DistributionServiceManager constructor
|
63
|
+
// owner is DistributionServiceManager deployer
|
64
|
+
initializeService(registryAddress, address(0), owner);
|
65
|
+
registerInterface(type(IDistributionService).interfaceId);
|
66
|
+
}
|
67
|
+
|
68
|
+
function getDomain() public pure override returns(ObjectType) {
|
69
|
+
return DISTRIBUTION();
|
70
|
+
}
|
71
|
+
|
72
|
+
function register(address distributionAddress)
|
73
|
+
external
|
74
|
+
returns(NftId distributionNftId)
|
75
|
+
{
|
76
|
+
(
|
77
|
+
IComponent component,
|
78
|
+
address owner,
|
79
|
+
IInstance instance,
|
80
|
+
NftId instanceNftId
|
81
|
+
) = _checkComponentForRegistration(
|
82
|
+
distributionAddress,
|
83
|
+
DISTRIBUTION(),
|
84
|
+
DISTRIBUTION_OWNER_ROLE());
|
85
|
+
|
86
|
+
IRegistry.ObjectInfo memory distributionInfo = getRegistryService().registerDistribution(component, owner);
|
87
|
+
IDistributionComponent distribution = IDistributionComponent(distributionAddress);
|
88
|
+
distribution.linkToRegisteredNftId();
|
89
|
+
distributionNftId = distributionInfo.nftId;
|
90
|
+
|
91
|
+
instance.createDistributionSetup(distributionNftId, distribution.getSetupInfo());
|
92
|
+
// TODO move to distribution?
|
93
|
+
bytes4[][] memory selectors = new bytes4[][](2);
|
94
|
+
selectors[0] = new bytes4[](1);
|
95
|
+
selectors[1] = new bytes4[](2);
|
96
|
+
|
97
|
+
selectors[0][0] = IDistributionComponent.setFees.selector;
|
98
|
+
selectors[1][0] = IDistributionComponent.processRenewal.selector;
|
99
|
+
|
100
|
+
RoleId[] memory roles = new RoleId[](2);
|
101
|
+
roles[0] = DISTRIBUTION_OWNER_ROLE();
|
102
|
+
roles[1] = PRODUCT_SERVICE_ROLE();
|
103
|
+
|
104
|
+
getInstanceService().createGifTarget(
|
105
|
+
instanceNftId,
|
106
|
+
distributionAddress,
|
107
|
+
distribution.getName(),
|
108
|
+
selectors,
|
109
|
+
roles);
|
110
|
+
}
|
111
|
+
|
112
|
+
function setFees(
|
113
|
+
Fee memory minDistributionOwnerFee,
|
114
|
+
Fee memory distributionFee
|
115
|
+
)
|
116
|
+
external
|
117
|
+
override
|
118
|
+
{
|
119
|
+
if (minDistributionOwnerFee.fractionalFee > distributionFee.fractionalFee) {
|
120
|
+
revert ErrorIDistributionServiceMinFeeTooHigh(minDistributionOwnerFee.fractionalFee.toInt(), distributionFee.fractionalFee.toInt());
|
121
|
+
}
|
122
|
+
|
123
|
+
(NftId distributionNftId, IRegistry.ObjectInfo memory info , IInstance instance) = _getAndVerifyComponentInfoAndInstance(DISTRIBUTION());
|
124
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
125
|
+
|
126
|
+
ISetup.DistributionSetupInfo memory distSetupInfo = instanceReader.getDistributionSetupInfo(distributionNftId);
|
127
|
+
distSetupInfo.minDistributionOwnerFee = minDistributionOwnerFee;
|
128
|
+
distSetupInfo.distributionFee = distributionFee;
|
129
|
+
|
130
|
+
instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
|
131
|
+
}
|
132
|
+
|
133
|
+
function createDistributorType(
|
134
|
+
string memory name,
|
135
|
+
UFixed minDiscountPercentage,
|
136
|
+
UFixed maxDiscountPercentage,
|
137
|
+
UFixed commissionPercentage,
|
138
|
+
uint32 maxReferralCount,
|
139
|
+
uint32 maxReferralLifetime,
|
140
|
+
bool allowSelfReferrals,
|
141
|
+
bool allowRenewals,
|
142
|
+
bytes memory data
|
143
|
+
)
|
144
|
+
external
|
145
|
+
returns (DistributorType distributorType)
|
146
|
+
{
|
147
|
+
(NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
148
|
+
|
149
|
+
{
|
150
|
+
ISetup.DistributionSetupInfo memory setupInfo = instance.getInstanceReader().getDistributionSetupInfo(distributionNftId);
|
151
|
+
UFixed variableFeesPartsTotal = setupInfo.minDistributionOwnerFee.fractionalFee.add(commissionPercentage);
|
152
|
+
UFixed maxDiscountPercentageLimit = setupInfo.distributionFee.fractionalFee.sub(variableFeesPartsTotal);
|
153
|
+
if (maxDiscountPercentage.gt(maxDiscountPercentageLimit)) {
|
154
|
+
revert ErrorIDistributionServiceMaxDiscountTooHigh(maxDiscountPercentage.toInt(), maxDiscountPercentageLimit.toInt());
|
155
|
+
}
|
156
|
+
}
|
157
|
+
|
158
|
+
distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
|
159
|
+
IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
|
160
|
+
name,
|
161
|
+
minDiscountPercentage,
|
162
|
+
maxDiscountPercentage,
|
163
|
+
commissionPercentage,
|
164
|
+
maxReferralCount,
|
165
|
+
maxReferralLifetime,
|
166
|
+
allowSelfReferrals,
|
167
|
+
allowRenewals,
|
168
|
+
data);
|
169
|
+
|
170
|
+
instance.createDistributorType(distributorType, info);
|
171
|
+
}
|
172
|
+
|
173
|
+
|
174
|
+
function createDistributor(
|
175
|
+
address distributor,
|
176
|
+
DistributorType distributorType,
|
177
|
+
bytes memory data
|
178
|
+
)
|
179
|
+
external
|
180
|
+
virtual
|
181
|
+
returns (NftId distributorNftId)
|
182
|
+
{
|
183
|
+
(NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
184
|
+
|
185
|
+
distributorNftId = getRegistryService().registerDistributor(
|
186
|
+
IRegistry.ObjectInfo(
|
187
|
+
zeroNftId(),
|
188
|
+
distributionNftId,
|
189
|
+
DISTRIBUTOR(),
|
190
|
+
true, // intercepting property for bundles is defined on pool
|
191
|
+
address(0),
|
192
|
+
distributor,
|
193
|
+
""
|
194
|
+
));
|
195
|
+
|
196
|
+
IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
|
197
|
+
distributorType,
|
198
|
+
true, // active
|
199
|
+
data,
|
200
|
+
AmountLib.zero(),
|
201
|
+
0);
|
202
|
+
|
203
|
+
instance.createDistributor(distributorNftId, info);
|
204
|
+
}
|
205
|
+
|
206
|
+
// function updateDistributorType(
|
207
|
+
// NftId distributorNftId,
|
208
|
+
// DistributorType distributorType,
|
209
|
+
// bytes memory data
|
210
|
+
// )
|
211
|
+
// external
|
212
|
+
// virtual
|
213
|
+
// {
|
214
|
+
// (, IInstance instance) = _getAndVerifyCallingDistribution();
|
215
|
+
// InstanceReader instanceReader = instance.getInstanceReader();
|
216
|
+
// IDistribution.DistributorInfo memory distributorInfo = instanceReader.getDistributorInfo(distributorNftId);
|
217
|
+
// distributorInfo.distributorType = distributorType;
|
218
|
+
// distributorInfo.data = data;
|
219
|
+
// instance.updateDistributor(distributorNftId, distributorInfo, KEEP_STATE());
|
220
|
+
// }
|
221
|
+
|
222
|
+
|
223
|
+
function createReferral(
|
224
|
+
NftId distributorNftId,
|
225
|
+
string memory code,
|
226
|
+
UFixed discountPercentage,
|
227
|
+
uint32 maxReferrals,
|
228
|
+
Timestamp expiryAt,
|
229
|
+
bytes memory data
|
230
|
+
)
|
231
|
+
external
|
232
|
+
virtual
|
233
|
+
returns (ReferralId referralId)
|
234
|
+
{
|
235
|
+
(NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
236
|
+
|
237
|
+
if (bytes(code).length == 0) {
|
238
|
+
revert ErrorIDistributionServiceInvalidReferral(code);
|
239
|
+
}
|
240
|
+
if (expiryAt.eqz()) {
|
241
|
+
revert ErrorIDistributionServiceExpirationInvalid(expiryAt);
|
242
|
+
}
|
243
|
+
|
244
|
+
InstanceReader instanceReader = instance.getInstanceReader();
|
245
|
+
DistributorType distributorType = instanceReader.getDistributorInfo(distributorNftId).distributorType;
|
246
|
+
IDistribution.DistributorTypeInfo memory distributorTypeData = instanceReader.getDistributorTypeInfo(distributorType);
|
247
|
+
|
248
|
+
if (distributorTypeData.maxReferralCount < maxReferrals) {
|
249
|
+
revert ErrorIDistributionServiceMaxReferralsExceeded(distributorTypeData.maxReferralCount);
|
250
|
+
}
|
251
|
+
if (distributorTypeData.minDiscountPercentage > discountPercentage) {
|
252
|
+
revert ErrorIDistributionServiceDiscountTooLow(distributorTypeData.minDiscountPercentage.toInt(), discountPercentage.toInt());
|
253
|
+
}
|
254
|
+
if (distributorTypeData.maxDiscountPercentage < discountPercentage) {
|
255
|
+
revert ErrorIDistributionServiceDiscountTooHigh(distributorTypeData.maxDiscountPercentage.toInt(), discountPercentage.toInt());
|
256
|
+
}
|
257
|
+
if (expiryAt.toInt() - TimestampLib.blockTimestamp().toInt() > distributorTypeData.maxReferralLifetime) {
|
258
|
+
revert ErrorIDistributionServiceExpiryTooLong(distributorTypeData.maxReferralLifetime, expiryAt.toInt());
|
259
|
+
}
|
260
|
+
|
261
|
+
referralId = ReferralLib.toReferralId(distributionNftId, code);
|
262
|
+
IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
|
263
|
+
distributorNftId,
|
264
|
+
code,
|
265
|
+
discountPercentage,
|
266
|
+
maxReferrals,
|
267
|
+
0, // used referrals
|
268
|
+
expiryAt,
|
269
|
+
data
|
270
|
+
);
|
271
|
+
|
272
|
+
instance.createReferral(referralId, info);
|
273
|
+
return referralId;
|
274
|
+
}
|
275
|
+
|
276
|
+
function processSale(
|
277
|
+
NftId distributionNftId,
|
278
|
+
ReferralId referralId,
|
279
|
+
IPolicy.Premium memory premium,
|
280
|
+
Amount transferredDistributionFeeAmount
|
281
|
+
)
|
282
|
+
external
|
283
|
+
virtual
|
284
|
+
{
|
285
|
+
bool isReferral = ! referralId.eqz();
|
286
|
+
bool referralValid = referralIsValid(distributionNftId, referralId);
|
287
|
+
|
288
|
+
if (isReferral && ! referralValid) {
|
289
|
+
revert ErrorIDistributionServiceReferralInvalid(distributionNftId, referralId);
|
290
|
+
}
|
291
|
+
|
292
|
+
IInstance instance = _getInstanceForDistribution(distributionNftId);
|
293
|
+
InstanceReader reader = instance.getInstanceReader();
|
294
|
+
IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
|
295
|
+
IDistribution.DistributorInfo memory distributorInfo = reader.getDistributorInfo(referralInfo.distributorNftId);
|
296
|
+
ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
|
297
|
+
|
298
|
+
Amount distributionOwnerFee = AmountLib.toAmount(premium.distributionOwnerFeeFixAmount + premium.distributionOwnerFeeVarAmount);
|
299
|
+
Amount commissionAmount = AmountLib.toAmount(premium.commissionAmount);
|
300
|
+
|
301
|
+
if (!(transferredDistributionFeeAmount == distributionOwnerFee + commissionAmount)) {
|
302
|
+
revert ErrorDistributionServiceInvalidFeeTransferred(transferredDistributionFeeAmount, distributionOwnerFee + commissionAmount);
|
303
|
+
}
|
304
|
+
|
305
|
+
|
306
|
+
if (distributionOwnerFee.gtz()) {
|
307
|
+
setupInfo.sumDistributionOwnerFees += distributionOwnerFee.toInt();
|
308
|
+
instance.updateDistributionSetup(distributionNftId, setupInfo, KEEP_STATE());
|
309
|
+
}
|
310
|
+
|
311
|
+
if (isReferral) {
|
312
|
+
referralInfo.usedReferrals += 1;
|
313
|
+
instance.updateReferral(referralId, referralInfo, KEEP_STATE());
|
314
|
+
|
315
|
+
if (commissionAmount.gtz()) {
|
316
|
+
distributorInfo.commissionAmount = distributorInfo.commissionAmount + commissionAmount;
|
317
|
+
distributorInfo.numPoliciesSold += 1;
|
318
|
+
instance.updateDistributor(referralInfo.distributorNftId, distributorInfo, KEEP_STATE());
|
319
|
+
}
|
320
|
+
}
|
321
|
+
}
|
322
|
+
|
323
|
+
function calculateFeeAmount(
|
324
|
+
NftId distributionNftId,
|
325
|
+
ReferralId referralId,
|
326
|
+
IPolicy.Premium memory premium
|
327
|
+
)
|
328
|
+
external
|
329
|
+
virtual
|
330
|
+
view
|
331
|
+
returns (IPolicy.Premium memory finalPremium)
|
332
|
+
{
|
333
|
+
IInstance instance = _getInstanceForDistribution(distributionNftId);
|
334
|
+
InstanceReader reader = instance.getInstanceReader();
|
335
|
+
|
336
|
+
// first calculate all fixed and variable fees for the distribution - this will defined the fullPremium
|
337
|
+
ISetup.DistributionSetupInfo memory setupInfo = reader.getDistributionSetupInfo(distributionNftId);
|
338
|
+
Fee memory distributionFee = setupInfo.distributionFee;
|
339
|
+
Fee memory minDistributionOwnerFee = setupInfo.minDistributionOwnerFee;
|
340
|
+
uint256 distributionFeeVarAmount = (UFixedLib.toUFixed(premium.netPremiumAmount) * distributionFee.fractionalFee).toInt();
|
341
|
+
premium.distributionFeeVarAmount = distributionFeeVarAmount;
|
342
|
+
premium.fullPremiumAmount += distributionFeeVarAmount;
|
343
|
+
|
344
|
+
// if the referral is not valid, then the distribution owner gets everything
|
345
|
+
if (! referralIsValid(distributionNftId, referralId)) {
|
346
|
+
premium.distributionOwnerFeeFixAmount = premium.distributionFeeFixAmount;
|
347
|
+
premium.distributionOwnerFeeVarAmount = premium.distributionFeeVarAmount;
|
348
|
+
premium.premiumAmount = premium.fullPremiumAmount;
|
349
|
+
return premium;
|
350
|
+
}
|
351
|
+
|
352
|
+
// if the referral is valid, the commission and discount are calculated based in the full premium
|
353
|
+
// the remaing amount goes to the distribution owner
|
354
|
+
{
|
355
|
+
IDistribution.ReferralInfo memory referralInfo = reader.getReferralInfo(referralId);
|
356
|
+
IDistribution.DistributorTypeInfo memory distributorTypeInfo = reader.getDistributorTypeInfo(
|
357
|
+
reader.getDistributorInfo(
|
358
|
+
referralInfo.distributorNftId).distributorType);
|
359
|
+
|
360
|
+
uint256 commissionAmount = UFixedLib.toUFixed(premium.netPremiumAmount).mul(distributorTypeInfo.commissionPercentage).toInt();
|
361
|
+
premium.commissionAmount = commissionAmount;
|
362
|
+
premium.discountAmount = UFixedLib.toUFixed(premium.fullPremiumAmount).mul(referralInfo.discountPercentage).toInt();
|
363
|
+
premium.distributionOwnerFeeFixAmount = minDistributionOwnerFee.fixedFee;
|
364
|
+
premium.distributionOwnerFeeVarAmount = distributionFeeVarAmount - commissionAmount - premium.discountAmount;
|
365
|
+
premium.premiumAmount = premium.fullPremiumAmount - premium.discountAmount;
|
366
|
+
}
|
367
|
+
|
368
|
+
// sanity check to validate the fee calculation
|
369
|
+
if (
|
370
|
+
premium.distributionOwnerFeeFixAmount < minDistributionOwnerFee.fixedFee
|
371
|
+
|| (premium.distributionFeeVarAmount) != (premium.discountAmount + premium.distributionOwnerFeeVarAmount + premium.commissionAmount)
|
372
|
+
)
|
373
|
+
{
|
374
|
+
revert ErrorIDistributionServiceFeeCalculationMismatch(
|
375
|
+
premium.distributionFeeFixAmount,
|
376
|
+
premium.distributionFeeVarAmount,
|
377
|
+
premium.distributionOwnerFeeFixAmount,
|
378
|
+
premium.distributionOwnerFeeVarAmount,
|
379
|
+
premium.commissionAmount,
|
380
|
+
premium.discountAmount
|
381
|
+
);
|
382
|
+
}
|
383
|
+
|
384
|
+
return premium;
|
385
|
+
}
|
386
|
+
|
387
|
+
// TODO: zero should return false
|
388
|
+
function referralIsValid(NftId distributionNftId, ReferralId referralId) public view returns (bool isValid) {
|
389
|
+
IInstance instance = _getInstanceForDistribution(distributionNftId);
|
390
|
+
IDistribution.ReferralInfo memory info = instance.getInstanceReader().getReferralInfo(referralId);
|
391
|
+
|
392
|
+
if (info.distributorNftId.eqz()) {
|
393
|
+
return false;
|
394
|
+
}
|
395
|
+
|
396
|
+
isValid = info.expiryAt.eqz() || (info.expiryAt.gtz() && TimestampLib.blockTimestamp() <= info.expiryAt);
|
397
|
+
isValid = isValid && info.usedReferrals < info.maxReferrals;
|
398
|
+
}
|
399
|
+
|
400
|
+
function _getAndVerifyCallingDistribution()
|
401
|
+
internal
|
402
|
+
view
|
403
|
+
returns(
|
404
|
+
NftId distributionNftId,
|
405
|
+
IInstance instance
|
406
|
+
)
|
407
|
+
{
|
408
|
+
distributionNftId = getRegistry().getNftId(msg.sender);
|
409
|
+
if (distributionNftId.eqz()) {
|
410
|
+
revert ErrorDistributionServiceCallerNotRegistered(msg.sender);
|
411
|
+
}
|
412
|
+
|
413
|
+
IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(distributionNftId);
|
414
|
+
if(info.objectType != DISTRIBUTION()) {
|
415
|
+
revert ErrorIDistributionServiceCallerNotDistributor(msg.sender);
|
416
|
+
}
|
417
|
+
|
418
|
+
address instanceAddress = getRegistry().getObjectInfo(info.parentNftId).objectAddress;
|
419
|
+
instance = IInstance(instanceAddress);
|
420
|
+
}
|
421
|
+
|
422
|
+
|
423
|
+
function _getInstanceForDistribution(NftId distributionNftId)
|
424
|
+
internal
|
425
|
+
view
|
426
|
+
returns(IInstance instance)
|
427
|
+
{
|
428
|
+
NftId instanceNftId = getRegistry().getObjectInfo(distributionNftId).parentNftId;
|
429
|
+
address instanceAddress = getRegistry().getObjectInfo(instanceNftId).objectAddress;
|
430
|
+
return IInstance(instanceAddress);
|
431
|
+
}
|
432
|
+
}
|
@@ -0,0 +1,51 @@
|
|
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 {DistributionService} from "./DistributionService.sol";
|
7
|
+
import {Registry} from "../../registry/Registry.sol";
|
8
|
+
import {RegistryService} from "../../registry/RegistryService.sol";
|
9
|
+
import {REGISTRY} from "../../types/ObjectType.sol";
|
10
|
+
|
11
|
+
contract DistributionServiceManager is ProxyManager {
|
12
|
+
|
13
|
+
DistributionService private _distributionService;
|
14
|
+
|
15
|
+
/// @dev initializes proxy manager with distribution service implementation and deploys instance
|
16
|
+
constructor(
|
17
|
+
address registryAddress
|
18
|
+
)
|
19
|
+
ProxyManager(registryAddress)
|
20
|
+
{
|
21
|
+
DistributionService distSrv = new DistributionService();
|
22
|
+
bytes memory data = abi.encode(registryAddress, address(this));
|
23
|
+
IVersionable versionable = deploy(
|
24
|
+
address(distSrv),
|
25
|
+
data);
|
26
|
+
|
27
|
+
_distributionService = DistributionService(address(versionable));
|
28
|
+
|
29
|
+
// TODO `thi` must have a role or own nft to register service
|
30
|
+
//Registry registry = Registry(registryAddress);
|
31
|
+
//address registryServiceAddress = registry.getServiceAddress(REGISTRY(), _distributionService.getMajorVersion());
|
32
|
+
//RegistryService registryService = RegistryService(registryServiceAddress);
|
33
|
+
//registryService.registerService(_distributionService);
|
34
|
+
|
35
|
+
// TODO no nft to link yet
|
36
|
+
// link ownership of instance service manager ot nft owner of instance service
|
37
|
+
//_linkToNftOwnable(
|
38
|
+
// address(registryAddress),
|
39
|
+
// address(_distributionService));
|
40
|
+
}
|
41
|
+
|
42
|
+
//--- view functions ----------------------------------------------------//
|
43
|
+
function getDistributionService()
|
44
|
+
external
|
45
|
+
view
|
46
|
+
returns (DistributionService distributionService)
|
47
|
+
{
|
48
|
+
return _distributionService;
|
49
|
+
}
|
50
|
+
|
51
|
+
}
|
@@ -0,0 +1,79 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IPolicy} from "../module/IPolicy.sol";
|
5
|
+
import {IService} from "../../shared/IService.sol";
|
6
|
+
|
7
|
+
import {Amount} from "../../types/Amount.sol";
|
8
|
+
import {NftId} from "../../types/NftId.sol";
|
9
|
+
import {ObjectType} from "../../types/ObjectType.sol";
|
10
|
+
import {ReferralId} from "../../types/Referral.sol";
|
11
|
+
import {RiskId} from "../../types/RiskId.sol";
|
12
|
+
import {Seconds} from "../../types/Seconds.sol";
|
13
|
+
|
14
|
+
/// @dev gif service responsible for creating applications
|
15
|
+
/// only product components may call transaction functions
|
16
|
+
interface IApplicationService is IService {
|
17
|
+
|
18
|
+
error ErrorApplicationServiceNotProduct(NftId callerNftId, ObjectType callerType);
|
19
|
+
error ErrorApplicationServiceBundlePoolMismatch(NftId bundleNftId, NftId bundlePoolNftId, NftId poolNftId);
|
20
|
+
|
21
|
+
/// @dev creates a new application based on the specified attributes
|
22
|
+
/// may only be called by a product component
|
23
|
+
function create(
|
24
|
+
address applicationOwner,
|
25
|
+
RiskId riskId,
|
26
|
+
Amount sumInsuredAmount,
|
27
|
+
Seconds lifetime,
|
28
|
+
NftId bundleNftId,
|
29
|
+
ReferralId referralId,
|
30
|
+
bytes memory applicationData
|
31
|
+
) external returns (NftId applicationNftId);
|
32
|
+
|
33
|
+
/// @dev updates application attributes
|
34
|
+
/// may only be called while the application is in applied state
|
35
|
+
/// may only be called by the referenced product related to applicationNftId
|
36
|
+
function adjust(
|
37
|
+
NftId applicationNftId,
|
38
|
+
RiskId riskId,
|
39
|
+
NftId bundleNftId,
|
40
|
+
ReferralId referralId,
|
41
|
+
Amount sumInsuredAmount,
|
42
|
+
Seconds lifetime,
|
43
|
+
bytes memory applicationData
|
44
|
+
) external;
|
45
|
+
|
46
|
+
/// @dev creates a new application that extends the provided policy
|
47
|
+
/// lifetime will seamlessly extend referenced policy, for closed policies
|
48
|
+
/// lifetime will start at underwriting time
|
49
|
+
/// product will need to limit the time window for renewal as underwriting
|
50
|
+
/// will lock the collateral at underwriting time which might be earlier than activation time
|
51
|
+
/// policyNftId needs to refer to an underwritten (or active or closed) policy
|
52
|
+
/// may only be called by the referenced product related to policyNftId
|
53
|
+
function renew(
|
54
|
+
NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
|
55
|
+
NftId bundleNftId // will likely need a newer bundle for underwriting
|
56
|
+
) external returns (NftId applicationNftId);
|
57
|
+
|
58
|
+
/// @dev revokes the application represented by {policyNftId}
|
59
|
+
/// an application can only be revoked in applied state
|
60
|
+
/// only the application holder may revoke an application
|
61
|
+
function revoke(NftId policyNftId) external;
|
62
|
+
|
63
|
+
/// @dev calculates the premium amount for the specified attributes
|
64
|
+
/// also returns the various fee components involved with creating a policy
|
65
|
+
function calculatePremium(
|
66
|
+
NftId productNftId,
|
67
|
+
RiskId riskId,
|
68
|
+
Amount sumInsuredAmount,
|
69
|
+
Seconds lifetime,
|
70
|
+
bytes memory applicationData,
|
71
|
+
NftId bundleNftId,
|
72
|
+
ReferralId referralId
|
73
|
+
)
|
74
|
+
external
|
75
|
+
view
|
76
|
+
returns (
|
77
|
+
IPolicy.Premium memory premium
|
78
|
+
);
|
79
|
+
}
|
@@ -0,0 +1,118 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {Amount} from "../../types/Amount.sol";
|
5
|
+
import {NftId} from "../../types/NftId.sol";
|
6
|
+
import {Fee} from "../../types/Fee.sol";
|
7
|
+
import {IService} from "../../shared/IService.sol";
|
8
|
+
import {IBundle} from "../module/IBundle.sol";
|
9
|
+
import {IInstance} from "../../instance/IInstance.sol";
|
10
|
+
import {Seconds} from "../../types/Seconds.sol";
|
11
|
+
import {StateId} from "../../types/StateId.sol";
|
12
|
+
import {Timestamp} from "../../types/Timestamp.sol";
|
13
|
+
|
14
|
+
interface IBundleService is IService {
|
15
|
+
|
16
|
+
event LogBundleServiceBundleActivated(NftId bundleNftId);
|
17
|
+
event LogBundleServiceBundleLocked(NftId bundleNftId);
|
18
|
+
|
19
|
+
error ErrorBundleServiceInsufficientAllowance(address bundleOwner, address tokenHandlerAddress, Amount amount);
|
20
|
+
error ErrorBundleServiceBundleNotOpen(NftId bundleNftId, StateId state, Timestamp expiredAt);
|
21
|
+
error ErrorBundleServiceCapacityInsufficient(NftId bundleNftId, Amount capacityAmount, Amount collateralAmount);
|
22
|
+
error ErrorBundleServiceBundleWithOpenPolicies(NftId bundleNftId, uint256 openPoliciesCount);
|
23
|
+
|
24
|
+
error ErrorBundleServiceBundleUnknown(NftId bundleNftId);
|
25
|
+
error ErrorBundleServiceBundlePoolMismatch(NftId expectedPoolNftId, NftId bundlePoolNftId);
|
26
|
+
|
27
|
+
error ErrorBundleServicePolicyNotCloseable(NftId policyNftId);
|
28
|
+
|
29
|
+
/// @dev create a new bundle for the specified attributes
|
30
|
+
/// may only be called by pool service
|
31
|
+
function create(
|
32
|
+
IInstance instance, // instance relevant for bundle
|
33
|
+
NftId poolNftId, // the pool the bundle will be linked to
|
34
|
+
address owner, // initial bundle owner
|
35
|
+
Fee memory fee, // fees deducted from premium that go to bundle owner
|
36
|
+
Amount stakingAmount, // staking amount - staking fees result in initial bundle capital
|
37
|
+
Seconds lifetime, // initial duration for which new policies are covered
|
38
|
+
bytes calldata filter // optional use case specific criteria that define if a policy may be covered by this bundle
|
39
|
+
)
|
40
|
+
external
|
41
|
+
returns(NftId bundleNftId); // the nft id of the newly created bundle
|
42
|
+
|
43
|
+
|
44
|
+
/// @dev increase bundle stakes by the specified amount
|
45
|
+
/// may only be called by the bundle owner
|
46
|
+
// function stake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
|
47
|
+
|
48
|
+
// function unstake(NftId bundleNftId, uint256 amount) external returns(uint256 netAmount);
|
49
|
+
|
50
|
+
/// @dev locks the specified bundle, locked bundles are not available to collateralize new policies
|
51
|
+
/// only active bundles may be locked
|
52
|
+
/// may only be called by registered and unlocked pool components
|
53
|
+
function lock(NftId bundleNftId) external;
|
54
|
+
|
55
|
+
/// @dev activates the specified bundle
|
56
|
+
/// only locked bundles may be unlocked
|
57
|
+
/// may only be called by registered and unlocked pool components
|
58
|
+
function unlock(NftId bundleNftId) external;
|
59
|
+
|
60
|
+
/// @dev closes the specified bundle
|
61
|
+
/// only open bundles (active or locked) may be closed
|
62
|
+
/// to close a bundle it may not have any non-closed polices attached to it
|
63
|
+
/// may only be called by registered and unlocked pool components
|
64
|
+
function close(
|
65
|
+
IInstance instance,
|
66
|
+
NftId bundleNftId
|
67
|
+
) external;
|
68
|
+
|
69
|
+
/// @dev set bundle fee to provided value
|
70
|
+
/// may only be called by registered and unlocked pool components
|
71
|
+
function setFee(
|
72
|
+
NftId bundleNftId,
|
73
|
+
Fee memory fee
|
74
|
+
) external;
|
75
|
+
|
76
|
+
|
77
|
+
/// @dev locks the specified collateral in the bundle
|
78
|
+
/// the locked collateral is added to the bundle locked capital
|
79
|
+
/// the bundles' fees are updated with the fees for this premium
|
80
|
+
/// the premium (minus bundle fee) is added to the bundle capital
|
81
|
+
/// may only be called by pool service
|
82
|
+
function lockCollateral(
|
83
|
+
IInstance instanceNftId,
|
84
|
+
NftId policyNftId,
|
85
|
+
NftId bundleNftId,
|
86
|
+
Amount collateralAmount,
|
87
|
+
Amount premiumAmount // premium after pool fee
|
88
|
+
) external;
|
89
|
+
|
90
|
+
/// @dev releases the specified collateral in the bundle
|
91
|
+
/// may only be called by pool service
|
92
|
+
function releaseCollateral(
|
93
|
+
IInstance instance,
|
94
|
+
NftId policyNftId,
|
95
|
+
NftId bundleNftId,
|
96
|
+
Amount collateralAmount
|
97
|
+
) external;
|
98
|
+
|
99
|
+
/// @dev unlink policy from bundle
|
100
|
+
/// policy may only be unlinked if policy is closeable
|
101
|
+
/// may only be called by pool service
|
102
|
+
function unlinkPolicy(
|
103
|
+
IInstance instance,
|
104
|
+
NftId policyNftId
|
105
|
+
) external;
|
106
|
+
|
107
|
+
/// @dev updates the bundle's fees of with the provided fee amount
|
108
|
+
function updateBundleFees(
|
109
|
+
IInstance instance,
|
110
|
+
NftId bundleNftId,
|
111
|
+
Amount feeAmount
|
112
|
+
) external;
|
113
|
+
|
114
|
+
function increaseBalance(
|
115
|
+
IInstance instance,
|
116
|
+
NftId bundleNftId,
|
117
|
+
Amount amount) external;
|
118
|
+
}
|