@etherisc/gif-next 0.0.2-e922e07-736 → 0.0.2-e94f4c7-084
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 +6 -83
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +68 -0
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +84 -0
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +158 -0
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +158 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +184 -149
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +158 -0
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +114 -189
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +68 -0
- 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 +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +457 -268
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +175 -51
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +426 -476
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +472 -126
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +217 -169
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +304 -210
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +71 -23
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +85 -30
- 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 +40 -10
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +56 -73
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- 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 +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +175 -83
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +29 -13
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +426 -233
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +78 -14
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +372 -86
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +55 -7
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +189 -139
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +48 -56
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +111 -40
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +246 -170
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +251 -58
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +101 -24
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +470 -41
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +627 -14
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +80 -14
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +607 -85
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +71 -19
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +777 -55
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +72 -12
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +114 -51
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +16 -12
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +19 -0
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -24
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +31 -12
- 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 +17 -36
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +7 -7
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- 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/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +80 -14
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +2 -2
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +2 -2
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +2 -2
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +2 -2
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +86 -15
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +2 -2
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +101 -26
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +2 -2
- 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/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +209 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +83 -4
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
- 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 +17 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +116 -7
- 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/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +17 -4
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
- package/contracts/components/Component.sol +42 -10
- package/contracts/components/Distribution.sol +6 -2
- package/contracts/components/IComponent.sol +9 -1
- package/contracts/components/IPoolComponent.sol +6 -44
- package/contracts/components/Pool.sol +50 -126
- package/contracts/components/Product.sol +141 -59
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +9 -8
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +37 -27
- package/contracts/instance/IInstanceService.sol +18 -9
- package/contracts/instance/Instance.sol +117 -98
- package/contracts/instance/InstanceAccessManager.sol +388 -158
- package/contracts/instance/InstanceReader.sol +36 -12
- package/contracts/instance/InstanceService.sol +193 -204
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +17 -30
- package/contracts/instance/base/KeyValueStore.sol +13 -5
- package/contracts/instance/base/Lifecycle.sol +23 -6
- package/contracts/instance/module/IAccess.sol +21 -14
- package/contracts/instance/module/IBundle.sol +6 -4
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IPolicy.sol +11 -6
- package/contracts/instance/module/ISetup.sol +3 -16
- package/contracts/instance/service/ApplicationService.sol +25 -19
- package/contracts/instance/service/BundleService.sol +224 -80
- package/contracts/instance/service/ClaimService.sol +114 -26
- package/contracts/instance/service/DistributionService.sol +58 -77
- package/contracts/instance/service/IApplicationService.sol +3 -7
- package/contracts/instance/service/IBundleService.sol +72 -25
- package/contracts/instance/service/IClaimService.sol +46 -15
- package/contracts/instance/service/IDistributionService.sol +1 -0
- package/contracts/instance/service/IPolicyService.sol +72 -5
- package/contracts/instance/service/IPoolService.sol +85 -3
- package/contracts/instance/service/PolicyService.sol +320 -143
- package/contracts/instance/service/PoolService.sol +245 -18
- package/contracts/instance/service/ProductService.sol +31 -54
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +2 -0
- package/contracts/registry/IRegistryService.sol +4 -3
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +23 -20
- package/contracts/registry/RegistryService.sol +10 -11
- package/contracts/registry/ReleaseManager.sol +20 -18
- package/contracts/shared/IService.sol +4 -6
- package/contracts/shared/Service.sol +21 -7
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +70 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +25 -2
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +6 -5
- package/contracts/types/PayoutId.sol +33 -5
- package/contracts/types/RoleId.sol +6 -4
- package/contracts/types/StateId.sol +7 -2
- package/contracts/types/Timestamp.sol +6 -0
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- package/package.json +1 -1
@@ -24,18 +24,16 @@ contract ObjectManager is
|
|
24
24
|
IInstance internal _instance; // store instance address -> more flexible, instance may not be registered during ObjectManager initialization
|
25
25
|
|
26
26
|
/// @dev call to initialize MUST be made in the same transaction as cloning of the contract
|
27
|
-
function initialize(
|
28
|
-
|
29
|
-
address registry,
|
30
|
-
address instance
|
31
|
-
)
|
27
|
+
function initialize(address instanceAddress)
|
28
|
+
initializer
|
32
29
|
external
|
33
30
|
{
|
34
|
-
|
31
|
+
IInstance instance = IInstance(instanceAddress);
|
32
|
+
initialize(instance.authority(), instance.getRegistryAddress());
|
35
33
|
|
36
|
-
_instance =
|
34
|
+
_instance = instance;
|
37
35
|
|
38
|
-
emit LogObjectManagerInitialized(
|
36
|
+
emit LogObjectManagerInitialized(instanceAddress);
|
39
37
|
}
|
40
38
|
|
41
39
|
function getInstance() external view returns (IInstance) {
|
@@ -16,7 +16,6 @@ import {InstanceAccessManager} from "../InstanceAccessManager.sol";
|
|
16
16
|
|
17
17
|
abstract contract ComponentService is Service {
|
18
18
|
|
19
|
-
error ErrorComponentServiceAlreadyRegistered(address component, NftId nftId);
|
20
19
|
error ErrorComponentServiceNotComponent(address component);
|
21
20
|
error ErrorComponentServiceInvalidType(address component, ObjectType requiredType, ObjectType componentType);
|
22
21
|
error ErrorComponentServiceSenderNotOwner(address component, address initialOwner, address sender);
|
@@ -33,13 +32,15 @@ abstract contract ComponentService is Service {
|
|
33
32
|
// view functions
|
34
33
|
|
35
34
|
function getRegistryService() public view virtual returns (IRegistryService) {
|
36
|
-
|
37
|
-
return IRegistryService(service);
|
35
|
+
return IRegistryService(_getServiceAddress(REGISTRY()));
|
38
36
|
}
|
39
37
|
|
40
38
|
function getInstanceService() public view returns (InstanceService) {
|
41
|
-
|
42
|
-
|
39
|
+
return InstanceService(_getServiceAddress(INSTANCE()));
|
40
|
+
}
|
41
|
+
|
42
|
+
function _getServiceAddress(ObjectType domain) internal view returns (address) {
|
43
|
+
return getRegistry().getServiceAddress(domain, getVersion().toMajorPart());
|
43
44
|
}
|
44
45
|
|
45
46
|
// internal functions
|
@@ -60,12 +61,6 @@ abstract contract ComponentService is Service {
|
|
60
61
|
// component may only be registerd by initial owner of component
|
61
62
|
owner = msg.sender;
|
62
63
|
|
63
|
-
// check component has not already been registerd
|
64
|
-
NftId compoentNftId = getRegistry().getNftId(componentAddress);
|
65
|
-
if(compoentNftId.gtz()) {
|
66
|
-
revert ErrorComponentServiceAlreadyRegistered(componentAddress, compoentNftId);
|
67
|
-
}
|
68
|
-
|
69
64
|
// check this is a component
|
70
65
|
component = IComponent(componentAddress);
|
71
66
|
if(!component.supportsInterface(type(IComponent).interfaceId)) {
|
@@ -87,48 +82,40 @@ abstract contract ComponentService is Service {
|
|
87
82
|
// check instance has assigned required role to owner
|
88
83
|
instanceNftId = componentInfo.parentNftId;
|
89
84
|
instance = _getInstance(instanceNftId);
|
90
|
-
|
91
|
-
owner,
|
92
|
-
requiredRole,
|
93
|
-
address(instance));
|
94
|
-
|
95
|
-
if(!hasRole) {
|
85
|
+
if(!instance.getInstanceAccessManager().hasRole(requiredRole, owner)) {
|
96
86
|
revert ErrorComponentServiceExpectedRoleMissing(instanceNftId, requiredRole, owner);
|
97
87
|
}
|
98
88
|
}
|
99
89
|
|
100
90
|
// internal view functions
|
101
91
|
|
102
|
-
function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
|
103
|
-
IRegistry.ObjectInfo memory instanceInfo = getRegistry().getObjectInfo(instanceNftId);
|
104
|
-
return IInstance(instanceInfo.objectAddress);
|
105
|
-
}
|
106
|
-
|
107
92
|
function _getAndVerifyComponentInfoAndInstance(
|
108
|
-
//address component,
|
109
93
|
ObjectType expectedType
|
110
94
|
)
|
111
95
|
internal
|
112
96
|
view
|
113
97
|
returns(
|
98
|
+
NftId nftId,
|
114
99
|
IRegistry.ObjectInfo memory info,
|
115
100
|
IInstance instance
|
116
101
|
)
|
117
102
|
{
|
118
103
|
IRegistry registry = getRegistry();
|
119
|
-
//TODO redundant check -> just check type
|
120
|
-
//NftId componentNftId = registry.getNftId(component);
|
121
|
-
//require(componentNftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
|
122
104
|
|
123
105
|
info = registry.getObjectInfo(msg.sender);
|
124
106
|
require(info.objectType == expectedType, "OBJECT_TYPE_INVALID");
|
125
107
|
|
126
|
-
|
127
|
-
instance =
|
108
|
+
nftId = info.nftId;
|
109
|
+
instance = _getInstance(info.parentNftId);
|
128
110
|
|
129
|
-
|
130
|
-
if (accessManager.isTargetLocked(info.objectAddress)) {
|
111
|
+
if (instance.getInstanceAccessManager().isTargetLocked(info.objectAddress)) {
|
131
112
|
revert IAccess.ErrorIAccessTargetLocked(info.objectAddress);
|
132
113
|
}
|
133
114
|
}
|
115
|
+
|
116
|
+
function _getInstance(NftId instanceNftId) internal view returns (IInstance) {
|
117
|
+
return IInstance(
|
118
|
+
getRegistry().getObjectInfo(
|
119
|
+
instanceNftId).objectAddress);
|
120
|
+
}
|
134
121
|
}
|
@@ -5,7 +5,7 @@ import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blockn
|
|
5
5
|
import {Key32, KeyId, Key32Lib} from "../../types/Key32.sol";
|
6
6
|
import {NftId} from "../../types/NftId.sol";
|
7
7
|
import {ObjectType} from "../../types/ObjectType.sol";
|
8
|
-
import {StateId, ACTIVE} from "../../types/StateId.sol";
|
8
|
+
import {StateId, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
|
9
9
|
import {Timestamp, TimestampLib} from "../../types/Timestamp.sol";
|
10
10
|
|
11
11
|
import {Lifecycle} from "./Lifecycle.sol";
|
@@ -79,16 +79,21 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
|
|
79
79
|
// update data
|
80
80
|
_value[key32].data = data;
|
81
81
|
|
82
|
-
// update
|
82
|
+
// update state
|
83
|
+
if(state != KEEP_STATE()) {
|
84
|
+
metadata.state = state;
|
85
|
+
}
|
86
|
+
|
87
|
+
// update reest of metadata
|
83
88
|
address updatedBy = msg.sender;
|
84
89
|
Blocknumber lastUpdatedIn = metadata.updatedIn;
|
85
|
-
|
90
|
+
|
86
91
|
metadata.updatedBy = updatedBy;
|
87
92
|
metadata.updatedIn = blockBlocknumber();
|
88
93
|
|
89
94
|
// create log entries
|
90
95
|
// solhint-disable avoid-tx-origin
|
91
|
-
emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(),
|
96
|
+
emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), stateOld, state, updatedBy, tx.origin, lastUpdatedIn);
|
92
97
|
emit LogInfoUpdated(key32.toObjectType(), key32.toKeyId(), state, updatedBy, tx.origin, lastUpdatedIn);
|
93
98
|
// solhing-enable
|
94
99
|
}
|
@@ -134,6 +139,9 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
|
|
134
139
|
StateId stateOld = metadata.state;
|
135
140
|
require(stateOld.gtz(), "ERROR:KVS-041:NOT_EXISTING");
|
136
141
|
|
142
|
+
// ensure state transistion is valid
|
143
|
+
checkTransition(metadata.objectType, stateOld, state);
|
144
|
+
|
137
145
|
// update metadata (and state)
|
138
146
|
address updatedBy = msg.sender;
|
139
147
|
Blocknumber lastUpdatedIn = metadata.updatedIn;
|
@@ -143,7 +151,7 @@ contract KeyValueStore is Lifecycle, IKeyValueStore {
|
|
143
151
|
|
144
152
|
// create log entry
|
145
153
|
// solhint-disable-next-line avoid-tx-origin
|
146
|
-
emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(),
|
154
|
+
emit LogStateUpdated(key32.toObjectType(), key32.toKeyId(), stateOld, state, updatedBy, tx.origin, lastUpdatedIn);
|
147
155
|
}
|
148
156
|
|
149
157
|
function exists(Key32 key32) public view returns (bool) {
|
@@ -1,22 +1,31 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
+
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
5
|
+
|
4
6
|
import {NftId} from "../../types/NftId.sol";
|
5
|
-
import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK} from "../../types/ObjectType.sol";
|
6
|
-
import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED,
|
7
|
+
import {ObjectType, COMPONENT, BUNDLE, POLICY, RISK, CLAIM} from "../../types/ObjectType.sol";
|
8
|
+
import {StateId, ACTIVE, PAUSED, ARCHIVED, CLOSED, APPLIED, COLLATERALIZED, REVOKED, SUBMITTED, CONFIRMED, DECLINED} from "../../types/StateId.sol";
|
7
9
|
import {ILifecycle} from "./ILifecycle.sol";
|
8
10
|
|
9
|
-
contract Lifecycle is
|
11
|
+
contract Lifecycle is
|
12
|
+
Initializable,
|
13
|
+
ILifecycle
|
14
|
+
{
|
10
15
|
mapping(ObjectType objectType => StateId initialState)
|
11
16
|
private _initialState;
|
12
17
|
|
13
18
|
mapping(ObjectType objectType => mapping(StateId stateFrom => mapping(StateId stateTo => bool isValid)))
|
14
19
|
private _isValidTransition;
|
15
20
|
|
16
|
-
|
21
|
+
function initializeLifecycle()
|
22
|
+
public
|
23
|
+
onlyInitializing
|
24
|
+
{
|
17
25
|
_setupBundleLifecycle();
|
18
26
|
_setupComponentLifecycle();
|
19
27
|
_setupPolicyLifecycle();
|
28
|
+
_setupClaimLifecycle();
|
20
29
|
_setupRiskLifecycle();
|
21
30
|
}
|
22
31
|
|
@@ -78,6 +87,7 @@ contract Lifecycle is ILifecycle {
|
|
78
87
|
function _setupBundleLifecycle() internal {
|
79
88
|
_initialState[BUNDLE()] = ACTIVE();
|
80
89
|
_isValidTransition[BUNDLE()][ACTIVE()][PAUSED()] = true;
|
90
|
+
_isValidTransition[BUNDLE()][ACTIVE()][CLOSED()] = true;
|
81
91
|
_isValidTransition[BUNDLE()][PAUSED()][ACTIVE()] = true;
|
82
92
|
_isValidTransition[BUNDLE()][PAUSED()][CLOSED()] = true;
|
83
93
|
}
|
@@ -86,11 +96,18 @@ contract Lifecycle is ILifecycle {
|
|
86
96
|
_initialState[POLICY()] = APPLIED();
|
87
97
|
_isValidTransition[POLICY()][APPLIED()][REVOKED()] = true;
|
88
98
|
_isValidTransition[POLICY()][APPLIED()][DECLINED()] = true;
|
89
|
-
_isValidTransition[POLICY()][APPLIED()][
|
90
|
-
_isValidTransition[POLICY()][
|
99
|
+
_isValidTransition[POLICY()][APPLIED()][COLLATERALIZED()] = true;
|
100
|
+
_isValidTransition[POLICY()][COLLATERALIZED()][ACTIVE()] = true;
|
91
101
|
_isValidTransition[POLICY()][ACTIVE()][CLOSED()] = true;
|
92
102
|
}
|
93
103
|
|
104
|
+
function _setupClaimLifecycle() internal {
|
105
|
+
_initialState[CLAIM()] = SUBMITTED();
|
106
|
+
_isValidTransition[CLAIM()][SUBMITTED()][CONFIRMED()] = true;
|
107
|
+
_isValidTransition[CLAIM()][SUBMITTED()][DECLINED()] = true;
|
108
|
+
_isValidTransition[CLAIM()][CONFIRMED()][CLOSED()] = true;
|
109
|
+
}
|
110
|
+
|
94
111
|
function _setupRiskLifecycle() internal {
|
95
112
|
_initialState[RISK()] = ACTIVE();
|
96
113
|
_isValidTransition[RISK()][ACTIVE()][PAUSED()] = true;
|
@@ -8,40 +8,47 @@ import {Timestamp} from "../../types/Timestamp.sol";
|
|
8
8
|
|
9
9
|
interface IAccess {
|
10
10
|
|
11
|
+
enum Type {
|
12
|
+
NotInitialized,
|
13
|
+
Core,
|
14
|
+
Gif,
|
15
|
+
Custom
|
16
|
+
}
|
17
|
+
|
11
18
|
struct RoleInfo {
|
12
19
|
ShortString name;
|
13
|
-
|
14
|
-
bool isLocked;
|
20
|
+
Type rtype;
|
21
|
+
//bool isLocked;
|
22
|
+
RoleId admin;
|
15
23
|
Timestamp createdAt;
|
16
24
|
Timestamp updatedAt;
|
17
25
|
}
|
18
26
|
|
19
27
|
struct TargetInfo {
|
20
28
|
ShortString name;
|
21
|
-
|
29
|
+
Type ttype;
|
22
30
|
bool isLocked;
|
23
31
|
Timestamp createdAt;
|
24
32
|
Timestamp updatedAt;
|
25
33
|
}
|
26
34
|
|
27
|
-
error
|
35
|
+
error ErrorIAccessCallerIsNotRoleAdmin(address caller, RoleId roleId);
|
36
|
+
|
37
|
+
error ErrorIAccessRoleIdDoesNotExist(RoleId roleId);
|
28
38
|
error ErrorIAccessRoleIdTooBig(RoleId roleId);
|
29
39
|
error ErrorIAccessRoleIdTooSmall(RoleId roleId);
|
30
|
-
error
|
31
|
-
error ErrorIAccessRoleIdNotActive(RoleId roleId);
|
40
|
+
error ErrorIAccessRoleIdExists(RoleId roleId);
|
32
41
|
error ErrorIAccessRoleNameEmpty(RoleId roleId);
|
33
|
-
error
|
34
|
-
error
|
35
|
-
error ErrorIAccessRoleIsCustomIsImmutable(RoleId roleId, bool isCustom, bool isCustomExisting);
|
36
|
-
error ErrorIAccessGrantNonexstentRole(RoleId roleId);
|
37
|
-
error ErrorIAccessRevokeNonexstentRole(RoleId roleId);
|
38
|
-
error ErrorIAccessRenounceNonexstentRole(RoleId roleId);
|
42
|
+
error ErrorIAccessRoleNameExists(RoleId roleId, RoleId existingRoleId, ShortString name);
|
43
|
+
error ErrorIAccessRoleTypeInvalid(RoleId roleId, Type rtype);
|
39
44
|
|
40
45
|
error ErrorIAccessTargetAddressZero();
|
41
|
-
error ErrorIAccessTargetDoesNotExist(
|
42
|
-
error ErrorIAccessTargetAddressDoesNotExist(address target);
|
46
|
+
error ErrorIAccessTargetDoesNotExist(address target);
|
43
47
|
error ErrorIAccessTargetExists(address target, ShortString name);
|
48
|
+
error ErrorIAccessTargetTypeInvalid(address target, Type ttype);
|
44
49
|
error ErrorIAccessTargetNameEmpty(address target);
|
45
50
|
error ErrorIAccessTargetNameExists(address target, address existingTarget, ShortString name);
|
46
51
|
error ErrorIAccessTargetLocked(address target);
|
52
|
+
error ErrorIAccessTargetNotRegistered(address target);
|
53
|
+
error ErrorIAccessTargetAuthorityInvalid(address target, address targetAuthority);
|
47
54
|
}
|
@@ -1,21 +1,23 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
+
import {Amount} from "../../types/Amount.sol";
|
4
5
|
import {NftId} from "../../types/NftId.sol";
|
5
6
|
import {Fee} from "../../types/Fee.sol";
|
6
7
|
import {Seconds} from "../../types/Seconds.sol";
|
7
8
|
import {Timestamp} from "../../types/Timestamp.sol";
|
8
9
|
|
9
10
|
interface IBundle {
|
11
|
+
|
10
12
|
struct BundleInfo {
|
11
13
|
NftId poolNftId;
|
12
14
|
Fee fee; // bundle fee on net premium amounts
|
13
15
|
bytes filter; // required conditions for applications to be considered for collateralization by this bundle
|
14
|
-
|
15
|
-
|
16
|
-
|
16
|
+
Amount capitalAmount; // net stakings + net premiums - payouts
|
17
|
+
Amount lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= capital amount)
|
18
|
+
Amount feeAmount; // accumulated fee amount
|
17
19
|
Seconds lifetime;
|
18
|
-
Timestamp expiredAt; // no new policies
|
20
|
+
Timestamp expiredAt; // no new policies starting with this timestamp
|
19
21
|
Timestamp closedAt; // no open policies, locked amount = 0
|
20
22
|
}
|
21
23
|
}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
+
|
6
|
+
import {Amount} from "../../types/Amount.sol";
|
7
|
+
import {Fee} from "../../types/Fee.sol";
|
8
|
+
import {NftId} from "../../types/NftId.sol";
|
9
|
+
import {RoleId} from "../../types/RoleId.sol";
|
10
|
+
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
11
|
+
import {UFixed} from "../../types/UFixed.sol";
|
12
|
+
|
13
|
+
interface IComponents {
|
14
|
+
|
15
|
+
struct ComponentInfo {
|
16
|
+
string name; // component name (needs to be unique per instance)
|
17
|
+
IERC20Metadata token;
|
18
|
+
TokenHandler tokenHandler;
|
19
|
+
address wallet;
|
20
|
+
Amount balanceAmount; // calculated balance (may not necessarily match withg wallet balance)
|
21
|
+
Amount feeAmount; // accumulated fees belonging to component owner
|
22
|
+
bytes data; // will hold component type specific additional info (eg encoded pool info)
|
23
|
+
}
|
24
|
+
|
25
|
+
struct PoolInfo {
|
26
|
+
NftId productNftId; // the nft of the product this pool is linked to
|
27
|
+
RoleId bundleOwnerRole; // the required role for bundle owners
|
28
|
+
// TODO maxCapitalAmount -> maxBalanceAmount
|
29
|
+
uint256 maxCapitalAmount; // max capital amount allowed for pool
|
30
|
+
uint256 balanceAmount; // current pool balance (accounting view)
|
31
|
+
uint256 feeAmount; // accumulated fee amount
|
32
|
+
bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
|
33
|
+
bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
|
34
|
+
bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
|
35
|
+
UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
|
36
|
+
UFixed retentionLevel; // amount of collateral held in pool (default 100%)
|
37
|
+
Fee poolFee; // pool fee on net premium
|
38
|
+
Fee stakingFee; // pool fee on staked capital from investor
|
39
|
+
Fee performanceFee; // pool fee on profits from capital investors
|
40
|
+
}
|
41
|
+
}
|
@@ -1,6 +1,7 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
+
import {Amount} from "../../types/Amount.sol";
|
4
5
|
import {NftId} from "../../types/NftId.sol";
|
5
6
|
import {ClaimId} from "../../types/ClaimId.sol";
|
6
7
|
import {ReferralId} from "../../types/Referral.sol";
|
@@ -42,13 +43,13 @@ interface IPolicy {
|
|
42
43
|
RiskId riskId;
|
43
44
|
uint256 sumInsuredAmount;
|
44
45
|
uint256 premiumAmount;
|
45
|
-
uint256 premiumPaidAmount;
|
46
|
+
uint256 premiumPaidAmount; // when lower than premium amount: max payout decreased accordingly
|
46
47
|
Seconds lifetime;
|
47
48
|
bytes applicationData;
|
48
49
|
bytes policyData;
|
49
50
|
uint16 claimsCount;
|
50
51
|
uint16 openClaimsCount;
|
51
|
-
|
52
|
+
Amount payoutAmount;
|
52
53
|
Timestamp activatedAt; // time of underwriting
|
53
54
|
Timestamp expiredAt; // no new claims (activatedAt + lifetime)
|
54
55
|
Timestamp closedAt; // no locked capital (or declinedAt)
|
@@ -56,16 +57,20 @@ interface IPolicy {
|
|
56
57
|
|
57
58
|
// claimId neeeds to be encoded policyNftId:claimId combination
|
58
59
|
struct ClaimInfo {
|
59
|
-
|
60
|
-
|
60
|
+
Amount claimAmount;
|
61
|
+
Amount paidAmount;
|
62
|
+
uint8 payoutsCount;
|
63
|
+
uint8 openPayoutsCount;
|
61
64
|
bytes data;
|
62
|
-
|
65
|
+
// TODO consider to add processData that may include information supporting confirm or decline
|
66
|
+
Timestamp closedAt; // payment of confirmed claim amount (or declinedAt)
|
63
67
|
}
|
64
68
|
|
65
69
|
// claimId neeeds to be encoded policyNftId:claimId combination
|
66
70
|
struct PayoutInfo {
|
67
71
|
ClaimId claimId;
|
68
|
-
|
72
|
+
Amount amount;
|
73
|
+
// TODO consider to add a beneficiary address that will be the receiver of the payout tokens
|
69
74
|
bytes data;
|
70
75
|
Timestamp paidAt; // payoment of confirmed claim amount (or declinedAt)
|
71
76
|
}
|
@@ -5,10 +5,12 @@ import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IER
|
|
5
5
|
|
6
6
|
import {Fee} from "../../types/Fee.sol";
|
7
7
|
import {NftId} from "../../types/NftId.sol";
|
8
|
-
import {
|
8
|
+
import {RoleId} from "../../types/RoleId.sol";
|
9
9
|
import {TokenHandler} from "../../shared/TokenHandler.sol";
|
10
|
+
import {UFixed} from "../../types/UFixed.sol";
|
10
11
|
|
11
12
|
interface ISetup {
|
13
|
+
|
12
14
|
struct ProductSetupInfo {
|
13
15
|
IERC20Metadata token;
|
14
16
|
TokenHandler tokenHandler;
|
@@ -28,19 +30,4 @@ interface ISetup {
|
|
28
30
|
address wallet;
|
29
31
|
uint256 sumDistributionOwnerFees;
|
30
32
|
}
|
31
|
-
|
32
|
-
struct PoolSetupInfo {
|
33
|
-
NftId productNftId;
|
34
|
-
TokenHandler tokenHandler;
|
35
|
-
uint256 maxCapitalAmount; // max capital amount allowed for pool
|
36
|
-
bool isInterceptingBundleTransfers; // intercepts nft transfers for bundles
|
37
|
-
bool isExternallyManaged; // funding bundles is restricted to book keeping, actual funds may be provided as needed to support payouts
|
38
|
-
bool isVerifyingApplications; // underwriting requires the pool component checks/confirms the applications
|
39
|
-
UFixed collateralizationLevel; // factor to calculate collateral for sum insurance (default 100%)
|
40
|
-
UFixed retentionLevel; // amount of collateral held in pool (default 100%)
|
41
|
-
Fee poolFee; // pool fee on net premium
|
42
|
-
Fee stakingFee; // pool fee on staked capital from investor
|
43
|
-
Fee performanceFee; // pool fee on profits from capital investors
|
44
|
-
address wallet;
|
45
|
-
}
|
46
33
|
}
|
@@ -10,6 +10,7 @@ import {Product} from "../../components/Product.sol";
|
|
10
10
|
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
11
11
|
import {IDistributionComponent} from "../../components/IDistributionComponent.sol";
|
12
12
|
import {IInstance} from "../IInstance.sol";
|
13
|
+
import {IComponents} from "../module/IComponents.sol";
|
13
14
|
import {IPolicy} from "../module/IPolicy.sol";
|
14
15
|
import {IRisk} from "../module/IRisk.sol";
|
15
16
|
import {IBundle} from "../module/IBundle.sol";
|
@@ -22,12 +23,13 @@ import {TokenHandler} from "../../shared/TokenHandler.sol";
|
|
22
23
|
import {IVersionable} from "../../shared/IVersionable.sol";
|
23
24
|
import {Versionable} from "../../shared/Versionable.sol";
|
24
25
|
|
26
|
+
import {AmountLib} from "../../types/Amount.sol";
|
25
27
|
import {Seconds} from "../../types/Seconds.sol";
|
26
28
|
import {Timestamp, TimestampLib, zeroTimestamp} from "../../types/Timestamp.sol";
|
27
29
|
import {UFixed, UFixedLib} from "../../types/UFixed.sol";
|
28
30
|
import {Blocknumber, blockNumber} from "../../types/Blocknumber.sol";
|
29
31
|
import {ObjectType, DISTRIBUTION, INSTANCE, PRODUCT, POOL, APPLICATION, POLICY, BUNDLE} from "../../types/ObjectType.sol";
|
30
|
-
import {APPLIED, REVOKED,
|
32
|
+
import {APPLIED, REVOKED, ACTIVE, KEEP_STATE} from "../../types/StateId.sol";
|
31
33
|
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
32
34
|
import {Fee, FeeLib} from "../../types/Fee.sol";
|
33
35
|
import {ReferralId} from "../../types/Referral.sol";
|
@@ -64,14 +66,14 @@ contract ApplicationService is
|
|
64
66
|
address initialOwner;
|
65
67
|
(registryAddress, initialOwner) = abi.decode(data, (address, address));
|
66
68
|
|
67
|
-
initializeService(registryAddress, owner);
|
69
|
+
initializeService(registryAddress, address(0), owner);
|
68
70
|
registerInterface(type(IApplicationService).interfaceId);
|
69
71
|
|
70
|
-
_distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(),
|
72
|
+
_distributionService = IDistributionService(getRegistry().getServiceAddress(DISTRIBUTION(), getVersion().toMajorPart()));
|
71
73
|
}
|
72
74
|
|
73
75
|
|
74
|
-
function getDomain() public pure override
|
76
|
+
function getDomain() public pure override returns(ObjectType) {
|
75
77
|
return APPLICATION();
|
76
78
|
}
|
77
79
|
|
@@ -89,13 +91,13 @@ contract ApplicationService is
|
|
89
91
|
virtual
|
90
92
|
returns (NftId applicationNftId)
|
91
93
|
{
|
92
|
-
(
|
94
|
+
(NftId productNftId,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
93
95
|
// TODO: add validations (see create bundle in pool service)
|
94
96
|
|
95
97
|
applicationNftId = getRegistryService().registerPolicy(
|
96
98
|
IRegistry.ObjectInfo(
|
97
99
|
zeroNftId(),
|
98
|
-
|
100
|
+
productNftId,
|
99
101
|
POLICY(),
|
100
102
|
false, // intercepting property for policies is defined on product
|
101
103
|
address(0),
|
@@ -106,7 +108,7 @@ contract ApplicationService is
|
|
106
108
|
|
107
109
|
// (uint256 premiumAmount,,,,,) = calculatePremium(
|
108
110
|
IPolicy.Premium memory premium = calculatePremium(
|
109
|
-
|
111
|
+
productNftId,
|
110
112
|
riskId,
|
111
113
|
sumInsuredAmount,
|
112
114
|
lifetime,
|
@@ -116,7 +118,7 @@ contract ApplicationService is
|
|
116
118
|
);
|
117
119
|
|
118
120
|
IPolicy.PolicyInfo memory policyInfo = IPolicy.PolicyInfo(
|
119
|
-
|
121
|
+
productNftId,
|
120
122
|
bundleNftId,
|
121
123
|
referralId,
|
122
124
|
riskId,
|
@@ -128,14 +130,13 @@ contract ApplicationService is
|
|
128
130
|
"",
|
129
131
|
0,
|
130
132
|
0,
|
131
|
-
|
133
|
+
AmountLib.zero(),
|
132
134
|
zeroTimestamp(),
|
133
135
|
zeroTimestamp(),
|
134
136
|
zeroTimestamp()
|
135
137
|
);
|
136
138
|
|
137
139
|
instance.createApplication(applicationNftId, policyInfo);
|
138
|
-
instance.updateApplicationState(applicationNftId, APPLIED());
|
139
140
|
|
140
141
|
// TODO: add logging
|
141
142
|
}
|
@@ -172,7 +173,7 @@ contract ApplicationService is
|
|
172
173
|
external
|
173
174
|
virtual override
|
174
175
|
{
|
175
|
-
(
|
176
|
+
(,, IInstance instance) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
176
177
|
instance.updateApplicationState(applicationNftId, REVOKED());
|
177
178
|
}
|
178
179
|
|
@@ -254,15 +255,15 @@ contract ApplicationService is
|
|
254
255
|
premium.fullPremiumAmount += t;
|
255
256
|
}
|
256
257
|
{
|
257
|
-
|
258
|
-
uint256 t =
|
258
|
+
bytes memory componentData = instanceReader.getComponentInfo(poolNftId).data;
|
259
|
+
uint256 t = abi.decode(componentData, (IComponents.PoolInfo)).poolFee.fixedFee;
|
259
260
|
premium.poolFeeFixAmount = t;
|
260
261
|
premium.fullPremiumAmount += t;
|
261
262
|
}
|
262
263
|
{
|
263
264
|
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
264
265
|
if(bundleInfo.poolNftId != poolNftId) {
|
265
|
-
revert
|
266
|
+
revert ErrorApplicationServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
|
266
267
|
}
|
267
268
|
uint256 t = bundleInfo.fee.fixedFee;
|
268
269
|
premium.bundleFeeFixAmount = t;
|
@@ -307,15 +308,16 @@ contract ApplicationService is
|
|
307
308
|
premium.fullPremiumAmount += t;
|
308
309
|
}
|
309
310
|
{
|
310
|
-
|
311
|
-
|
311
|
+
bytes memory componentData = instanceReader.getComponentInfo(poolNftId).data;
|
312
|
+
UFixed poolFractionalFee = abi.decode(componentData, (IComponents.PoolInfo)).poolFee.fractionalFee;
|
313
|
+
uint256 t = (UFixedLib.toUFixed(netPremiumAmount) * poolFractionalFee).toInt();
|
312
314
|
premium.poolFeeVarAmount = t;
|
313
315
|
premium.fullPremiumAmount += t;
|
314
316
|
}
|
315
317
|
{
|
316
318
|
IBundle.BundleInfo memory bundleInfo = instanceReader.getBundleInfo(bundleNftId);
|
317
319
|
if(bundleInfo.poolNftId != poolNftId) {
|
318
|
-
revert
|
320
|
+
revert ErrorApplicationServiceBundlePoolMismatch(bundleNftId, bundleInfo.poolNftId, poolNftId);
|
319
321
|
}
|
320
322
|
uint256 t = (UFixedLib.toUFixed(netPremiumAmount) * bundleInfo.fee.fractionalFee).toInt();
|
321
323
|
premium.bundleFeeVarAmount = t;
|
@@ -336,14 +338,18 @@ contract ApplicationService is
|
|
336
338
|
|
337
339
|
function _getAndVerifyInstanceAndProduct() internal view returns (Product product) {
|
338
340
|
IRegistry.ObjectInfo memory productInfo;
|
339
|
-
(productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
341
|
+
(, productInfo,) = _getAndVerifyComponentInfoAndInstance(PRODUCT());
|
340
342
|
product = Product(productInfo.objectAddress);
|
341
343
|
}
|
342
344
|
|
343
345
|
function _getAndVerifyProduct(NftId productNftId) internal view returns (Product product) {
|
344
346
|
IRegistry registry = getRegistry();
|
345
347
|
IRegistry.ObjectInfo memory productInfo = registry.getObjectInfo(productNftId);
|
346
|
-
|
348
|
+
|
349
|
+
if(productInfo.objectType != PRODUCT()) {
|
350
|
+
revert ErrorApplicationServiceNotProduct(productNftId, productInfo.objectType);
|
351
|
+
}
|
352
|
+
|
347
353
|
product = Product(productInfo.objectAddress);
|
348
354
|
}
|
349
355
|
}
|