@etherisc/gif-next 0.0.2-c4efd5e → 0.0.2-c576a00-897
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 +85 -1
- package/artifacts/contracts/components/BaseComponent.sol/BaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{Component.sol/Component.json → BaseComponent.sol/BaseComponent.json} +48 -53
- package/artifacts/contracts/components/IBaseComponent.sol/IBaseComponent.dbg.json +4 -0
- package/artifacts/contracts/components/{IPool.sol/IPoolComponent.json → IBaseComponent.sol/IBaseComponent.json} +48 -53
- 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/{IProduct.sol → IProductComponent.sol}/IProductComponent.json +139 -52
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +218 -44
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +144 -70
- 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/kvstore/BundleModuleStore.sol/BundleModuleStore.dbg.json +4 -0
- package/artifacts/contracts/experiment/kvstore/BundleModuleStore.sol/BundleModuleStore.json +543 -0
- package/artifacts/contracts/experiment/kvstore/IBundle.sol/IBundle.dbg.json +4 -0
- package/artifacts/contracts/experiment/kvstore/IBundle.sol/IBundle.json +10 -0
- package/artifacts/contracts/experiment/kvstore/KeyMapper.sol/KeyMapper.dbg.json +4 -0
- package/artifacts/contracts/experiment/kvstore/KeyMapper.sol/KeyMapper.json +185 -0
- package/artifacts/contracts/experiment/kvstore/KeyValueStore.sol/KeyValueStore.dbg.json +4 -0
- package/artifacts/contracts/experiment/kvstore/KeyValueStore.sol/KeyValueStore.json +383 -0
- package/artifacts/contracts/experiment/kvstore/KvStore.sol/KvStore.dbg.json +4 -0
- package/artifacts/contracts/experiment/kvstore/KvStore.sol/KvStore.json +1064 -0
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +59 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +124 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +74 -0
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +124 -0
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +4 -0
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +207 -0
- 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 +1414 -289
- 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/IServiceLinked.sol/IServiceLinked.dbg.json +4 -0
- package/artifacts/contracts/instance/{access/IAccess.sol/IAccessComponentTypeRoles.json → IServiceLinked.sol/IServiceLinked.json} +14 -14
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1715 -345
- package/artifacts/contracts/instance/InstanceBase.sol/InstanceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/{component/ComponentModule.sol/ComponentModule.json → InstanceBase.sol/InstanceBase.json} +128 -142
- 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 +276 -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 +276 -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 +40 -97
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.dbg.json +4 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycle.json +134 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/lifecycle/ILifecycle.sol/ILifecycleModule.json +182 -0
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/lifecycle/LifecycleModule.sol/LifecycleModule.json +221 -0
- 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 +142 -112
- package/artifacts/contracts/instance/module/policy/PolicyModule.sol/PolicyModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{policy → module/policy}/PolicyModule.sol/PolicyModule.json +142 -112
- 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 +57 -57
- package/artifacts/contracts/instance/module/pool/PoolModule.sol/PoolModule.dbg.json +4 -0
- package/artifacts/contracts/instance/{pool → module/pool}/PoolModule.sol/PoolModule.json +50 -63
- 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 +167 -0
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/risk/RiskModule.sol/RiskModule.json +185 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasury.json +10 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.dbg.json +4 -0
- package/artifacts/contracts/instance/module/treasury/ITreasury.sol/ITreasuryModule.json +533 -0
- 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/module/treasury/TreasuryModule.sol/TreasuryModule.json +533 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentOwnerService.sol/ComponentOwnerService.json +491 -0
- package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ComponentServiceBase.sol/ComponentServiceBase.json +300 -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/IService.sol/IService.dbg.json +4 -0
- package/artifacts/contracts/instance/{component/IComponent.sol/IComponentContract.json → service/IService.sol/IService.json} +148 -27
- 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/instance/service/ServiceBase.sol/ServiceBase.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ServiceBase.sol/ServiceBase.json +300 -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 +103 -77
- 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 +194 -69
- 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 +18 -63
- 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 +18 -63
- 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 +82 -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/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 +40 -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/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +4 -0
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +10 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +4 -0
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +92 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/StateId.sol/StateIdLib.json +92 -0
- package/artifacts/contracts/types/Timestamp.sol/TimestampLib.dbg.json +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 +58 -58
- 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 +89 -0
- package/contracts/components/IBaseComponent.sol +19 -0
- package/contracts/components/IPoolComponent.sol +57 -0
- package/contracts/components/IProductComponent.sol +19 -0
- package/contracts/components/Pool.sol +162 -10
- package/contracts/components/Product.sol +75 -13
- package/contracts/experiment/kvstore/BundleModuleStore.sol +93 -0
- package/contracts/experiment/kvstore/IBundle.sol +22 -0
- package/contracts/experiment/kvstore/KeyMapper.sol +40 -0
- package/contracts/experiment/kvstore/KeyValueStore.sol +156 -0
- package/contracts/experiment/kvstore/KvStore.sol +195 -0
- package/contracts/experiment/statemachine/Dummy.sol +27 -0
- package/contracts/experiment/statemachine/ISM.sol +25 -0
- package/contracts/experiment/statemachine/README.md +112 -0
- package/contracts/experiment/statemachine/SM.sol +57 -0
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +31 -0
- package/contracts/instance/IInstance.sol +43 -8
- package/contracts/instance/IInstanceLinked.sol +8 -0
- package/contracts/instance/IServiceLinked.sol +12 -0
- package/contracts/instance/Instance.sol +45 -43
- package/contracts/instance/InstanceBase.sol +71 -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 +228 -0
- package/contracts/instance/module/bundle/IBundle.sol +53 -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 +103 -0
- package/contracts/instance/module/component/IComponent.sol +53 -0
- package/contracts/instance/module/lifecycle/ILifecycle.sol +47 -0
- package/contracts/instance/module/lifecycle/LifecycleModule.sol +89 -0
- package/contracts/instance/module/policy/IPolicy.sol +60 -0
- package/contracts/instance/module/policy/PolicyModule.sol +84 -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 +39 -0
- package/contracts/instance/module/risk/RiskModule.sol +55 -0
- package/contracts/instance/module/treasury/ITreasury.sol +103 -0
- package/contracts/instance/module/treasury/TokenHandler.sol +48 -0
- package/contracts/instance/module/treasury/TreasuryModule.sol +152 -0
- package/contracts/instance/service/ComponentOwnerService.sol +171 -0
- package/contracts/instance/service/ComponentServiceBase.sol +41 -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/IService.sol +15 -0
- package/contracts/instance/service/PoolService.sol +123 -0
- package/contracts/instance/service/ProductService.sol +355 -0
- package/contracts/instance/service/ServiceBase.sol +39 -0
- package/contracts/registry/ChainNft.sol +61 -37
- package/contracts/registry/IRegistry.sol +27 -50
- package/contracts/registry/IRegistryLinked.sol +8 -0
- package/contracts/registry/Registry.sol +281 -109
- 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/types/AddressSet.sol +58 -0
- package/contracts/types/Blocknumber.sol +16 -0
- package/contracts/types/Fee.sol +51 -0
- package/contracts/types/NftId.sol +7 -1
- package/contracts/types/NftIdSet.sol +60 -0
- package/contracts/types/ObjectType.sol +119 -0
- package/contracts/types/RiskId.sol +26 -0
- package/contracts/types/RoleId.sol +36 -0
- package/contracts/types/StateId.sol +95 -0
- package/contracts/types/Timestamp.sol +22 -1
- package/contracts/types/UFixed.sol +15 -14
- package/contracts/types/Version.sol +95 -0
- package/package.json +13 -6
- 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/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/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 -147
- 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 -94
- package/artifacts/contracts/instance/component/IComponent.sol/IInstanceLinked.dbg.json +0 -4
- 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 -114
- package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.dbg.json +0 -4
- package/artifacts/contracts/instance/product/ProductService.sol/ProductModule.json +0 -75
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/instance/product/ProductService.sol/ProductService.json +0 -167
- 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 -60
- package/contracts/components/IPool.sol +0 -9
- package/contracts/components/IProduct.sol +0 -9
- package/contracts/instance/access/Access.sol +0 -165
- package/contracts/instance/access/IAccess.sol +0 -63
- package/contracts/instance/component/ComponentModule.sol +0 -213
- package/contracts/instance/component/IComponent.sol +0 -73
- package/contracts/instance/policy/IPolicy.sol +0 -51
- package/contracts/instance/policy/PolicyModule.sol +0 -91
- package/contracts/instance/pool/IPoolModule.sol +0 -29
- package/contracts/instance/pool/PoolModule.sol +0 -73
- package/contracts/instance/product/IProductService.sol +0 -36
- package/contracts/instance/product/ProductService.sol +0 -112
@@ -0,0 +1,57 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {NftId} from "../types/NftId.sol";
|
5
|
+
import {Fee} from "../types/Fee.sol";
|
6
|
+
import {UFixed} from "../types/UFixed.sol";
|
7
|
+
import {IBaseComponent} from "./IBaseComponent.sol";
|
8
|
+
|
9
|
+
interface IPoolComponent is IBaseComponent {
|
10
|
+
|
11
|
+
event LogUnderwrittenByPool(NftId policyNftId, uint256 collateralizationAmount, address pool);
|
12
|
+
|
13
|
+
/**
|
14
|
+
* @dev creates a new bundle for this pool.
|
15
|
+
*/
|
16
|
+
function createBundle(
|
17
|
+
uint256 initialAmount,
|
18
|
+
uint256 lifetime,
|
19
|
+
bytes memory filter
|
20
|
+
) external returns(NftId bundleNftId);
|
21
|
+
|
22
|
+
/**
|
23
|
+
* @dev this is a callback function that is called by the product service when underwriting a policy.
|
24
|
+
* the pool has the option to check the details and object to underwriting by reverting.
|
25
|
+
* the function is only called for "active" pools that ask to be involved/notified
|
26
|
+
* by product related state changes.
|
27
|
+
*/
|
28
|
+
function underwrite(
|
29
|
+
NftId policyNftId,
|
30
|
+
bytes memory policyData,
|
31
|
+
bytes memory bundleFilter,
|
32
|
+
uint256 collateralizationAmount
|
33
|
+
) external;
|
34
|
+
|
35
|
+
/**
|
36
|
+
* @dev returns true iff the policy application data in policyData matches
|
37
|
+
* with the bundle filter criteria encoded in bundleFilter.
|
38
|
+
*/
|
39
|
+
function policyMatchesBundle(
|
40
|
+
bytes memory policyData,
|
41
|
+
bytes memory bundleFilter
|
42
|
+
)
|
43
|
+
external
|
44
|
+
view
|
45
|
+
returns (bool isMatching);
|
46
|
+
|
47
|
+
function isVerifying() external view returns (bool verifying);
|
48
|
+
|
49
|
+
function getCollateralizationLevel() external view returns (UFixed collateralizationLevel);
|
50
|
+
|
51
|
+
function getStakingFee() external view returns (Fee memory stakingFee);
|
52
|
+
|
53
|
+
function getPerformanceFee()
|
54
|
+
external
|
55
|
+
view
|
56
|
+
returns (Fee memory performanceFee);
|
57
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {NftId} from "../types/NftId.sol";
|
5
|
+
import {Fee} from "../types/Fee.sol";
|
6
|
+
import {IBaseComponent} from "./IBaseComponent.sol";
|
7
|
+
|
8
|
+
interface IProductComponent is IBaseComponent {
|
9
|
+
function setFees(
|
10
|
+
Fee memory policyFee,
|
11
|
+
Fee memory processingFee
|
12
|
+
) external;
|
13
|
+
|
14
|
+
function getPoolNftId() external view returns (NftId poolNftId);
|
15
|
+
|
16
|
+
function getPolicyFee() external view returns (Fee memory policyFee);
|
17
|
+
|
18
|
+
function getProcessingFee() external view returns (Fee memory processingFee);
|
19
|
+
}
|
@@ -1,22 +1,174 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
-
import {
|
5
|
-
import {
|
4
|
+
import {ObjectType, POOL} from "../types/ObjectType.sol";
|
5
|
+
import {IProductService} from "../instance/service/IProductService.sol";
|
6
|
+
import {IPoolService} from "../instance/service/IPoolService.sol";
|
7
|
+
import {NftId} from "../types/NftId.sol";
|
8
|
+
import {Fee} from "../types/Fee.sol";
|
9
|
+
import {UFixed} from "../types/UFixed.sol";
|
10
|
+
import {IPoolComponent} from "./IPoolComponent.sol";
|
11
|
+
import {BaseComponent} from "./BaseComponent.sol";
|
12
|
+
|
13
|
+
contract Pool is BaseComponent, IPoolComponent {
|
14
|
+
|
15
|
+
bool internal _isVerifying;
|
16
|
+
UFixed internal _collateralizationLevel;
|
17
|
+
|
18
|
+
// may be used to interact with instance by derived contracts
|
19
|
+
IPoolService internal _poolService;
|
20
|
+
|
21
|
+
// only relevant to protect callback functions for "active" pools
|
22
|
+
IProductService private _productService;
|
23
|
+
|
24
|
+
modifier onlyPoolService() {
|
25
|
+
require(
|
26
|
+
msg.sender == address(_poolService),
|
27
|
+
"ERROR:POL-001:NOT_POOL_SERVICE");
|
28
|
+
_;
|
29
|
+
}
|
30
|
+
|
31
|
+
modifier onlyProductService() {
|
32
|
+
require(
|
33
|
+
msg.sender == address(_productService),
|
34
|
+
"ERROR:POL-002:NOT_PRODUCT_SERVICE");
|
35
|
+
_;
|
36
|
+
}
|
6
37
|
|
7
|
-
contract Pool is Component, IPoolComponent {
|
8
38
|
constructor(
|
9
39
|
address registry,
|
10
|
-
|
11
|
-
|
40
|
+
NftId instanceNftId,
|
41
|
+
// TODO refactor into tokenNftId
|
42
|
+
address token,
|
43
|
+
bool verifying,
|
44
|
+
UFixed collateralizationLevel
|
45
|
+
)
|
46
|
+
BaseComponent(registry, instanceNftId, token)
|
47
|
+
{
|
48
|
+
_isVerifying = verifying;
|
49
|
+
// TODO add validation
|
50
|
+
_collateralizationLevel = collateralizationLevel;
|
12
51
|
|
13
|
-
|
14
|
-
|
15
|
-
|
52
|
+
_poolService = _instance.getPoolService();
|
53
|
+
_productService = _instance.getProductService();
|
54
|
+
}
|
55
|
+
|
56
|
+
function createBundle(
|
57
|
+
uint256 initialAmount,
|
58
|
+
uint256 lifetime,
|
59
|
+
bytes memory filter
|
60
|
+
)
|
61
|
+
external
|
62
|
+
virtual override
|
63
|
+
returns(NftId bundleNftId)
|
64
|
+
{
|
65
|
+
address owner = msg.sender;
|
66
|
+
bundleNftId = _poolService.createBundle(
|
67
|
+
owner,
|
68
|
+
initialAmount,
|
69
|
+
lifetime,
|
70
|
+
filter
|
71
|
+
);
|
72
|
+
|
73
|
+
// TODO add logging
|
74
|
+
}
|
75
|
+
|
76
|
+
/**
|
77
|
+
* @dev see {IPool.underwrite}.
|
78
|
+
* Default implementation that only writes a {LogUnderwrittenByPool} entry.
|
79
|
+
*/
|
80
|
+
function underwrite(
|
81
|
+
NftId policyNftId,
|
82
|
+
bytes memory policyData,
|
83
|
+
bytes memory bundleFilter,
|
84
|
+
uint256 collateralizationAmount
|
85
|
+
)
|
86
|
+
external
|
87
|
+
onlyProductService
|
88
|
+
virtual override
|
89
|
+
{
|
90
|
+
_underwrite(policyNftId, policyData, bundleFilter, collateralizationAmount);
|
91
|
+
}
|
92
|
+
|
93
|
+
/**
|
94
|
+
* @dev see {IPoolComponent.policyMatchesBundle}.
|
95
|
+
* Default implementation always returns true
|
96
|
+
*/
|
97
|
+
function policyMatchesBundle(
|
98
|
+
bytes memory, // policyData
|
99
|
+
bytes memory // bundleFilter
|
100
|
+
)
|
101
|
+
public
|
102
|
+
view
|
103
|
+
virtual override
|
104
|
+
returns (bool isMatching)
|
105
|
+
{
|
106
|
+
return true;
|
107
|
+
}
|
108
|
+
|
109
|
+
|
110
|
+
function isVerifying() external view override returns (bool verifying) {
|
111
|
+
return _isVerifying;
|
112
|
+
}
|
113
|
+
|
114
|
+
function getCollateralizationLevel() external view override returns (UFixed collateralizationLevel) {
|
115
|
+
return _collateralizationLevel;
|
116
|
+
}
|
117
|
+
|
118
|
+
function _underwrite(
|
119
|
+
NftId policyNftId,
|
120
|
+
bytes memory policyData,
|
121
|
+
bytes memory bundleFilter,
|
122
|
+
uint256 collateralizationAmount
|
123
|
+
)
|
124
|
+
internal
|
125
|
+
{
|
126
|
+
require(
|
127
|
+
policyMatchesBundle(policyData, bundleFilter),
|
128
|
+
"ERROR:POL-020:POLICY_BUNDLE_MISMATCH"
|
129
|
+
);
|
130
|
+
|
131
|
+
emit LogUnderwrittenByPool(policyNftId, collateralizationAmount, address(this));
|
132
|
+
}
|
133
|
+
|
134
|
+
function _createBundle(
|
135
|
+
address bundleOwner,
|
136
|
+
uint256 amount,
|
137
|
+
uint256 lifetime,
|
138
|
+
bytes calldata filter
|
139
|
+
)
|
140
|
+
internal
|
141
|
+
returns(NftId bundleNftId)
|
142
|
+
{
|
143
|
+
bundleNftId = _poolService.createBundle(
|
144
|
+
bundleOwner,
|
145
|
+
amount,
|
146
|
+
lifetime,
|
147
|
+
filter
|
148
|
+
);
|
149
|
+
}
|
150
|
+
|
151
|
+
// from pool component
|
152
|
+
function getStakingFee()
|
153
|
+
external
|
154
|
+
view
|
155
|
+
override
|
156
|
+
returns (Fee memory stakingFee)
|
157
|
+
{
|
158
|
+
return _instance.getPoolSetup(getNftId()).stakingFee;
|
159
|
+
}
|
160
|
+
|
161
|
+
function getPerformanceFee()
|
162
|
+
external
|
163
|
+
view
|
164
|
+
override
|
165
|
+
returns (Fee memory performanceFee)
|
166
|
+
{
|
167
|
+
return _instance.getPoolSetup(getNftId()).performanceFee;
|
16
168
|
}
|
17
169
|
|
18
170
|
// from registerable
|
19
|
-
function
|
20
|
-
return
|
171
|
+
function getType() public pure override returns (ObjectType) {
|
172
|
+
return POOL();
|
21
173
|
}
|
22
174
|
}
|
@@ -1,20 +1,25 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
-
import {IProductService} from "../instance/
|
5
|
-
import {
|
6
|
-
import {IProductComponent} from "./IProduct.sol";
|
4
|
+
import {IProductService} from "../instance/service/IProductService.sol";
|
5
|
+
import {IProductComponent} from "./IProductComponent.sol";
|
7
6
|
import {NftId} from "../types/NftId.sol";
|
7
|
+
import {ObjectType, PRODUCT} from "../types/ObjectType.sol";
|
8
|
+
import {Timestamp} from "../types/Timestamp.sol";
|
9
|
+
import {Fee} from "../types/Fee.sol";
|
10
|
+
import {BaseComponent} from "./BaseComponent.sol";
|
8
11
|
|
9
|
-
contract Product is
|
12
|
+
contract Product is BaseComponent, IProductComponent {
|
10
13
|
IProductService private _productService;
|
11
14
|
address private _pool;
|
12
15
|
|
13
16
|
constructor(
|
14
17
|
address registry,
|
15
|
-
|
18
|
+
NftId instanceNftid,
|
19
|
+
address token,
|
16
20
|
address pool
|
17
|
-
)
|
21
|
+
) BaseComponent(registry, instanceNftid, token) {
|
22
|
+
// TODO add validation
|
18
23
|
_productService = _instance.getProductService();
|
19
24
|
_pool = pool;
|
20
25
|
}
|
@@ -35,21 +40,78 @@ contract Product is Component, IProductComponent {
|
|
35
40
|
);
|
36
41
|
}
|
37
42
|
|
38
|
-
function _underwrite(
|
39
|
-
|
43
|
+
function _underwrite(
|
44
|
+
NftId policyNftId,
|
45
|
+
bool requirePremiumPayment,
|
46
|
+
Timestamp activateAt
|
47
|
+
)
|
48
|
+
internal
|
49
|
+
{
|
50
|
+
_productService.underwrite(
|
51
|
+
policyNftId,
|
52
|
+
requirePremiumPayment,
|
53
|
+
activateAt);
|
54
|
+
}
|
55
|
+
|
56
|
+
function _collectPremium(
|
57
|
+
NftId policyNftId,
|
58
|
+
Timestamp activateAt
|
59
|
+
)
|
60
|
+
internal
|
61
|
+
{
|
62
|
+
_productService.collectPremium(
|
63
|
+
policyNftId,
|
64
|
+
activateAt);
|
65
|
+
}
|
66
|
+
|
67
|
+
function _activate(
|
68
|
+
NftId policyNftId,
|
69
|
+
Timestamp activateAt
|
70
|
+
)
|
71
|
+
internal
|
72
|
+
{
|
73
|
+
_productService.activate(
|
74
|
+
policyNftId,
|
75
|
+
activateAt);
|
40
76
|
}
|
41
77
|
|
42
78
|
function getPoolNftId() external view override returns (NftId poolNftId) {
|
43
79
|
return _registry.getNftId(_pool);
|
44
80
|
}
|
45
81
|
|
46
|
-
// from
|
47
|
-
function
|
48
|
-
|
82
|
+
// from product component
|
83
|
+
function setFees(
|
84
|
+
Fee memory policyFee,
|
85
|
+
Fee memory processingFee
|
86
|
+
)
|
87
|
+
external
|
88
|
+
onlyOwner
|
89
|
+
override
|
90
|
+
{
|
91
|
+
_productService.setFees(policyFee, processingFee);
|
92
|
+
}
|
93
|
+
|
94
|
+
|
95
|
+
function getPolicyFee()
|
96
|
+
external
|
97
|
+
view
|
98
|
+
override
|
99
|
+
returns (Fee memory policyFee)
|
100
|
+
{
|
101
|
+
return _instance.getProductSetup(getNftId()).policyFee;
|
102
|
+
}
|
103
|
+
|
104
|
+
function getProcessingFee()
|
105
|
+
external
|
106
|
+
view
|
107
|
+
override
|
108
|
+
returns (Fee memory processingFee)
|
109
|
+
{
|
110
|
+
return _instance.getProductSetup(getNftId()).processingFee;
|
49
111
|
}
|
50
112
|
|
51
113
|
// from registerable
|
52
|
-
function
|
53
|
-
return
|
114
|
+
function getType() public pure override returns (ObjectType) {
|
115
|
+
return PRODUCT();
|
54
116
|
}
|
55
117
|
}
|
@@ -0,0 +1,93 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
/*
|
5
|
+
|
6
|
+
from test_brownie.util import contract_from_address
|
7
|
+
fa = {'from': accounts[0]}
|
8
|
+
nl = NftIdLib.deploy(fa)
|
9
|
+
tl = TimestampLib.deploy(fa)
|
10
|
+
bm = BundleModuleStore.deploy(fa)
|
11
|
+
kv = contract_from_address(KeyValueStore, bm.getStore())
|
12
|
+
|
13
|
+
bi = bm.createBundleInfo(123456, 10**(5+6), kv.s2b('some filter')) # gas: 362979
|
14
|
+
tx1 = bm.createBundleInfo(bi, fa)
|
15
|
+
|
16
|
+
bi.dict()['lockedAmount'] = 42
|
17
|
+
tx2 = bm.updateBundleInfo(bi, {'from': accounts[1]})
|
18
|
+
|
19
|
+
bik32 = tx1.return_value
|
20
|
+
bik = bm.toKey(bik32)
|
21
|
+
|
22
|
+
tx1.info()
|
23
|
+
tx2.info()
|
24
|
+
|
25
|
+
*/
|
26
|
+
|
27
|
+
import {NftId, toNftId} from "../../types/NftId.sol";
|
28
|
+
import {ObjectType, BUNDLE} from "../../types/ObjectType.sol";
|
29
|
+
import {StateId, ACTIVE} from "../../types/StateId.sol";
|
30
|
+
import {Timestamp, blockTimestamp, zeroTimestamp} from "../../types/Timestamp.sol";
|
31
|
+
|
32
|
+
import {IBundle} from "./IBundle.sol";
|
33
|
+
import {KeyId, KeyMapper} from "./KeyMapper.sol";
|
34
|
+
import {KeyValueStore} from "./KeyValueStore.sol";
|
35
|
+
|
36
|
+
contract BundleModuleStore is KeyMapper, IBundle {
|
37
|
+
|
38
|
+
KeyValueStore private _store;
|
39
|
+
|
40
|
+
constructor() {
|
41
|
+
_store = new KeyValueStore();
|
42
|
+
}
|
43
|
+
|
44
|
+
function createBundleInfo(IBundle.BundleInfo memory info) public returns (bytes32 key) {
|
45
|
+
key = toBundleKey32(info.nftId);
|
46
|
+
_store.create(key, BUNDLE(), abi.encode(info));
|
47
|
+
}
|
48
|
+
|
49
|
+
function updateBundleInfo(IBundle.BundleInfo memory info) public {
|
50
|
+
bytes32 key = toBundleKey32(info.nftId);
|
51
|
+
_store.update(key, abi.encode(info));
|
52
|
+
}
|
53
|
+
|
54
|
+
function getBundleInfo(bytes32 key) public view returns (IBundle.BundleInfo memory) {
|
55
|
+
bytes memory data = _store.getData(key);
|
56
|
+
return abi.decode(data, (IBundle.BundleInfo));
|
57
|
+
}
|
58
|
+
|
59
|
+
function toBundleKey32(NftId bundleNftId) public pure returns (bytes32 key) {
|
60
|
+
return toKey32(BUNDLE(), toKeyId(bundleNftId));
|
61
|
+
}
|
62
|
+
|
63
|
+
function toKeyId(NftId nftId) public pure returns (KeyId keyId) {
|
64
|
+
uint248 intNftId = nftId.toInt();
|
65
|
+
keyId = KeyId.wrap(bytes31(intNftId));
|
66
|
+
}
|
67
|
+
|
68
|
+
function createBundleInfo(
|
69
|
+
uint256 bundleId,
|
70
|
+
uint256 amount,
|
71
|
+
bytes calldata filter
|
72
|
+
)
|
73
|
+
public
|
74
|
+
view
|
75
|
+
returns(IBundle.BundleInfo memory info)
|
76
|
+
{
|
77
|
+
uint256 lifetime = 30 * 24 * 3600;
|
78
|
+
return IBundle.BundleInfo(
|
79
|
+
toNftId(bundleId),
|
80
|
+
toNftId(123456),
|
81
|
+
ACTIVE(),
|
82
|
+
filter,
|
83
|
+
amount, // capital amount
|
84
|
+
0, // locked amount
|
85
|
+
amount, // balance
|
86
|
+
blockTimestamp().addSeconds(lifetime), // expiredAt
|
87
|
+
zeroTimestamp()); // closedAt
|
88
|
+
}
|
89
|
+
|
90
|
+
function getStore() public view returns (KeyValueStore) {
|
91
|
+
return _store;
|
92
|
+
}
|
93
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {NftId} from "../../types/NftId.sol";
|
5
|
+
import {StateId} from "../../types/StateId.sol";
|
6
|
+
import {Timestamp} from "../../types/Timestamp.sol";
|
7
|
+
import {Blocknumber} from "../../types/Blocknumber.sol";
|
8
|
+
|
9
|
+
interface IBundle {
|
10
|
+
|
11
|
+
struct BundleInfo {
|
12
|
+
NftId nftId;
|
13
|
+
NftId poolNftId;
|
14
|
+
StateId state; // active, paused, closed (expriy only implicit)
|
15
|
+
bytes filter; // required conditions for applications to be considered for collateralization by this bundle
|
16
|
+
uint256 capitalAmount; // net investment capital amount (<= balance)
|
17
|
+
uint256 lockedAmount; // capital amount linked to collateralizaion of non-closed policies (<= balance)
|
18
|
+
uint256 balanceAmount; // total amount of funds: net investment capital + net premiums - payouts
|
19
|
+
Timestamp expiredAt; // no new policies
|
20
|
+
Timestamp closedAt;
|
21
|
+
}
|
22
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
import {ObjectType, BUNDLE, RISK} from "../../types/ObjectType.sol";
|
5
|
+
|
6
|
+
type KeyId is bytes31;
|
7
|
+
|
8
|
+
contract KeyMapper {
|
9
|
+
|
10
|
+
uint8 public constant TYPE_SHIFT = 31 * 8;
|
11
|
+
uint8 public constant ID_SHIFT = uint8(32 * 8 - TYPE_SHIFT);
|
12
|
+
bytes32 public constant TYPE_MASK = bytes32(bytes1(type(uint8).max)); // first byte in bytes32
|
13
|
+
bytes32 public constant ID_MASK = bytes32(~TYPE_MASK); // remaining bytes in bytes32
|
14
|
+
|
15
|
+
struct Key {
|
16
|
+
ObjectType objectType;
|
17
|
+
KeyId id;
|
18
|
+
}
|
19
|
+
|
20
|
+
function toKey(ObjectType objectType, KeyId id) public pure returns(Key memory) {
|
21
|
+
return Key(objectType, id);
|
22
|
+
}
|
23
|
+
|
24
|
+
function toKey(bytes32 key) public pure returns (Key memory) {
|
25
|
+
ObjectType objectType = ObjectType.wrap(uint8(uint256(key & TYPE_MASK) >> TYPE_SHIFT));
|
26
|
+
KeyId id = KeyId.wrap(bytes31((key & ID_MASK) << ID_SHIFT));
|
27
|
+
return Key(objectType, id);
|
28
|
+
}
|
29
|
+
|
30
|
+
function toKey32(Key memory key) public pure returns(bytes32) {
|
31
|
+
return toKey32(key.objectType, key.id);
|
32
|
+
}
|
33
|
+
|
34
|
+
function toKey32(ObjectType objectType, KeyId id) public pure returns(bytes32) {
|
35
|
+
uint256 uintObjectType = ObjectType.unwrap(objectType);
|
36
|
+
uint256 uintId = uint248(KeyId.unwrap(id));
|
37
|
+
uint256 uintKey = (uintObjectType << TYPE_SHIFT) + uintId;
|
38
|
+
return bytes32(uintKey);
|
39
|
+
}
|
40
|
+
}
|
@@ -0,0 +1,156 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.19;
|
3
|
+
|
4
|
+
/*
|
5
|
+
|
6
|
+
fa = {'from': accounts[0]}
|
7
|
+
tl = TimestampLib.deploy(fa)
|
8
|
+
kv = KeyValueStore.deploy(fa)
|
9
|
+
|
10
|
+
pk = kv.s2k('policy key 1')
|
11
|
+
pd = kv.s2b('policy info data 1.a')
|
12
|
+
|
13
|
+
rk = kv.s2k('risk key 1')
|
14
|
+
rd = kv.s2b('risk info data 1.a')
|
15
|
+
|
16
|
+
kv.exists(pk)
|
17
|
+
ptx = kv.create(pk, kv.policy(), pd)
|
18
|
+
rtx = kv.create(rk, kv.policy(), rd)
|
19
|
+
kv.exists(pk)
|
20
|
+
kv.get(pk)
|
21
|
+
|
22
|
+
kv.b2s(kv.getData(pk))
|
23
|
+
|
24
|
+
pd1b = kv.s2b('b')
|
25
|
+
ptxb = kv.update(pk, pd1b, True, True) # gas: 48019, 46428
|
26
|
+
|
27
|
+
pd1c = kv.s2b('c')
|
28
|
+
ptxc = kv.update(pk, pd1c, True, True) # gas: 43819, 42228
|
29
|
+
|
30
|
+
pd1d = kv.s2b('d')
|
31
|
+
ptxd = kv.update(pk, pd1d, True, False) # gas: 32655, 32699
|
32
|
+
|
33
|
+
pd1e = kv.s2b('e')
|
34
|
+
ptxe = kv.update(pk, pd1e, False, True) # gas: 34525, 34575
|
35
|
+
|
36
|
+
pd1f = kv.s2b('f')
|
37
|
+
ptxf = kv.update(pk, pd1f, False, False) # gas: 32638, 32682
|
38
|
+
|
39
|
+
pd1g = kv.s2b('g')
|
40
|
+
ptxg = kv.update(pk, pd1f, True, True, True, False) # gas:
|
41
|
+
|
42
|
+
|
43
|
+
|
44
|
+
*/
|
45
|
+
|
46
|
+
type KeyId is bytes32;
|
47
|
+
|
48
|
+
import {ObjectType, RISK, POLICY} from "../../types/ObjectType.sol";
|
49
|
+
import {Timestamp, blockTimestamp, zeroTimestamp} from "../../types/Timestamp.sol";
|
50
|
+
import {Blocknumber, blockBlocknumber, zeroBlocknumber} from "../../types/Blocknumber.sol";
|
51
|
+
|
52
|
+
contract KeyValueStore {
|
53
|
+
|
54
|
+
event LogInfoCreated(bytes32 key, ObjectType objectType, address createdBy);
|
55
|
+
event LogInfoUpdated(bytes32 key, ObjectType objectType, address updatedBy, Blocknumber lastUpdateIn);
|
56
|
+
|
57
|
+
struct Metadata {
|
58
|
+
ObjectType objectType;
|
59
|
+
address updatedBy;
|
60
|
+
Blocknumber updatedIn;
|
61
|
+
Blocknumber createdIn;
|
62
|
+
}
|
63
|
+
|
64
|
+
struct Value {
|
65
|
+
Metadata metadata;
|
66
|
+
bytes data;
|
67
|
+
}
|
68
|
+
|
69
|
+
mapping(bytes32 key => Value value) private _value;
|
70
|
+
bytes32[] private _keys;
|
71
|
+
|
72
|
+
// key store functions
|
73
|
+
function create(bytes32 key, ObjectType objectType, bytes memory data) public {
|
74
|
+
Metadata storage metadata = _value[key].metadata;
|
75
|
+
require(metadata.updatedBy == address(0), "ERROR_ALREADY_CREATED");
|
76
|
+
|
77
|
+
address createdBy = msg.sender;
|
78
|
+
Blocknumber blocknumber = blockBlocknumber();
|
79
|
+
metadata.objectType = objectType;
|
80
|
+
metadata.updatedBy = createdBy;
|
81
|
+
metadata.updatedIn = blocknumber;
|
82
|
+
metadata.createdIn = blocknumber;
|
83
|
+
|
84
|
+
_value[key].data = data;
|
85
|
+
_keys.push(key);
|
86
|
+
|
87
|
+
emit LogInfoCreated(key, objectType, createdBy);
|
88
|
+
}
|
89
|
+
|
90
|
+
function update(bytes32 key, bytes memory data) public {
|
91
|
+
update(key, data, true, true);
|
92
|
+
}
|
93
|
+
|
94
|
+
function update(bytes32 key, bytes memory data, bool updateMetadata, bool log) public {
|
95
|
+
_value[key].data = data;
|
96
|
+
Blocknumber blocknumber = blockBlocknumber();
|
97
|
+
|
98
|
+
if(updateMetadata && log) {
|
99
|
+
Metadata storage metadata = _value[key].metadata;
|
100
|
+
require(metadata.updatedBy != address(0), "ERROR_NOT_EXISTING");
|
101
|
+
|
102
|
+
if (log) {
|
103
|
+
emit LogInfoUpdated(key, metadata.objectType, msg.sender, metadata.updatedIn);
|
104
|
+
}
|
105
|
+
|
106
|
+
metadata.updatedBy = msg.sender;
|
107
|
+
metadata.updatedIn = blocknumber;
|
108
|
+
} else if (log) {
|
109
|
+
emit LogInfoUpdated(key, POLICY(), msg.sender, blocknumber);
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
113
|
+
function exists(bytes32 key) public view returns (bool) {
|
114
|
+
return _value[key].metadata.updatedBy != address(0);
|
115
|
+
}
|
116
|
+
|
117
|
+
function get(bytes32 key) public view returns (Value memory value) {
|
118
|
+
return _value[key];
|
119
|
+
}
|
120
|
+
|
121
|
+
function getMetadata(bytes32 key) public view returns (Metadata memory metadata) {
|
122
|
+
return _value[key].metadata;
|
123
|
+
}
|
124
|
+
|
125
|
+
function getData(bytes32 key) public view returns (bytes memory data) {
|
126
|
+
return _value[key].data;
|
127
|
+
}
|
128
|
+
|
129
|
+
function getKeyCount() public view returns (uint256 keyCount) {
|
130
|
+
return _keys.length;
|
131
|
+
}
|
132
|
+
|
133
|
+
function getKey(uint256 index) public view returns (bytes32 key) {
|
134
|
+
return _keys[index];
|
135
|
+
}
|
136
|
+
|
137
|
+
function policy() public pure returns (ObjectType) {
|
138
|
+
return POLICY();
|
139
|
+
}
|
140
|
+
|
141
|
+
function risk() public pure returns (ObjectType) {
|
142
|
+
return RISK();
|
143
|
+
}
|
144
|
+
|
145
|
+
function s2k(string memory s) public pure returns (bytes32 k) {
|
146
|
+
return keccak256(abi.encodePacked(s));
|
147
|
+
}
|
148
|
+
|
149
|
+
function s2b(string memory s) public pure returns (bytes memory b) {
|
150
|
+
return abi.encode(s);
|
151
|
+
}
|
152
|
+
|
153
|
+
function b2s(bytes memory b) public pure returns (string memory s) {
|
154
|
+
return abi.decode(b, (string));
|
155
|
+
}
|
156
|
+
}
|