@etherisc/gif-next 0.0.2-f99f1d2-109 → 0.0.2-fc8b370-882
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 +90 -7
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +26 -57
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
- package/artifacts/contracts/{instance/component/IComponent.sol/IComponentContract.json → components/IBaseComponent.sol/IBaseComponent.json} +26 -57
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +4 -0
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +356 -0
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IProductComponent.sol/IProductComponent.json} +89 -65
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +134 -75
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +72 -113
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +2 -2
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +1 -1
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +2 -2
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +2 -2
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +2 -2
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +1 -1
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +2 -2
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +2 -2
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +1 -1
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +2 -2
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +2 -2
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +1 -1
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +2 -2
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +719 -332
- package/artifacts/contracts/instance/IInstanceLinked.sol/IInstanceLinked.dbg.json +4 -0
- package/artifacts/contracts/instance/{component/IComponent.sol → IInstanceLinked.sol}/IInstanceLinked.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +998 -527
- package/artifacts/contracts/instance/base/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → base/ComponentServiceBase.sol/ComponentServiceBase.json} +133 -132
- package/artifacts/contracts/instance/base/IInstanceBase.sol/IInstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/{product/ProductService.sol/ProductModule.json → base/IInstanceBase.sol/IInstanceBase.json} +18 -30
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.json +511 -0
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/{lifecycle/ILifecycle.sol/ILifecycleModule.json → base/ILifecycle.sol/ILifecycle.json} +10 -77
- package/artifacts/contracts/instance/base/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/instance/base/IService.sol/IService.json +300 -0
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/InstanceBase.sol/InstanceBase.json +326 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +692 -0
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +169 -0
- package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ModuleBase.sol/ModuleBase.json +10 -0
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/base/ServiceBase.sol/ServiceBase.json +300 -0
- package/artifacts/contracts/instance/module/access/Access.sol/AccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{access → module/access}/Access.sol/AccessModule.json +85 -152
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccess.dbg.json +4 -0
- package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccess.json +1 -1
- package/artifacts/contracts/instance/module/access/IAccess.sol/IAccessModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{access → module/access}/IAccess.sol/IAccessModule.json +96 -99
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/BundleModule.sol/BundleModule.json +296 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundle.json +10 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/bundle/IBundle.sol/IBundleModule.json +296 -0
- package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/compensation/CompensationModule.sol/CompensationModule.json +10 -0
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.dbg.json +4 -0
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensation.json +10 -0
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/compensation/ICompensation.sol/ICompensationModule.json +10 -0
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/component/ComponentModule.sol/ComponentModule.json +188 -0
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponent.dbg.json +4 -0
- package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponent.json +1 -1
- package/artifacts/contracts/instance/module/component/IComponent.sol/IComponentModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{component → module/component}/IComponent.sol/IComponentModule.json +33 -62
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicy.dbg.json +4 -0
- package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicy.json +1 -1
- package/artifacts/contracts/instance/module/policy/IPolicy.sol/IPolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{policy → module/policy}/IPolicy.sol/IPolicyModule.json +132 -125
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +132 -125
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPool.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPool.json +1 -1
- package/artifacts/contracts/instance/module/pool/IPoolModule.sol/IPoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/IPoolModule.sol/IPoolModule.json +67 -47
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +51 -57
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.dbg.json +4 -0
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRisk.json +10 -0
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/risk/IRisk.sol/IRiskModule.json +10 -0
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +10 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasury.json +1 -1
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{treasury → module/treasury}/ITreasury.sol/ITreasuryModule.json +100 -57
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/TokenHandler.sol/TokenHandler.json +76 -0
- package/artifacts/contracts/instance/module/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{treasury → module/treasury}/TreasuryModule.sol/TreasuryModule.json +100 -57
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +523 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IComponentOwnerService.sol/IComponentOwnerService.json +364 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +376 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +477 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +471 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +673 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +65 -2
- package/artifacts/contracts/registry/IChainNft.sol/IChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +147 -30
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/registry/IRegistryLinked.sol/IRegistryLinked.json +24 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +241 -25
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +35 -0
- package/artifacts/contracts/shared/IOwnable.sol/IOwnable.dbg.json +4 -0
- package/artifacts/contracts/{registry/IRegistry.sol → shared/IOwnable.sol}/IOwnable.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +4 -0
- package/artifacts/contracts/{registry/IRegistry.sol → shared/IRegisterable.sol}/IRegisterable.json +16 -61
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +164 -0
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +4 -0
- package/artifacts/contracts/{registry/Registry.sol → shared/Registerable.sol}/Registerable.json +16 -61
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +164 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +4 -0
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +119 -0
- package/artifacts/contracts/test/TestPool.sol/TestPool.dbg.json +4 -0
- package/artifacts/contracts/test/TestPool.sol/TestPool.json +387 -0
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.dbg.json +4 -0
- package/artifacts/contracts/test/TestProduct.sol/TestProduct.json +393 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +4 -0
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +137 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +4 -0
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +116 -0
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +4 -0
- package/artifacts/contracts/test/TestService.sol/TestService.json +379 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +4 -0
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.json +338 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +218 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +4 -0
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +206 -0
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +4 -0
- package/artifacts/contracts/test/Usdc.sol/USDC.json +338 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +4 -0
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.json +10 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +4 -0
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +218 -0
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +4 -0
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +111 -0
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +65 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +30 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +2 -2
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.json +64 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedMathLib.json +88 -62
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionLib.json +139 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +4 -0
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +30 -0
- package/contracts/components/BaseComponent.sol +88 -0
- package/contracts/components/IBaseComponent.sol +19 -0
- package/contracts/components/IPoolComponent.sol +57 -0
- package/contracts/components/{IProduct.sol → IProductComponent.sol} +9 -6
- package/contracts/components/Pool.sol +140 -18
- package/contracts/components/Product.sol +53 -25
- package/contracts/instance/IInstance.sol +38 -11
- package/contracts/instance/IInstanceLinked.sol +8 -0
- package/contracts/instance/Instance.sol +44 -48
- package/contracts/instance/base/ComponentServiceBase.sol +42 -0
- package/contracts/instance/base/IInstanceBase.sol +14 -0
- package/contracts/instance/base/IKeyValueStore.sol +49 -0
- package/contracts/instance/{lifecycle → base}/ILifecycle.sol +4 -21
- package/contracts/instance/base/IService.sol +15 -0
- package/contracts/instance/base/InstanceBase.sol +80 -0
- package/contracts/instance/base/KeyValueStore.sol +156 -0
- package/contracts/instance/{lifecycle/LifecycleModule.sol → base/Lifecycle.sol} +36 -29
- package/contracts/instance/base/ModuleBase.sol +52 -0
- package/contracts/instance/base/ServiceBase.sol +37 -0
- package/contracts/instance/module/access/Access.sol +149 -0
- package/contracts/instance/module/access/IAccess.sol +53 -0
- package/contracts/instance/module/bundle/BundleModule.sol +136 -0
- package/contracts/instance/module/bundle/IBundle.sol +58 -0
- package/contracts/instance/module/compensation/CompensationModule.sol +8 -0
- package/contracts/instance/module/compensation/ICompensation.sol +10 -0
- package/contracts/instance/module/component/ComponentModule.sol +95 -0
- package/contracts/instance/module/component/IComponent.sol +53 -0
- package/contracts/instance/module/policy/IPolicy.sol +60 -0
- package/contracts/instance/module/policy/PolicyModule.sol +76 -0
- package/contracts/instance/module/pool/IPoolModule.sol +41 -0
- package/contracts/instance/module/pool/PoolModule.sol +87 -0
- package/contracts/instance/module/risk/IRisk.sol +10 -0
- package/contracts/instance/module/risk/RiskModule.sol +8 -0
- package/contracts/instance/{treasury → module/treasury}/ITreasury.sol +27 -15
- package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
- package/contracts/instance/{treasury → module/treasury}/TreasuryModule.sol +43 -59
- package/contracts/instance/service/ComponentOwnerService.sol +170 -0
- package/contracts/instance/service/IComponentOwnerService.sol +22 -0
- package/contracts/instance/service/IPoolService.sol +30 -0
- package/contracts/instance/service/IProductService.sol +58 -0
- package/contracts/instance/service/PoolService.sol +123 -0
- package/contracts/instance/service/ProductService.sol +354 -0
- package/contracts/registry/ChainNft.sol +61 -37
- package/contracts/registry/IRegistry.sol +24 -34
- package/contracts/registry/IRegistryLinked.sol +8 -0
- package/contracts/registry/Registry.sol +284 -85
- package/contracts/shared/ERC165.sol +21 -0
- package/contracts/shared/IOwnable.sol +6 -0
- package/contracts/shared/IRegisterable.sol +24 -0
- package/contracts/shared/IVersionable.sol +52 -0
- package/contracts/shared/Registerable.sol +86 -0
- package/contracts/shared/Versionable.sol +89 -0
- package/contracts/test/TestFee.sol +25 -0
- package/contracts/test/TestPool.sol +22 -0
- package/contracts/test/TestProduct.sol +44 -0
- package/contracts/test/TestRegisterable.sol +19 -0
- package/contracts/test/TestRoleId.sol +14 -0
- package/contracts/test/TestService.sol +32 -0
- package/contracts/test/TestToken.sol +26 -0
- package/contracts/test/TestVersion.sol +44 -0
- package/contracts/test/TestVersionable.sol +17 -0
- package/contracts/test/Usdc.sol +26 -0
- package/contracts/types/AddressSet.sol +58 -0
- package/contracts/types/Fee.sol +39 -20
- package/contracts/types/Key32.sol +45 -0
- package/contracts/types/NftId.sol +22 -1
- package/contracts/types/NftIdSet.sol +60 -0
- package/contracts/types/ObjectType.sol +22 -14
- package/contracts/types/RoleId.sol +38 -0
- package/contracts/types/StateId.sol +13 -3
- package/contracts/types/Timestamp.sol +22 -1
- package/contracts/types/UFixed.sol +26 -23
- package/contracts/types/Version.sol +95 -0
- package/package.json +9 -3
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +0 -4
- package/artifacts/contracts/components/Component.sol/InstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/components/Component.sol/InstanceLinked.json +0 -35
- package/artifacts/contracts/components/IPool.sol/IPoolComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.dbg.json +0 -4
- package/artifacts/contracts/components/IProduct.sol/IProductComponent.json +0 -74
- package/artifacts/contracts/instance/access/Access.sol/AccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccess.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessCheckRole.json +0 -35
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.dbg.json +0 -4
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessComponentTypeRoles.json +0 -50
- package/artifacts/contracts/instance/access/IAccess.sol/IAccessModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/component/ComponentModule.sol/ComponentOwnerService.json +0 -202
- package/artifacts/contracts/instance/component/IComponent.sol/IComponent.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentContract.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentModule.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.dbg.json +0 -4
- package/artifacts/contracts/instance/component/IComponent.sol/IComponentOwnerService.json +0 -141
- package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
- package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +0 -4
- package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycle.json +0 -134
- package/artifacts/contracts/instance/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +0 -4
- package/artifacts/contracts/instance/lifecycle/LifecycleModule.sol/LifecycleModule.json +0 -221
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicy.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/IPolicy.sol/IPolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/policy/PolicyModule.sol/PolicyModule.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPool.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/IPoolModule.sol/IPoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/pool/PoolModule.sol/PoolModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductModule.json +0 -75
- package/artifacts/contracts/instance/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/product/IProductService.sol/IProductService.json +0 -127
- package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -196
- package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasury.dbg.json +0 -4
- package/artifacts/contracts/instance/treasury/ITreasury.sol/ITreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.dbg.json +0 -4
- package/artifacts/contracts/instance/treasury/TokenHandler.sol/TokenHandler.json +0 -45
- package/artifacts/contracts/instance/treasury/TreasuryModule.sol/TreasuryModule.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IOwnable.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegisterable.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/IRegistry.sol/IRegistryLinked.json +0 -49
- package/artifacts/contracts/registry/Registry.sol/Registerable.dbg.json +0 -4
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.dbg.json +0 -4
- package/artifacts/contracts/registry/Registry.sol/RegistryLinked.json +0 -60
- package/contracts/components/Component.sol +0 -77
- package/contracts/components/IPool.sol +0 -15
- package/contracts/instance/access/Access.sol +0 -165
- package/contracts/instance/access/IAccess.sol +0 -63
- package/contracts/instance/component/ComponentModule.sol +0 -274
- package/contracts/instance/component/IComponent.sol +0 -74
- package/contracts/instance/policy/IPolicy.sol +0 -50
- package/contracts/instance/policy/PolicyModule.sol +0 -114
- package/contracts/instance/pool/IPoolModule.sol +0 -23
- package/contracts/instance/pool/PoolModule.sol +0 -81
- package/contracts/instance/product/IProductService.sol +0 -36
- package/contracts/instance/product/ProductService.sol +0 -136
- package/contracts/instance/treasury/TokenHandler.sol +0 -24
@@ -0,0 +1,76 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRegistry} from "../../../registry/IRegistry.sol";
|
5
|
+
|
6
|
+
import {IProductService} from "../../service/IProductService.sol";
|
7
|
+
import {IPolicy, IPolicyModule} from "./IPolicy.sol";
|
8
|
+
import {ObjectType, POLICY} from "../../../types/ObjectType.sol";
|
9
|
+
import {APPLIED, ACTIVE, UNDERWRITTEN} from "../../../types/StateId.sol";
|
10
|
+
import {NftId, NftIdLib} from "../../../types/NftId.sol";
|
11
|
+
import {Timestamp, blockTimestamp, zeroTimestamp} from "../../../types/Timestamp.sol";
|
12
|
+
import {Blocknumber, blockNumber} from "../../../types/Blocknumber.sol";
|
13
|
+
|
14
|
+
abstract contract PolicyModule is IPolicyModule {
|
15
|
+
using NftIdLib for NftId;
|
16
|
+
|
17
|
+
mapping(NftId nftId => PolicyInfo info) private _policyInfo;
|
18
|
+
|
19
|
+
// TODO find a better place to avoid dupliation
|
20
|
+
modifier onlyProductService2() {
|
21
|
+
require(
|
22
|
+
msg.sender == address(this.getProductService()),
|
23
|
+
"ERROR:POL-001:NOT_PRODUCT_SERVICE"
|
24
|
+
);
|
25
|
+
_;
|
26
|
+
}
|
27
|
+
|
28
|
+
function createApplication(
|
29
|
+
NftId productNftId,
|
30
|
+
NftId policyNftId,
|
31
|
+
uint256 sumInsuredAmount,
|
32
|
+
uint256 premiumAmount,
|
33
|
+
uint256 lifetime,
|
34
|
+
NftId bundleNftId
|
35
|
+
)
|
36
|
+
external
|
37
|
+
onlyProductService2
|
38
|
+
override
|
39
|
+
{
|
40
|
+
_policyInfo[policyNftId] = PolicyInfo(
|
41
|
+
policyNftId,
|
42
|
+
productNftId,
|
43
|
+
bundleNftId,
|
44
|
+
address(0), // beneficiary = policy nft holder
|
45
|
+
// _lifecycleModule.getInitialState(POLICY()),
|
46
|
+
APPLIED(),
|
47
|
+
sumInsuredAmount,
|
48
|
+
premiumAmount,
|
49
|
+
0, // premium paid amount
|
50
|
+
lifetime,
|
51
|
+
"", // data
|
52
|
+
blockTimestamp(), // createdAt
|
53
|
+
zeroTimestamp(), // activatedAt
|
54
|
+
zeroTimestamp(), // expiredAt
|
55
|
+
zeroTimestamp(), // closedAt
|
56
|
+
blockNumber() // updatedIn
|
57
|
+
);
|
58
|
+
|
59
|
+
// TODO add logging
|
60
|
+
}
|
61
|
+
|
62
|
+
function setPolicyInfo(PolicyInfo memory policyInfo)
|
63
|
+
external
|
64
|
+
override
|
65
|
+
onlyProductService2
|
66
|
+
{
|
67
|
+
_policyInfo[policyInfo.nftId] = policyInfo;
|
68
|
+
}
|
69
|
+
|
70
|
+
function getPolicyInfo(
|
71
|
+
NftId nftId
|
72
|
+
) external view returns (PolicyInfo memory info) {
|
73
|
+
return _policyInfo[nftId];
|
74
|
+
}
|
75
|
+
|
76
|
+
}
|
@@ -0,0 +1,41 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRegistry} from "../../../registry/IRegistry.sol";
|
5
|
+
import {NftId} from "../../../types/NftId.sol";
|
6
|
+
import {UFixed} from "../../../types/UFixed.sol";
|
7
|
+
import {IProductService} from "../../service/IProductService.sol";
|
8
|
+
import {IPoolService} from "../../service/IPoolService.sol";
|
9
|
+
|
10
|
+
interface IPool {
|
11
|
+
struct PoolInfo {
|
12
|
+
NftId nftId;
|
13
|
+
bool isVerifying;
|
14
|
+
UFixed collateralizationLevel;
|
15
|
+
}
|
16
|
+
}
|
17
|
+
|
18
|
+
interface IPoolModule is IPool {
|
19
|
+
|
20
|
+
function registerPool(
|
21
|
+
NftId poolNftId,
|
22
|
+
bool isVerifying,
|
23
|
+
UFixed collateralizationLevel
|
24
|
+
) external;
|
25
|
+
|
26
|
+
function addBundleToPool(
|
27
|
+
NftId bundleNftId,
|
28
|
+
NftId poolNftId,
|
29
|
+
uint256 amount
|
30
|
+
) external;
|
31
|
+
|
32
|
+
function getPoolInfo(
|
33
|
+
NftId nftId
|
34
|
+
) external view returns (PoolInfo memory info);
|
35
|
+
|
36
|
+
function getBundleCount(NftId poolNftId) external view returns (uint256 bundleCount);
|
37
|
+
function getBundleNftId(NftId poolNftId, uint256 index) external view returns (NftId bundleNftId);
|
38
|
+
|
39
|
+
// repeat service linked signatures to avoid linearization issues
|
40
|
+
function getPoolService() external returns(IPoolService);
|
41
|
+
}
|
@@ -0,0 +1,87 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IRegistry} from "../../../registry/IRegistry.sol";
|
5
|
+
import {IProductService} from "../../service/IProductService.sol";
|
6
|
+
import {IPoolService} from "../../service/IPoolService.sol";
|
7
|
+
import {IPolicy, IPolicyModule} from "../../module/policy/IPolicy.sol";
|
8
|
+
import {ITreasuryModule} from "../../module/treasury/ITreasury.sol";
|
9
|
+
|
10
|
+
import {NftId} from "../../../types/NftId.sol";
|
11
|
+
import {LibNftIdSet} from "../../../types/NftIdSet.sol";
|
12
|
+
import {StateId, APPLIED} from "../../../types/StateId.sol";
|
13
|
+
import {UFixed} from "../../../types/UFixed.sol";
|
14
|
+
|
15
|
+
import {IPoolModule} from "./IPoolModule.sol";
|
16
|
+
|
17
|
+
abstract contract PoolModule is
|
18
|
+
IPoolModule
|
19
|
+
{
|
20
|
+
using LibNftIdSet for LibNftIdSet.Set;
|
21
|
+
|
22
|
+
mapping(NftId poolNftId => PoolInfo info) private _poolInfo;
|
23
|
+
mapping(NftId poolNftId => LibNftIdSet.Set bundles) private _bundlesForPool;
|
24
|
+
|
25
|
+
modifier poolServiceCallingPool() {
|
26
|
+
require(
|
27
|
+
msg.sender == address(this.getPoolService()),
|
28
|
+
"ERROR:PL-001:NOT_POOL_SERVICE"
|
29
|
+
);
|
30
|
+
_;
|
31
|
+
}
|
32
|
+
|
33
|
+
function registerPool(
|
34
|
+
NftId nftId,
|
35
|
+
bool isVerifying,
|
36
|
+
UFixed collateralizationRate
|
37
|
+
)
|
38
|
+
public
|
39
|
+
override
|
40
|
+
{
|
41
|
+
require(
|
42
|
+
_poolInfo[nftId].nftId.eqz(),
|
43
|
+
"ERROR:PL-010:ALREADY_CREATED");
|
44
|
+
|
45
|
+
_poolInfo[nftId] = PoolInfo(
|
46
|
+
nftId,
|
47
|
+
isVerifying,
|
48
|
+
collateralizationRate
|
49
|
+
);
|
50
|
+
|
51
|
+
// TODO add logging
|
52
|
+
}
|
53
|
+
|
54
|
+
function addBundleToPool(
|
55
|
+
NftId bundleNftId,
|
56
|
+
NftId poolNftId,
|
57
|
+
uint256 // amount
|
58
|
+
)
|
59
|
+
external
|
60
|
+
override
|
61
|
+
{
|
62
|
+
LibNftIdSet.Set storage bundleSet = _bundlesForPool[poolNftId];
|
63
|
+
require(
|
64
|
+
!bundleSet.contains(bundleNftId),
|
65
|
+
"ERROR:PL-020:BUNDLE_ALREADY_ADDED");
|
66
|
+
|
67
|
+
bundleSet.add(bundleNftId);
|
68
|
+
}
|
69
|
+
|
70
|
+
|
71
|
+
function getPoolInfo(
|
72
|
+
NftId nftId
|
73
|
+
) external view override returns (PoolInfo memory info) {
|
74
|
+
info = _poolInfo[nftId];
|
75
|
+
}
|
76
|
+
|
77
|
+
|
78
|
+
function getBundleCount(NftId poolNftId) external view override returns (uint256 bundleCount) {
|
79
|
+
return _bundlesForPool[poolNftId].getLength();
|
80
|
+
}
|
81
|
+
|
82
|
+
|
83
|
+
function getBundleNftId(NftId poolNftId, uint256 index) external view override returns (NftId bundleNftId) {
|
84
|
+
return _bundlesForPool[poolNftId].getElementAt(index);
|
85
|
+
}
|
86
|
+
|
87
|
+
}
|
@@ -1,28 +1,23 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
-
import {
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
|
6
|
-
import {
|
7
|
-
|
8
|
-
import {
|
9
|
-
import {UFixed} from "../../types/UFixed.sol";
|
10
|
-
import {Fee} from "../../types/Fee.sol";
|
6
|
+
import {NftId} from "../../../types/NftId.sol";
|
7
|
+
import {UFixed} from "../../../types/UFixed.sol";
|
8
|
+
import {Fee} from "../../../types/Fee.sol";
|
11
9
|
|
12
10
|
import {TokenHandler} from "./TokenHandler.sol";
|
13
11
|
|
14
12
|
interface ITreasury {
|
15
13
|
// TODO add events
|
16
14
|
// TODO add errors
|
17
|
-
}
|
18
15
|
|
19
|
-
interface ITreasuryModule is IRegistryLinked, ITreasury {
|
20
16
|
struct ProductSetup {
|
21
17
|
NftId productNftId;
|
22
18
|
NftId distributorNftId;
|
23
19
|
NftId poolNftId;
|
24
|
-
|
25
|
-
TokenHandler tokenHandler;
|
20
|
+
IERC20Metadata token;
|
26
21
|
address wallet;
|
27
22
|
Fee policyFee;
|
28
23
|
Fee processingFee;
|
@@ -31,7 +26,7 @@ interface ITreasuryModule is IRegistryLinked, ITreasury {
|
|
31
26
|
struct DistributorSetup {
|
32
27
|
NftId distributorNftId;
|
33
28
|
address wallet;
|
34
|
-
Fee
|
29
|
+
Fee commissionFee;
|
35
30
|
}
|
36
31
|
|
37
32
|
struct PoolSetup {
|
@@ -40,12 +35,15 @@ interface ITreasuryModule is IRegistryLinked, ITreasury {
|
|
40
35
|
Fee stakingFee;
|
41
36
|
Fee performanceFee;
|
42
37
|
}
|
38
|
+
}
|
39
|
+
|
40
|
+
interface ITreasuryModule is ITreasury {
|
43
41
|
|
44
42
|
function registerProduct(
|
45
43
|
NftId productNftId,
|
46
44
|
NftId distributorNftId,
|
47
45
|
NftId poolNftId,
|
48
|
-
|
46
|
+
IERC20Metadata token,
|
49
47
|
address wallet,
|
50
48
|
Fee memory policyFee,
|
51
49
|
Fee memory processingFee
|
@@ -70,10 +68,8 @@ interface ITreasuryModule is IRegistryLinked, ITreasury {
|
|
70
68
|
Fee memory performanceFee
|
71
69
|
) external;
|
72
70
|
|
73
|
-
function processPremium(NftId policyNftId, NftId productNftId) external;
|
74
|
-
|
75
71
|
function getTokenHandler(
|
76
|
-
NftId
|
72
|
+
NftId componentNftId
|
77
73
|
) external view returns (TokenHandler tokenHandler);
|
78
74
|
|
79
75
|
function getProductSetup(
|
@@ -88,4 +84,20 @@ interface ITreasuryModule is IRegistryLinked, ITreasury {
|
|
88
84
|
uint256 amount,
|
89
85
|
Fee memory fee
|
90
86
|
) external pure returns (uint256 feeAmount, uint256 netAmount);
|
87
|
+
|
88
|
+
function getFee(
|
89
|
+
UFixed fractionalFee,
|
90
|
+
uint256 fixedFee
|
91
|
+
) external pure returns (Fee memory fee);
|
92
|
+
|
93
|
+
function getZeroFee() external pure returns (Fee memory fee);
|
94
|
+
|
95
|
+
function getUFixed(
|
96
|
+
uint256 a
|
97
|
+
) external pure returns (UFixed);
|
98
|
+
|
99
|
+
function getUFixed(
|
100
|
+
uint256 a,
|
101
|
+
int8 exp
|
102
|
+
) external pure returns (UFixed);
|
91
103
|
}
|
@@ -0,0 +1,48 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
+
|
6
|
+
import {NftId} from "../../../types/NftId.sol";
|
7
|
+
|
8
|
+
contract TokenHandler {
|
9
|
+
NftId private _productNftId;
|
10
|
+
IERC20Metadata private _token;
|
11
|
+
|
12
|
+
constructor(
|
13
|
+
NftId productNftId,
|
14
|
+
address token
|
15
|
+
)
|
16
|
+
{
|
17
|
+
_productNftId = productNftId;
|
18
|
+
_token = IERC20Metadata(token);
|
19
|
+
}
|
20
|
+
|
21
|
+
// TODO add logging
|
22
|
+
function transfer(
|
23
|
+
address from,
|
24
|
+
address to,
|
25
|
+
uint256 amount
|
26
|
+
)
|
27
|
+
external // TODO add authz (only treasury/instance/product/pool/ service)
|
28
|
+
{
|
29
|
+
// TODO switch to oz safeTransferFrom
|
30
|
+
_token.transferFrom(from, to, amount);
|
31
|
+
}
|
32
|
+
|
33
|
+
function getProductNftId()
|
34
|
+
external
|
35
|
+
view
|
36
|
+
returns(NftId)
|
37
|
+
{
|
38
|
+
return _productNftId;
|
39
|
+
}
|
40
|
+
|
41
|
+
function getToken()
|
42
|
+
external
|
43
|
+
view
|
44
|
+
returns(IERC20Metadata)
|
45
|
+
{
|
46
|
+
return _token;
|
47
|
+
}
|
48
|
+
}
|
@@ -1,50 +1,48 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
-
import "@openzeppelin/contracts/token/ERC20/
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
5
|
|
6
|
-
import {NftId} from "
|
7
|
-
import {Fee,
|
8
|
-
import {UFixed, UFixedMathLib} from "
|
9
|
-
import {IProductComponent} from "../../components/IProduct.sol";
|
10
|
-
import {IPolicy, IPolicyModule} from "../policy/IPolicy.sol";
|
6
|
+
import {NftId} from "../../../types/NftId.sol";
|
7
|
+
import {Fee, FeeLib} from "../../../types/Fee.sol";
|
8
|
+
import {UFixed, UFixedMathLib} from "../../../types/UFixed.sol";
|
11
9
|
import {TokenHandler} from "./TokenHandler.sol";
|
12
10
|
import {ITreasuryModule} from "./ITreasury.sol";
|
13
|
-
import {TokenHandler} from "./TokenHandler.sol";
|
14
11
|
|
15
12
|
abstract contract TreasuryModule is ITreasuryModule {
|
16
13
|
mapping(NftId productNftId => ProductSetup setup) private _productSetup;
|
17
14
|
mapping(NftId distributorNftId => DistributorSetup setup)
|
18
15
|
private _distributorSetup;
|
19
16
|
mapping(NftId poolNftId => PoolSetup setup) private _poolSetup;
|
20
|
-
|
21
|
-
IPolicyModule private _policyModule;
|
22
|
-
|
23
|
-
constructor() {
|
24
|
-
_policyModule = IPolicyModule(address(this));
|
25
|
-
}
|
17
|
+
mapping(NftId componentNftId => TokenHandler tokenHanlder) _tokenHandler;
|
26
18
|
|
27
19
|
function registerProduct(
|
28
20
|
NftId productNftId,
|
29
21
|
NftId distributorNftId,
|
30
22
|
NftId poolNftId,
|
31
|
-
|
23
|
+
IERC20Metadata token,
|
32
24
|
address wallet,
|
33
25
|
Fee memory policyFee,
|
34
26
|
Fee memory processingFee
|
35
27
|
) external override // TODO add authz (only component module)
|
36
28
|
{
|
37
|
-
|
29
|
+
require(address(_tokenHandler[productNftId]) == address(0), "ERROR:TRS-010:TOKEN_HANDLER_ALREADY_REGISTERED");
|
30
|
+
require(address(_tokenHandler[poolNftId]) == address(0), "ERROR:TRS-011:TOKEN_HANDLER_ALREADY_REGISTERED");
|
31
|
+
require(address(_tokenHandler[distributorNftId]) == address(0), "ERROR:TRS-012:TOKEN_HANDLER_ALREADY_REGISTERED");
|
32
|
+
// TODO add additional validations
|
38
33
|
|
39
34
|
// deploy product specific handler contract
|
40
|
-
TokenHandler tokenHandler = new TokenHandler(address(token));
|
35
|
+
TokenHandler tokenHandler = new TokenHandler(productNftId, address(token));
|
36
|
+
_tokenHandler[productNftId] = tokenHandler;
|
37
|
+
_tokenHandler[poolNftId] = tokenHandler;
|
38
|
+
_tokenHandler[distributorNftId] = tokenHandler;
|
41
39
|
|
40
|
+
// create product setup
|
42
41
|
_productSetup[productNftId] = ProductSetup(
|
43
42
|
productNftId,
|
44
43
|
distributorNftId,
|
45
44
|
poolNftId,
|
46
45
|
token,
|
47
|
-
tokenHandler,
|
48
46
|
wallet,
|
49
47
|
policyFee,
|
50
48
|
processingFee
|
@@ -103,9 +101,9 @@ abstract contract TreasuryModule is ITreasuryModule {
|
|
103
101
|
}
|
104
102
|
|
105
103
|
function getTokenHandler(
|
106
|
-
NftId
|
104
|
+
NftId componentNftId
|
107
105
|
) external view override returns (TokenHandler tokenHandler) {
|
108
|
-
return
|
106
|
+
return _tokenHandler[componentNftId];
|
109
107
|
}
|
110
108
|
|
111
109
|
function getProductSetup(
|
@@ -120,49 +118,35 @@ abstract contract TreasuryModule is ITreasuryModule {
|
|
120
118
|
return _poolSetup[poolNftId];
|
121
119
|
}
|
122
120
|
|
123
|
-
function processPremium(
|
124
|
-
NftId policyNftId,
|
125
|
-
NftId productNftId
|
126
|
-
) external override // TODO add authz (only product service)
|
127
|
-
{
|
128
|
-
IPolicy.PolicyInfo memory policyInfo = _policyModule.getPolicyInfo(
|
129
|
-
policyNftId
|
130
|
-
);
|
131
|
-
require(
|
132
|
-
policyInfo.nftId == policyNftId,
|
133
|
-
"ERROR:TRS-020:POLICY_UNKNOWN"
|
134
|
-
);
|
135
|
-
|
136
|
-
ProductSetup memory product = _productSetup[productNftId];
|
137
|
-
TokenHandler tokenHandler = product.tokenHandler;
|
138
|
-
address policyOwner = this.getRegistry().getOwner(policyNftId);
|
139
|
-
address poolWallet = _poolSetup[product.poolNftId].wallet;
|
140
|
-
// TODO add validation
|
141
|
-
|
142
|
-
if (feeIsZero(product.policyFee)) {
|
143
|
-
tokenHandler.transfer(
|
144
|
-
policyOwner,
|
145
|
-
poolWallet,
|
146
|
-
policyInfo.premiumAmount
|
147
|
-
);
|
148
|
-
} else {
|
149
|
-
(uint256 feeAmount, uint256 netAmount) = calculateFeeAmount(
|
150
|
-
policyInfo.premiumAmount,
|
151
|
-
product.policyFee
|
152
|
-
);
|
153
|
-
|
154
|
-
tokenHandler.transfer(policyOwner, product.wallet, feeAmount);
|
155
|
-
tokenHandler.transfer(policyOwner, poolWallet, netAmount);
|
156
|
-
}
|
157
|
-
}
|
158
|
-
|
159
121
|
function calculateFeeAmount(
|
160
122
|
uint256 amount,
|
161
123
|
Fee memory fee
|
162
124
|
) public pure override returns (uint256 feeAmount, uint256 netAmount) {
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
125
|
+
return FeeLib.calculateFee(amount, fee);
|
126
|
+
}
|
127
|
+
|
128
|
+
function getFee(
|
129
|
+
UFixed fractionalFee,
|
130
|
+
uint256 fixedFee
|
131
|
+
) external pure override returns (Fee memory fee) {
|
132
|
+
return FeeLib.toFee(fractionalFee, fixedFee);
|
133
|
+
}
|
134
|
+
|
135
|
+
function getZeroFee() external pure override returns (Fee memory fee) {
|
136
|
+
return FeeLib.zeroFee();
|
137
|
+
}
|
138
|
+
|
139
|
+
function getUFixed(
|
140
|
+
uint256 a
|
141
|
+
) external pure override returns (UFixed) {
|
142
|
+
return UFixedMathLib.toUFixed(a);
|
143
|
+
}
|
144
|
+
|
145
|
+
function getUFixed(
|
146
|
+
uint256 a,
|
147
|
+
int8 exp
|
148
|
+
) external pure returns (UFixed)
|
149
|
+
{
|
150
|
+
return UFixedMathLib.toUFixed(a, exp);
|
167
151
|
}
|
168
152
|
}
|
@@ -0,0 +1,170 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
5
|
+
|
6
|
+
import {IRegistry} from "../../registry/IRegistry.sol";
|
7
|
+
import {IInstance} from "../IInstance.sol";
|
8
|
+
|
9
|
+
import {ITreasuryModule} from "../module/treasury/ITreasury.sol";
|
10
|
+
import {TreasuryModule} from "../module/treasury/TreasuryModule.sol";
|
11
|
+
import {IComponent, IComponentModule} from "../module/component/IComponent.sol";
|
12
|
+
import {IBaseComponent} from "../../components/IBaseComponent.sol";
|
13
|
+
import {IPoolComponent} from "../../components/IPoolComponent.sol";
|
14
|
+
|
15
|
+
import {IVersionable} from "../../shared/IVersionable.sol";
|
16
|
+
import {Versionable} from "../../shared/Versionable.sol";
|
17
|
+
|
18
|
+
import {RoleId, PRODUCT_OWNER_ROLE, POOL_OWNER_ROLE, ORACLE_OWNER_ROLE} from "../../types/RoleId.sol";
|
19
|
+
import {ObjectType, PRODUCT, ORACLE, POOL} from "../../types/ObjectType.sol";
|
20
|
+
import {StateId, ACTIVE, PAUSED} from "../../types/StateId.sol";
|
21
|
+
import {NftId, NftIdLib, zeroNftId} from "../../types/NftId.sol";
|
22
|
+
import {Fee} from "../../types/Fee.sol";
|
23
|
+
import {Version, VersionLib} from "../../types/Version.sol";
|
24
|
+
|
25
|
+
import {IProductComponent} from "../../components/IProductComponent.sol";
|
26
|
+
import {ServiceBase} from "../base/ServiceBase.sol";
|
27
|
+
import {IComponentOwnerService} from "./IComponentOwnerService.sol";
|
28
|
+
|
29
|
+
contract ComponentOwnerService is
|
30
|
+
ServiceBase,
|
31
|
+
IComponentOwnerService
|
32
|
+
{
|
33
|
+
using NftIdLib for NftId;
|
34
|
+
|
35
|
+
string public constant NAME = "ComponentOwnerService";
|
36
|
+
|
37
|
+
modifier onlyRegisteredComponent(IBaseComponent component) {
|
38
|
+
NftId nftId = _registry.getNftId(address(component));
|
39
|
+
require(nftId.gtz(), "ERROR:COS-001:COMPONENT_UNKNOWN");
|
40
|
+
_;
|
41
|
+
}
|
42
|
+
|
43
|
+
constructor(
|
44
|
+
address registry,
|
45
|
+
NftId registryNftId
|
46
|
+
) ServiceBase(registry, registryNftId) // solhint-disable-next-line no-empty-blocks
|
47
|
+
{
|
48
|
+
|
49
|
+
}
|
50
|
+
|
51
|
+
function getVersion()
|
52
|
+
public
|
53
|
+
pure
|
54
|
+
virtual override (IVersionable, Versionable)
|
55
|
+
returns(Version)
|
56
|
+
{
|
57
|
+
return VersionLib.toVersion(3,0,0);
|
58
|
+
}
|
59
|
+
|
60
|
+
function getName() external pure override returns(string memory name) {
|
61
|
+
return NAME;
|
62
|
+
}
|
63
|
+
|
64
|
+
function getRoleForType(
|
65
|
+
ObjectType cType
|
66
|
+
) public pure override returns (RoleId role) {
|
67
|
+
if (cType == PRODUCT()) {
|
68
|
+
return PRODUCT_OWNER_ROLE();
|
69
|
+
}
|
70
|
+
if (cType == POOL()) {
|
71
|
+
return POOL_OWNER_ROLE();
|
72
|
+
}
|
73
|
+
if (cType == ORACLE()) {
|
74
|
+
return ORACLE_OWNER_ROLE();
|
75
|
+
}
|
76
|
+
}
|
77
|
+
|
78
|
+
function register(
|
79
|
+
IBaseComponent component
|
80
|
+
) external override returns (NftId nftId) {
|
81
|
+
address initialOwner = component.getOwner();
|
82
|
+
require(
|
83
|
+
msg.sender == address(component),
|
84
|
+
"ERROR:COS-003:NOT_COMPONENT"
|
85
|
+
);
|
86
|
+
|
87
|
+
IInstance instance = component.getInstance();
|
88
|
+
ObjectType objectType = component.getType();
|
89
|
+
RoleId typeRole = getRoleForType(objectType);
|
90
|
+
require(
|
91
|
+
instance.hasRole(typeRole, initialOwner),
|
92
|
+
"ERROR:CMP-004:TYPE_ROLE_MISSING"
|
93
|
+
);
|
94
|
+
|
95
|
+
nftId = _registry.register(address(component));
|
96
|
+
IERC20Metadata token = component.getToken();
|
97
|
+
|
98
|
+
instance.registerComponent(
|
99
|
+
nftId,
|
100
|
+
objectType,
|
101
|
+
token);
|
102
|
+
|
103
|
+
address wallet = component.getWallet();
|
104
|
+
|
105
|
+
// component type specific registration actions
|
106
|
+
if (component.getType() == PRODUCT()) {
|
107
|
+
IProductComponent product = IProductComponent(address(component));
|
108
|
+
NftId poolNftId = product.getPoolNftId();
|
109
|
+
require(poolNftId.gtz(), "ERROR:CMP-005:POOL_UNKNOWN");
|
110
|
+
// validate pool token and product token are same
|
111
|
+
|
112
|
+
// register with tresury
|
113
|
+
// implement and add validation
|
114
|
+
NftId distributorNftId = zeroNftId();
|
115
|
+
instance.registerProduct(
|
116
|
+
nftId,
|
117
|
+
distributorNftId,
|
118
|
+
poolNftId,
|
119
|
+
token,
|
120
|
+
wallet,
|
121
|
+
product.getPolicyFee(),
|
122
|
+
product.getProcessingFee()
|
123
|
+
);
|
124
|
+
} else if (component.getType() == POOL()) {
|
125
|
+
IPoolComponent pool = IPoolComponent(address(component));
|
126
|
+
|
127
|
+
// register with pool
|
128
|
+
instance.registerPool(
|
129
|
+
nftId,
|
130
|
+
pool.isVerifying(),
|
131
|
+
pool.getCollateralizationLevel());
|
132
|
+
|
133
|
+
// register with tresury
|
134
|
+
instance.registerPool(
|
135
|
+
nftId,
|
136
|
+
wallet,
|
137
|
+
pool.getStakingFee(),
|
138
|
+
pool.getPerformanceFee());
|
139
|
+
}
|
140
|
+
// TODO add distribution
|
141
|
+
}
|
142
|
+
|
143
|
+
function lock(
|
144
|
+
IBaseComponent component
|
145
|
+
) external override onlyRegisteredComponent(component) {
|
146
|
+
IInstance instance = component.getInstance();
|
147
|
+
IComponent.ComponentInfo memory info = instance.getComponentInfo(
|
148
|
+
component.getNftId()
|
149
|
+
);
|
150
|
+
require(info.nftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
|
151
|
+
|
152
|
+
info.state = PAUSED();
|
153
|
+
// setComponentInfo checks for valid state changes
|
154
|
+
instance.setComponentInfo(info);
|
155
|
+
}
|
156
|
+
|
157
|
+
function unlock(
|
158
|
+
IBaseComponent component
|
159
|
+
) external override onlyRegisteredComponent(component) {
|
160
|
+
IInstance instance = component.getInstance();
|
161
|
+
IComponent.ComponentInfo memory info = instance.getComponentInfo(
|
162
|
+
component.getNftId()
|
163
|
+
);
|
164
|
+
require(info.nftId.gtz(), "ERROR_COMPONENT_UNKNOWN");
|
165
|
+
|
166
|
+
info.state = ACTIVE();
|
167
|
+
// setComponentInfo checks for valid state changes
|
168
|
+
instance.setComponentInfo(info);
|
169
|
+
}
|
170
|
+
}
|