@etherisc/gif-next 0.0.2-2a0a7d0-893 → 0.0.2-2a59cd5-352
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -1
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +405 -6
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +883 -141
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +113 -6
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +798 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +662 -43
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +656 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +583 -75
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +504 -5
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +1 -1
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +2 -2
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +450 -35
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +111 -7
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +589 -223
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +39 -89
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +58 -53
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +400 -96
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +175 -25
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +2 -2
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +166 -7
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- 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 +2 -2
- 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 +13 -13
- 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 +1117 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +290 -66
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +169 -19
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +439 -27
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +194 -16
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +638 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +118 -40
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +217 -7
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +33 -20
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +20 -7
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +20 -7
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +223 -64
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +182 -32
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +186 -27
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +166 -16
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +186 -27
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +166 -16
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +15 -2
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +100 -26
- 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 +28 -15
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +260 -40
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +166 -16
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +11 -11
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +160 -10
- 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 +37 -0
- 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 +18 -5
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.json +69 -0
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +20 -7
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -2
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +156 -11
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +269 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +156 -6
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +152 -11
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +105 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +166 -7
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- 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 -2
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +152 -11
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +2 -2
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +184 -25
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -8
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/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/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/types/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/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/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/contracts/components/Component.sol +121 -62
- package/contracts/components/Distribution.sol +207 -53
- package/contracts/components/IComponent.sol +16 -3
- package/contracts/components/IDistributionComponent.sol +59 -3
- package/contracts/components/IPoolComponent.sol +50 -29
- package/contracts/components/IProductComponent.sol +5 -1
- package/contracts/components/Pool.sol +133 -137
- package/contracts/components/Product.sol +90 -107
- package/contracts/instance/IInstance.sol +26 -6
- package/contracts/instance/IInstanceService.sol +19 -0
- package/contracts/instance/Instance.sol +58 -30
- package/contracts/instance/InstanceAccessManager.sol +12 -13
- package/contracts/instance/InstanceService.sol +119 -39
- package/contracts/instance/base/ComponentService.sol +3 -2
- package/contracts/instance/module/IAccess.sol +3 -4
- package/contracts/instance/module/ISetup.sol +5 -4
- package/contracts/instance/service/ApplicationService.sol +268 -0
- package/contracts/instance/service/BundleService.sol +11 -6
- package/contracts/instance/service/DistributionService.sol +197 -30
- package/contracts/instance/service/IApplicationService.sol +82 -0
- package/contracts/instance/service/IBundleService.sol +11 -1
- package/contracts/instance/service/IDistributionService.sol +53 -0
- package/contracts/instance/service/IPolicyService.sol +10 -16
- package/contracts/instance/service/PolicyService.sol +84 -98
- package/contracts/instance/service/PoolService.sol +9 -42
- package/contracts/instance/service/ProductService.sol +20 -28
- package/contracts/registry/IRegistry.sol +3 -2
- package/contracts/registry/IRegistryService.sol +16 -6
- package/contracts/registry/Registry.sol +20 -8
- package/contracts/registry/RegistryService.sol +50 -85
- package/contracts/registry/ReleaseManager.sol +19 -40
- package/contracts/registry/TokenRegistry.sol +4 -3
- package/contracts/shared/ERC165.sol +12 -11
- package/contracts/shared/INftOwnable.sol +12 -6
- package/contracts/shared/IPolicyHolder.sol +26 -0
- package/contracts/shared/IRegisterable.sol +4 -4
- package/contracts/shared/IRegistryLinked.sol +15 -0
- package/contracts/shared/IVersionable.sol +2 -2
- package/contracts/shared/NftOwnable.sol +113 -59
- package/contracts/shared/PolicyHolder.sol +81 -0
- package/contracts/shared/ProxyManager.sol +5 -4
- package/contracts/shared/Registerable.sol +15 -24
- package/contracts/shared/RegistryLinked.sol +64 -0
- package/contracts/shared/Service.sol +5 -5
- package/contracts/shared/Versionable.sol +3 -2
- package/contracts/test/TestRegisterable.sol +1 -1
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/DistributorType.sol +2 -2
- package/contracts/types/ObjectType.sol +6 -2
- package/package.json +3 -3
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +0 -4
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.json +0 -100
- package/contracts/instance/base/IInstanceBase.sol +0 -21
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
pragma solidity ^0.8.20;
|
|
3
3
|
|
|
4
|
-
import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";
|
|
5
4
|
import {ShortString, ShortStrings} from "@openzeppelin/contracts/utils/ShortStrings.sol";
|
|
6
5
|
|
|
7
6
|
import {RoleId} from "../../types/RoleId.sol";
|
|
@@ -34,15 +33,15 @@ interface IAccess {
|
|
|
34
33
|
error ErrorIAccessRoleNameNotUnique(RoleId roleId, ShortString name);
|
|
35
34
|
error ErrorIAccessRoleInvalidUpdate(RoleId roleId, bool isCustom);
|
|
36
35
|
error ErrorIAccessRoleIsCustomIsImmutable(RoleId roleId, bool isCustom, bool isCustomExisting);
|
|
37
|
-
error ErrorIAccessSetLockedForNonexstentRole(RoleId roleId);
|
|
38
36
|
error ErrorIAccessGrantNonexstentRole(RoleId roleId);
|
|
39
37
|
error ErrorIAccessRevokeNonexstentRole(RoleId roleId);
|
|
40
38
|
error ErrorIAccessRenounceNonexstentRole(RoleId roleId);
|
|
41
39
|
|
|
42
40
|
error ErrorIAccessTargetAddressZero();
|
|
43
|
-
error
|
|
41
|
+
error ErrorIAccessTargetDoesNotExist(ShortString name);
|
|
42
|
+
error ErrorIAccessTargetAddressDoesNotExist(address target);
|
|
43
|
+
error ErrorIAccessTargetExists(address target, ShortString name);
|
|
44
44
|
error ErrorIAccessTargetNameEmpty(address target);
|
|
45
45
|
error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
|
|
46
|
-
error ErrorIAccessSetLockedForNonexstentTarget(address target);
|
|
47
46
|
error ErrorIAccessTargetLocked(address target);
|
|
48
47
|
}
|
|
@@ -28,19 +28,20 @@ interface ISetup {
|
|
|
28
28
|
NftId productNftId;
|
|
29
29
|
TokenHandler tokenHandler;
|
|
30
30
|
Fee distributionFee; // default distribution fee (no referral id)
|
|
31
|
-
bool isIntercepting; // intercepts nft transfers (for distributors)
|
|
32
31
|
address wallet;
|
|
33
32
|
}
|
|
34
33
|
|
|
35
34
|
struct PoolSetupInfo {
|
|
36
35
|
NftId productNftId;
|
|
37
36
|
TokenHandler tokenHandler;
|
|
38
|
-
|
|
37
|
+
bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
|
|
38
|
+
bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
|
|
39
|
+
bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
|
|
40
|
+
UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
|
|
41
|
+
UFixed retentionLevel; // amount of collateral held in pool (default 100%)
|
|
39
42
|
Fee poolFee; // pool fee on net premium
|
|
40
43
|
Fee stakingFee; // pool fee on staked capital from investor
|
|
41
44
|
Fee performanceFee; // pool fee on profits from capital investors
|
|
42
|
-
bool isIntercepting; // intercepts nft transfers (for bundles)
|
|
43
|
-
bool isConfirmingApplication; // confirms applications before they are underwritten
|
|
44
45
|
address wallet;
|
|
45
46
|
}
|
|
46
47
|
}
|
|
@@ -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, 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
|
+
|
|
52
|
+
function initialize(
|
|
53
|
+
address owner,
|
|
54
|
+
bytes memory data
|
|
55
|
+
)
|
|
56
|
+
public
|
|
57
|
+
virtual
|
|
58
|
+
initializer()
|
|
59
|
+
{
|
|
60
|
+
// TODO check this, might no longer be the way, refactor if necessary
|
|
61
|
+
address registryAddress;
|
|
62
|
+
address initialOwner;
|
|
63
|
+
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
|
64
|
+
|
|
65
|
+
initializeService(registryAddress, owner);
|
|
66
|
+
registerInterface(type(IApplicationService).interfaceId);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
function create(
|
|
71
|
+
address applicationOwner,
|
|
72
|
+
RiskId riskId,
|
|
73
|
+
NftId bundleNftId,
|
|
74
|
+
ReferralId referralId,
|
|
75
|
+
uint256 sumInsuredAmount,
|
|
76
|
+
uint256 lifetime,
|
|
77
|
+
bytes memory applicationData
|
|
78
|
+
)
|
|
79
|
+
external
|
|
80
|
+
virtual override
|
|
81
|
+
returns (NftId applicationNftId)
|
|
82
|
+
{
|
|
83
|
+
(IRegistry.ObjectInfo memory productInfo, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
|
84
|
+
// TODO: add validations (see create bundle in pool service)
|
|
85
|
+
|
|
86
|
+
applicationNftId = getRegistryService().registerPolicy(
|
|
87
|
+
IRegistry.ObjectInfo(
|
|
88
|
+
zeroNftId(),
|
|
89
|
+
productInfo.nftId,
|
|
90
|
+
POLICY(),
|
|
91
|
+
false, // intercepting property for policies is defined on product
|
|
92
|
+
address(0),
|
|
93
|
+
applicationOwner,
|
|
94
|
+
""
|
|
95
|
+
)
|
|
96
|
+
);
|
|
97
|
+
|
|
98
|
+
(uint256 premiumAmount,,,,) = calculatePremium(
|
|
99
|
+
riskId,
|
|
100
|
+
sumInsuredAmount,
|
|
101
|
+
lifetime,
|
|
102
|
+
applicationData,
|
|
103
|
+
bundleNftId,
|
|
104
|
+
referralId
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
|
|
108
|
+
productInfo.nftId,
|
|
109
|
+
bundleNftId,
|
|
110
|
+
referralId,
|
|
111
|
+
riskId,
|
|
112
|
+
sumInsuredAmount,
|
|
113
|
+
premiumAmount,
|
|
114
|
+
0,
|
|
115
|
+
lifetime,
|
|
116
|
+
applicationData,
|
|
117
|
+
"",
|
|
118
|
+
0,
|
|
119
|
+
0,
|
|
120
|
+
0,
|
|
121
|
+
zeroTimestamp(),
|
|
122
|
+
zeroTimestamp(),
|
|
123
|
+
zeroTimestamp()
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
instance.createPolicy(applicationNftId, policyInfo);
|
|
127
|
+
instance.updatePolicyState(applicationNftId, APPLIED());
|
|
128
|
+
|
|
129
|
+
// TODO: add logging
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
function renew(
|
|
134
|
+
NftId policyNftId, // policy to be renewd (renewal inherits policy attributes)
|
|
135
|
+
NftId bundleNftId // will likely need a newer bundle for underwriting
|
|
136
|
+
)
|
|
137
|
+
external
|
|
138
|
+
virtual override
|
|
139
|
+
returns (NftId applicationNftId)
|
|
140
|
+
{
|
|
141
|
+
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
function ajust(
|
|
146
|
+
NftId applicationNftId,
|
|
147
|
+
RiskId riskId,
|
|
148
|
+
NftId bundleNftId,
|
|
149
|
+
ReferralId referralId,
|
|
150
|
+
uint256 sumInsuredAmount,
|
|
151
|
+
uint256 lifetime,
|
|
152
|
+
bytes memory applicationData
|
|
153
|
+
)
|
|
154
|
+
external
|
|
155
|
+
virtual override
|
|
156
|
+
{
|
|
157
|
+
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
function revoke(NftId policyNftId)
|
|
161
|
+
external
|
|
162
|
+
virtual override
|
|
163
|
+
{
|
|
164
|
+
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
function calculatePremium(
|
|
169
|
+
RiskId riskId,
|
|
170
|
+
uint256 sumInsuredAmount,
|
|
171
|
+
uint256 lifetime,
|
|
172
|
+
bytes memory applicationData,
|
|
173
|
+
NftId bundleNftId,
|
|
174
|
+
ReferralId referralId
|
|
175
|
+
)
|
|
176
|
+
public
|
|
177
|
+
view
|
|
178
|
+
virtual override
|
|
179
|
+
returns (
|
|
180
|
+
uint256 premiumAmount,
|
|
181
|
+
uint256 distributionFeeAmount,
|
|
182
|
+
uint256 productFeeAmount,
|
|
183
|
+
uint256 poolFeeAmount,
|
|
184
|
+
uint256 bundleFeeAmount
|
|
185
|
+
)
|
|
186
|
+
{
|
|
187
|
+
Product product = _getAndVerifyInstanceAndProduct();
|
|
188
|
+
uint256 netPremiumAmount = product.calculateNetPremium(
|
|
189
|
+
sumInsuredAmount,
|
|
190
|
+
riskId,
|
|
191
|
+
lifetime,
|
|
192
|
+
applicationData
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
(
|
|
196
|
+
productFeeAmount,
|
|
197
|
+
poolFeeAmount,
|
|
198
|
+
bundleFeeAmount,
|
|
199
|
+
distributionFeeAmount
|
|
200
|
+
) = _calculateFeeAmounts(
|
|
201
|
+
netPremiumAmount,
|
|
202
|
+
product,
|
|
203
|
+
bundleNftId,
|
|
204
|
+
referralId
|
|
205
|
+
);
|
|
206
|
+
|
|
207
|
+
premiumAmount = netPremiumAmount + productFeeAmount;
|
|
208
|
+
premiumAmount += poolFeeAmount + bundleFeeAmount;
|
|
209
|
+
premiumAmount += distributionFeeAmount;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
function getDomain() public pure override(IService, Service) returns(ObjectType) {
|
|
214
|
+
return APPLICATION();
|
|
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
|
+
}
|
|
@@ -55,9 +55,8 @@ contract BundleService is
|
|
|
55
55
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
|
56
56
|
// TODO while PoolService is not deployed in PoolServiceManager constructor
|
|
57
57
|
// owner is PoolServiceManager deployer
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
_registerInterface(type(IBundleService).interfaceId);
|
|
58
|
+
initializeService(registryAddress, owner);
|
|
59
|
+
registerInterface(type(IBundleService).interfaceId);
|
|
61
60
|
}
|
|
62
61
|
|
|
63
62
|
function getDomain() public pure override(Service, IService) returns(ObjectType) {
|
|
@@ -164,17 +163,23 @@ contract BundleService is
|
|
|
164
163
|
bundleManager.unlock(bundleNftId);
|
|
165
164
|
}
|
|
166
165
|
|
|
167
|
-
function
|
|
166
|
+
function lockCollateral(
|
|
167
|
+
IInstance instance,
|
|
168
168
|
NftId policyNftId,
|
|
169
169
|
NftId bundleNftId,
|
|
170
170
|
uint256 collateralAmount,
|
|
171
171
|
uint256 netPremiumAmount
|
|
172
172
|
)
|
|
173
173
|
external
|
|
174
|
-
onlyService
|
|
174
|
+
onlyService
|
|
175
|
+
returns (
|
|
176
|
+
IBundle.BundleInfo memory bundleInfo
|
|
177
|
+
)
|
|
175
178
|
{
|
|
176
179
|
InstanceReader instanceReader = instance.getInstanceReader();
|
|
177
|
-
|
|
180
|
+
bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
|
181
|
+
|
|
182
|
+
// TODO add validation
|
|
178
183
|
|
|
179
184
|
// lock collateral
|
|
180
185
|
bundleInfo.lockedAmount += collateralAmount;
|
|
@@ -7,11 +7,11 @@ import {InstanceAccessManager} from "../InstanceAccessManager.sol";
|
|
|
7
7
|
import {InstanceReader} from "../../instance/InstanceReader.sol";
|
|
8
8
|
import {ISetup} from "../../instance/module/ISetup.sol";
|
|
9
9
|
|
|
10
|
-
import {NftId, NftIdLib} from "../../types/NftId.sol";
|
|
10
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
|
11
11
|
import {Fee} from "../../types/Fee.sol";
|
|
12
12
|
import {DISTRIBUTION_OWNER_ROLE} from "../../types/RoleId.sol";
|
|
13
13
|
import {KEEP_STATE} from "../../types/StateId.sol";
|
|
14
|
-
import {ObjectType, DISTRIBUTION} from "../../types/ObjectType.sol";
|
|
14
|
+
import {ObjectType, DISTRIBUTION, INSTANCE, DISTRIBUTION, DISTRIBUTOR} from "../../types/ObjectType.sol";
|
|
15
15
|
import {Version, VersionLib} from "../../types/Version.sol";
|
|
16
16
|
|
|
17
17
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
|
@@ -21,8 +21,16 @@ import {IService} from "../../shared/IService.sol";
|
|
|
21
21
|
import {Service} from "../../shared/Service.sol";
|
|
22
22
|
import {ComponentService} from "../base/ComponentService.sol";
|
|
23
23
|
import {InstanceService} from "../InstanceService.sol";
|
|
24
|
-
import {IDistributionService} from "./IDistributionService.sol";
|
|
25
24
|
import {IComponent} from "../../components/IComponent.sol";
|
|
25
|
+
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
|
26
|
+
import {IDistributionService} from "./IDistributionService.sol";
|
|
27
|
+
|
|
28
|
+
import {UFixed} from "../../types/UFixed.sol";
|
|
29
|
+
import {DistributorType, DistributorTypeLib} from "../../types/DistributorType.sol";
|
|
30
|
+
import {ReferralId, ReferralStatus, ReferralLib} from "../../types/Referral.sol";
|
|
31
|
+
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
|
32
|
+
import {Key32} from "../../types/Key32.sol";
|
|
33
|
+
import {IDistribution} from "../module/IDistribution.sol";
|
|
26
34
|
|
|
27
35
|
|
|
28
36
|
contract DistributionService is
|
|
@@ -46,9 +54,8 @@ contract DistributionService is
|
|
|
46
54
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
|
47
55
|
// TODO while DistributionService is not deployed in DistributionServiceManager constructor
|
|
48
56
|
// owner is DistributionServiceManager deployer
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
_registerInterface(type(IDistributionService).interfaceId);
|
|
57
|
+
initializeService(registryAddress, owner);
|
|
58
|
+
registerInterface(type(IDistributionService).interfaceId);
|
|
52
59
|
}
|
|
53
60
|
|
|
54
61
|
function getDomain() public pure override(Service, IService) returns(ObjectType) {
|
|
@@ -60,7 +67,7 @@ contract DistributionService is
|
|
|
60
67
|
returns(NftId distributionNftId)
|
|
61
68
|
{
|
|
62
69
|
(
|
|
63
|
-
IComponent
|
|
70
|
+
IComponent component,
|
|
64
71
|
address owner,
|
|
65
72
|
IInstance instance,
|
|
66
73
|
NftId instanceNftId
|
|
@@ -69,32 +76,14 @@ contract DistributionService is
|
|
|
69
76
|
DISTRIBUTION(),
|
|
70
77
|
DISTRIBUTION_OWNER_ROLE());
|
|
71
78
|
|
|
72
|
-
(
|
|
73
|
-
|
|
74
|
-
bytes memory data
|
|
75
|
-
) = getRegistryService().registerDistribution(distribution, owner);
|
|
79
|
+
IRegistry.ObjectInfo memory distributionInfo = getRegistryService().registerDistribution(component, owner);
|
|
80
|
+
IDistributionComponent distribution = IDistributionComponent(distributionAddress);
|
|
76
81
|
distribution.linkToRegisteredNftId();
|
|
77
82
|
distributionNftId = distributionInfo.nftId;
|
|
78
83
|
|
|
79
|
-
(
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
) = _decodeAndVerifyDistributionData(data);
|
|
83
|
-
instance.createDistributionSetup(distributionNftId, initialSetup);
|
|
84
|
-
|
|
85
|
-
getInstanceService().createTarget(instanceNftId, distributionAddress, name);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
function _decodeAndVerifyDistributionData(bytes memory data)
|
|
89
|
-
internal
|
|
90
|
-
returns(string memory name, ISetup.DistributionSetupInfo memory setup)
|
|
91
|
-
{
|
|
92
|
-
(name, setup) = abi.decode(
|
|
93
|
-
data,
|
|
94
|
-
(string, ISetup.DistributionSetupInfo)
|
|
95
|
-
);
|
|
96
|
-
|
|
97
|
-
// TODO add checks if applicable
|
|
84
|
+
instance.createDistributionSetup(distributionNftId, distribution.getSetupInfo());
|
|
85
|
+
getInstanceService().createGifTarget(instanceNftId, distributionAddress, distribution.getName());
|
|
86
|
+
getInstanceService().grantDistributionDefaultPermissions(instanceNftId, distributionAddress, distribution.getName());
|
|
98
87
|
}
|
|
99
88
|
|
|
100
89
|
function setFees(
|
|
@@ -112,4 +101,182 @@ contract DistributionService is
|
|
|
112
101
|
|
|
113
102
|
instance.updateDistributionSetup(distributionNftId, distSetupInfo, KEEP_STATE());
|
|
114
103
|
}
|
|
104
|
+
|
|
105
|
+
function createDistributorType(
|
|
106
|
+
string memory name,
|
|
107
|
+
UFixed minDiscountPercentage,
|
|
108
|
+
UFixed maxDiscountPercentage,
|
|
109
|
+
UFixed commissionPercentage,
|
|
110
|
+
uint32 maxReferralCount,
|
|
111
|
+
uint32 maxReferralLifetime,
|
|
112
|
+
bool allowSelfReferrals,
|
|
113
|
+
bool allowRenewals,
|
|
114
|
+
bytes memory data
|
|
115
|
+
)
|
|
116
|
+
external
|
|
117
|
+
returns (DistributorType distributorType)
|
|
118
|
+
{
|
|
119
|
+
(,NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
|
120
|
+
distributorType = DistributorTypeLib.toDistributorType(distributionNftId, name);
|
|
121
|
+
Key32 key32 = distributorType.toKey32();
|
|
122
|
+
|
|
123
|
+
if(!instance.exists(key32)) {
|
|
124
|
+
IDistribution.DistributorTypeInfo memory info = IDistribution.DistributorTypeInfo(
|
|
125
|
+
name,
|
|
126
|
+
minDiscountPercentage,
|
|
127
|
+
maxDiscountPercentage,
|
|
128
|
+
commissionPercentage,
|
|
129
|
+
maxReferralCount,
|
|
130
|
+
maxReferralLifetime,
|
|
131
|
+
allowSelfReferrals,
|
|
132
|
+
allowRenewals,
|
|
133
|
+
data);
|
|
134
|
+
|
|
135
|
+
instance.createDistributorType(key32, info);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function createDistributor(
|
|
140
|
+
address distributor,
|
|
141
|
+
DistributorType distributorType,
|
|
142
|
+
bytes memory data
|
|
143
|
+
) external returns (NftId distributorNftId)
|
|
144
|
+
{
|
|
145
|
+
(, NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
|
146
|
+
|
|
147
|
+
distributorNftId = getRegistryService().registerDistributor(
|
|
148
|
+
IRegistry.ObjectInfo(
|
|
149
|
+
zeroNftId(),
|
|
150
|
+
distributionNftId,
|
|
151
|
+
DISTRIBUTOR(),
|
|
152
|
+
true, // intercepting property for bundles is defined on pool
|
|
153
|
+
address(0),
|
|
154
|
+
distributor,
|
|
155
|
+
""
|
|
156
|
+
));
|
|
157
|
+
|
|
158
|
+
IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
|
|
159
|
+
distributorType,
|
|
160
|
+
true, // active
|
|
161
|
+
data);
|
|
162
|
+
|
|
163
|
+
instance.createDistributor(distributorNftId, info);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
function updateDistributorType(
|
|
167
|
+
NftId distributorNftId,
|
|
168
|
+
DistributorType distributorType,
|
|
169
|
+
bytes memory data
|
|
170
|
+
) external virtual
|
|
171
|
+
{
|
|
172
|
+
(,, IInstance instance) = _getAndVerifyCallingDistribution();
|
|
173
|
+
|
|
174
|
+
IDistribution.DistributorInfo memory info = IDistribution.DistributorInfo(
|
|
175
|
+
distributorType,
|
|
176
|
+
true, // active
|
|
177
|
+
data);
|
|
178
|
+
|
|
179
|
+
instance.updateDistributor(distributorNftId, info, KEEP_STATE());
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
function createReferral(
|
|
184
|
+
NftId distributorNftId,
|
|
185
|
+
string memory code,
|
|
186
|
+
UFixed discountPercentage,
|
|
187
|
+
uint32 maxReferrals,
|
|
188
|
+
Timestamp expiryAt,
|
|
189
|
+
bytes memory data
|
|
190
|
+
)
|
|
191
|
+
external
|
|
192
|
+
virtual
|
|
193
|
+
returns (ReferralId referralId)
|
|
194
|
+
{
|
|
195
|
+
(,NftId distributionNftId, IInstance instance) = _getAndVerifyCallingDistribution();
|
|
196
|
+
require(bytes(code).length > 0, "ERROR:DSV-030:CODE_INVALID");
|
|
197
|
+
require(expiryAt > zeroTimestamp(), "ERROR:DSV-031:EXPIRY_AT_ZERO");
|
|
198
|
+
|
|
199
|
+
// FIXME: validate input against distributortype (get via nft)
|
|
200
|
+
|
|
201
|
+
referralId = ReferralLib.toReferralId(distributionNftId, code);
|
|
202
|
+
IDistribution.ReferralInfo memory info = IDistribution.ReferralInfo(
|
|
203
|
+
distributorNftId,
|
|
204
|
+
code,
|
|
205
|
+
discountPercentage,
|
|
206
|
+
maxReferrals,
|
|
207
|
+
0, // used referrals
|
|
208
|
+
expiryAt,
|
|
209
|
+
data
|
|
210
|
+
);
|
|
211
|
+
|
|
212
|
+
instance.createReferral(referralId.toKey32(), info);
|
|
213
|
+
return referralId;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
function processSale(
|
|
217
|
+
ReferralId referralId,
|
|
218
|
+
uint256 premiumAmount
|
|
219
|
+
)
|
|
220
|
+
external
|
|
221
|
+
virtual
|
|
222
|
+
{
|
|
223
|
+
// TODO: fetch referral
|
|
224
|
+
// TODO: if referral is active, process sale with condiutions of this referral
|
|
225
|
+
// TODO: if referral is not active, process sale with conditions of distribution component
|
|
226
|
+
revert("NOT_IMPLEMENTED_YET");
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
function calculateFeeAmount(
|
|
230
|
+
ReferralId referralId,
|
|
231
|
+
uint256 premiumAmount
|
|
232
|
+
)
|
|
233
|
+
external
|
|
234
|
+
virtual
|
|
235
|
+
view
|
|
236
|
+
returns (uint256 feeAmount)
|
|
237
|
+
{
|
|
238
|
+
revert("NOT_IMPLEMENTED_YET");
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
function _getAndVerifyCallingDistribution()
|
|
242
|
+
internal
|
|
243
|
+
view
|
|
244
|
+
returns(
|
|
245
|
+
address distributionAddress,
|
|
246
|
+
NftId distributionNftId,
|
|
247
|
+
IInstance instance
|
|
248
|
+
)
|
|
249
|
+
{
|
|
250
|
+
ObjectType objectType;
|
|
251
|
+
(
|
|
252
|
+
distributionAddress,
|
|
253
|
+
distributionNftId,
|
|
254
|
+
objectType,
|
|
255
|
+
instance
|
|
256
|
+
) = _getAndVerifyCaller();
|
|
257
|
+
|
|
258
|
+
require(objectType == DISTRIBUTION(), "ERROR:PRS-031:CALLER_NOT_DISTRUBUTION");
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function _getAndVerifyCaller()
|
|
262
|
+
internal
|
|
263
|
+
view
|
|
264
|
+
returns(
|
|
265
|
+
address objectAddress,
|
|
266
|
+
NftId objectNftId,
|
|
267
|
+
ObjectType objectType,
|
|
268
|
+
IInstance instance
|
|
269
|
+
)
|
|
270
|
+
{
|
|
271
|
+
objectAddress = msg.sender;
|
|
272
|
+
objectNftId = getRegistry().getNftId(objectAddress);
|
|
273
|
+
require(objectNftId.gtz(), "ERROR:SRV-030:CALLER_UNKNOWN");
|
|
274
|
+
IRegistry.ObjectInfo memory info = getRegistry().getObjectInfo(objectNftId);
|
|
275
|
+
objectType = info.objectType;
|
|
276
|
+
|
|
277
|
+
IRegistry.ObjectInfo memory parentInfo = getRegistry().getObjectInfo(info.parentNftId);
|
|
278
|
+
require(parentInfo.objectType == INSTANCE(), "ERROR:SRV-031:PARENT_NOT_INSTANCE");
|
|
279
|
+
instance = IInstance(parentInfo.objectAddress);
|
|
280
|
+
}
|
|
281
|
+
|
|
115
282
|
}
|