@etherisc/gif-next 0.0.2-7b86057-523 → 0.0.2-7bdebe2-893
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 +8 -13
- package/artifacts/contracts/components/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/components/Component.sol/Component.json +315 -98
- package/artifacts/contracts/components/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/components/Distribution.sol/Distribution.json +668 -141
- package/artifacts/contracts/components/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IComponent.sol/IComponent.json +241 -60
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IDistributionComponent.sol/IDistributionComponent.json +438 -86
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IPoolComponent.sol/IPoolComponent.json +489 -163
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/components/IProductComponent.sol/IProductComponent.json +250 -137
- package/artifacts/contracts/components/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/components/Pool.sol/Pool.json +626 -189
- package/artifacts/contracts/components/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/components/Product.sol/Product.json +427 -178
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +4 -0
- package/artifacts/contracts/instance/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +1206 -0
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +64 -50
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/Cloneable.sol/Cloneable.json +5 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +1562 -814
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +227 -213
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +1119 -785
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +463 -167
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +418 -230
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +439 -379
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +355 -104
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.dbg.json +1 -1
- package/artifacts/contracts/instance/ObjectManager.sol/ObjectManager.json +8 -13
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ComponentService.sol/ComponentService.json +197 -169
- package/artifacts/contracts/instance/base/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/KeyValueStore.sol/KeyValueStore.json +40 -10
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/Lifecycle.sol/Lifecycle.json +36 -11
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +58 -75
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +4 -0
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.json +10 -0
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ISetup.sol/ISetup.dbg.json +1 -1
- package/artifacts/contracts/instance/module/ITreasury.sol/ITreasury.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationService.sol/ApplicationService.json +1092 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ApplicationServiceManager.sol/ApplicationServiceManager.json +672 -0
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleService.sol/BundleService.json +527 -338
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/BundleServiceManager.sol/BundleServiceManager.json +344 -93
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimService.sol/ClaimService.json +1400 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +4 -0
- package/artifacts/contracts/instance/service/ClaimServiceManager.sol/ClaimServiceManager.json +760 -0
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionService.sol/DistributionService.json +1282 -256
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/DistributionServiceManager.sol/DistributionServiceManager.json +430 -87
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IApplicationService.sol/IApplicationService.json +619 -0
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IBundleService.sol/IBundleService.json +279 -264
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.dbg.json +4 -0
- package/artifacts/contracts/instance/service/IClaimService.sol/IClaimService.json +743 -0
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IDistributionService.sol/IDistributionService.json +800 -159
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPolicyService.sol/IPolicyService.json +159 -274
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IPoolService.sol/IPoolService.json +701 -118
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/IProductService.sol/IProductService.json +71 -160
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyService.sol/PolicyService.json +338 -412
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PolicyServiceManager.sol/PolicyServiceManager.json +299 -128
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolService.sol/PoolService.json +1062 -198
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/PoolServiceManager.sol/PoolServiceManager.json +384 -89
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductService.sol/ProductService.json +231 -223
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/service/ProductServiceManager.sol/ProductServiceManager.json +298 -95
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +15 -2
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +34 -2
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +70 -193
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.json +18 -0
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +47 -15
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +2 -2
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +182 -232
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +287 -94
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +23 -11
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +128 -37
- package/artifacts/contracts/shared/ContractDeployerLib.sol/ContractDeployerLib.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +41 -3
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +27 -29
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +189 -0
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +8 -29
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/{experiment/inheritance/IA.sol/ISharedA.json → shared/IRegistryLinked.sol/IRegistryLinked.json} +15 -17
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.json +71 -160
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.json +2 -152
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +100 -33
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +4 -0
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +302 -0
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +283 -76
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +115 -58
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +4 -0
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +71 -0
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +172 -160
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +2 -2
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
- package/artifacts/contracts/shared/Versionable.sol/Versionable.json +2 -152
- package/artifacts/contracts/test/TestFee.sol/TestFee.dbg.json +1 -1
- package/artifacts/contracts/test/TestFee.sol/TestFee.json +2 -2
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.dbg.json +1 -1
- package/artifacts/contracts/test/TestRegisterable.sol/TestRegisterable.json +115 -58
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.dbg.json +1 -1
- package/artifacts/contracts/test/TestRoleId.sol/TestRoleId.json +6 -6
- package/artifacts/contracts/test/TestService.sol/TestService.dbg.json +1 -1
- package/artifacts/contracts/test/TestService.sol/TestService.json +190 -210
- package/artifacts/contracts/test/TestToken.sol/TestUsdc.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersion.sol/TestVersion.json +2 -2
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.dbg.json +1 -1
- package/artifacts/contracts/test/TestVersionable.sol/TestVersionable.json +8 -190
- package/artifacts/contracts/test/Usdc.sol/USDC.dbg.json +1 -1
- package/artifacts/contracts/types/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/types/Amount.sol/AmountLib.dbg.json +4 -0
- package/artifacts/contracts/types/Amount.sol/AmountLib.json +209 -0
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/types/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/types/ChainId.sol/ChainIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/ClaimId.sol/ClaimIdLib.json +179 -0
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/types/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/types/Fee.sol/FeeLib.json +40 -9
- package/artifacts/contracts/types/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/types/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/types/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/NftId.sol/NftIdLib.json +17 -4
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/types/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/types/NumberId.sol/NumberIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/types/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.dbg.json +4 -0
- package/artifacts/contracts/types/PayoutId.sol/PayoutIdLib.json +209 -0
- package/artifacts/contracts/types/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/types/Referral.sol/ReferralLib.json +23 -4
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RiskId.sol/RiskIdLib.json +2 -2
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/types/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.dbg.json +4 -0
- package/artifacts/contracts/types/Seconds.sol/SecondsLib.json +124 -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 +38 -7
- package/artifacts/contracts/types/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/MathLib.json +2 -2
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/types/UFixed.sol/UFixedLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/types/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/types/Version.sol/VersionPartLib.json +2 -2
- package/contracts/components/Component.sol +134 -78
- package/contracts/components/Distribution.sol +190 -57
- package/contracts/components/IComponent.sol +62 -15
- package/contracts/components/IDistributionComponent.sol +39 -15
- package/contracts/components/IPoolComponent.sol +84 -31
- package/contracts/components/IProductComponent.sol +3 -2
- package/contracts/components/Pool.sol +223 -148
- package/contracts/components/Product.sol +221 -115
- package/contracts/instance/AccessManagerUpgradeableInitializeable.sol +13 -0
- package/contracts/instance/BundleManager.sol +10 -9
- package/contracts/instance/Cloneable.sol +7 -2
- package/contracts/instance/IInstance.sol +51 -19
- package/contracts/instance/IInstanceService.sol +33 -11
- package/contracts/instance/Instance.sol +143 -94
- package/contracts/instance/InstanceAccessManager.sol +389 -160
- package/contracts/instance/InstanceReader.sol +85 -12
- package/contracts/instance/InstanceService.sol +273 -224
- package/contracts/instance/InstanceServiceManager.sol +1 -1
- package/contracts/instance/ObjectManager.sol +6 -8
- package/contracts/instance/base/ComponentService.sol +28 -32
- package/contracts/instance/base/KeyValueStore.sol +13 -36
- package/contracts/instance/base/Lifecycle.sol +26 -6
- package/contracts/instance/module/IAccess.sol +22 -16
- package/contracts/instance/module/IBundle.sol +8 -5
- package/contracts/instance/module/IComponents.sol +41 -0
- package/contracts/instance/module/IDistribution.sol +2 -0
- package/contracts/instance/module/IPolicy.sol +41 -9
- package/contracts/instance/module/ISetup.sol +7 -20
- package/contracts/instance/service/ApplicationService.sol +356 -0
- package/contracts/instance/service/ApplicationServiceManager.sol +35 -0
- package/contracts/instance/service/BundleService.sol +224 -132
- package/contracts/instance/service/BundleServiceManager.sol +1 -1
- package/contracts/instance/service/ClaimService.sol +444 -0
- package/contracts/instance/service/ClaimServiceManager.sol +35 -0
- package/contracts/instance/service/DistributionService.sol +344 -19
- package/contracts/instance/service/DistributionServiceManager.sol +1 -1
- package/contracts/instance/service/IApplicationService.sol +78 -0
- package/contracts/instance/service/IBundleService.sol +93 -22
- package/contracts/instance/service/IClaimService.sol +90 -0
- package/contracts/instance/service/IDistributionService.sol +87 -0
- package/contracts/instance/service/IPolicyService.sol +36 -50
- package/contracts/instance/service/IPoolService.sol +106 -3
- package/contracts/instance/service/PolicyService.sol +166 -346
- package/contracts/instance/service/PolicyServiceManager.sol +2 -2
- package/contracts/instance/service/PoolService.sol +312 -19
- package/contracts/instance/service/PoolServiceManager.sol +1 -1
- package/contracts/instance/service/ProductService.sol +35 -58
- package/contracts/instance/service/ProductServiceManager.sol +2 -2
- package/contracts/registry/ChainNft.sol +8 -0
- package/contracts/registry/IRegistry.sol +5 -2
- package/contracts/registry/IRegistryService.sol +12 -11
- package/contracts/registry/ITransferInterceptor.sol +1 -0
- package/contracts/registry/Registry.sol +43 -28
- package/contracts/registry/RegistryService.sol +70 -50
- package/contracts/registry/RegistryServiceManager.sol +13 -13
- package/contracts/registry/ReleaseManager.sol +32 -40
- package/contracts/registry/TokenRegistry.sol +16 -12
- package/contracts/shared/ERC165.sol +14 -12
- package/contracts/shared/INftOwnable.sol +11 -10
- package/contracts/shared/IPolicyHolder.sol +40 -0
- package/contracts/shared/IRegisterable.sol +3 -3
- package/contracts/shared/IRegistryLinked.sol +11 -0
- package/contracts/shared/IService.sol +6 -4
- package/contracts/shared/IVersionable.sol +4 -47
- package/contracts/shared/NftOwnable.sol +64 -85
- package/contracts/shared/PolicyHolder.sol +94 -0
- package/contracts/shared/ProxyManager.sol +100 -25
- package/contracts/shared/Registerable.sol +16 -27
- package/contracts/shared/RegistryLinked.sol +43 -0
- package/contracts/shared/Service.sol +32 -20
- package/contracts/shared/TokenHandler.sol +11 -5
- package/contracts/shared/Versionable.sol +4 -92
- package/contracts/test/TestRegisterable.sol +1 -1
- package/contracts/test/TestService.sol +1 -1
- package/contracts/types/Amount.sol +80 -0
- package/contracts/types/Blocknumber.sol +1 -0
- package/contracts/types/ClaimId.sol +75 -0
- package/contracts/types/DistributorType.sol +2 -2
- package/contracts/types/Fee.sol +13 -5
- package/contracts/types/NftId.sol +8 -0
- package/contracts/types/ObjectType.sol +11 -6
- package/contracts/types/PayoutId.sol +82 -0
- package/contracts/types/Referral.sol +4 -0
- package/contracts/types/RoleId.sol +16 -9
- package/contracts/types/Seconds.sol +54 -0
- package/contracts/types/StateId.sol +7 -2
- package/contracts/types/Timestamp.sol +18 -13
- package/contracts/types/UFixed.sol +1 -0
- package/contracts/types/Version.sol +1 -0
- package/package.json +3 -3
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Cloner.json +0 -66
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock1.json +0 -24
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.dbg.json +0 -4
- package/artifacts/contracts/experiment/cloning/Cloner.sol/Mock2.json +0 -42
- package/artifacts/contracts/experiment/errors/Require.sol/Require.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Require.sol/Require.json +0 -105
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.dbg.json +0 -4
- package/artifacts/contracts/experiment/errors/Revert.sol/Revert.json +0 -105
- package/artifacts/contracts/experiment/inheritance/A.sol/A.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/A.json +0 -128
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/A.sol/AShared.json +0 -42
- package/artifacts/contracts/experiment/inheritance/B.sol/B.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/B.sol/B.json +0 -76
- package/artifacts/contracts/experiment/inheritance/C.sol/C.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/C.sol/C.json +0 -89
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IA.sol/IA.json +0 -128
- package/artifacts/contracts/experiment/inheritance/IA.sol/ISharedA.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IB.sol/IB.json +0 -50
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.dbg.json +0 -4
- package/artifacts/contracts/experiment/inheritance/IC.sol/IC.json +0 -63
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/Dummy.sol/LifeCycleModule.json +0 -59
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/ISM.sol/ISMEE.json +0 -74
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SM.sol/SM.json +0 -124
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.dbg.json +0 -4
- package/artifacts/contracts/experiment/statemachine/SimpleStateMachine.sol/SimpleStateMachine.json +0 -207
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeA.sol/TypeALib.json +0 -10
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.dbg.json +0 -4
- package/artifacts/contracts/experiment/types/TypeB.sol/TypeBLib.json +0 -10
- package/contracts/experiment/cloning/Cloner.sol +0 -47
- package/contracts/experiment/errors/Require.sol +0 -38
- package/contracts/experiment/errors/Revert.sol +0 -44
- package/contracts/experiment/inheritance/A.sol +0 -53
- package/contracts/experiment/inheritance/B.sol +0 -28
- package/contracts/experiment/inheritance/C.sol +0 -34
- package/contracts/experiment/inheritance/IA.sol +0 -13
- package/contracts/experiment/inheritance/IB.sol +0 -10
- package/contracts/experiment/inheritance/IC.sol +0 -12
- package/contracts/experiment/statemachine/Dummy.sol +0 -27
- package/contracts/experiment/statemachine/ISM.sol +0 -25
- package/contracts/experiment/statemachine/SM.sol +0 -57
- package/contracts/experiment/statemachine/SimpleStateMachine.sol +0 -31
- package/contracts/experiment/types/TypeA.sol +0 -47
- package/contracts/experiment/types/TypeB.sol +0 -29
@@ -26,9 +26,19 @@ contract TokenRegistry is
|
|
26
26
|
mapping(address token => bool registered) internal _registered;
|
27
27
|
mapping(address token => mapping(VersionPart majorVersion => bool isActive)) internal _active;
|
28
28
|
|
29
|
-
constructor(
|
30
|
-
|
31
|
-
|
29
|
+
constructor(
|
30
|
+
address registry
|
31
|
+
)
|
32
|
+
{
|
33
|
+
initialize(registry);
|
34
|
+
}
|
35
|
+
|
36
|
+
function initialize(address registry)
|
37
|
+
public
|
38
|
+
initializer()
|
39
|
+
{
|
40
|
+
initializeNftOwnable(msg.sender, registry);
|
41
|
+
}
|
32
42
|
|
33
43
|
|
34
44
|
/// @dev link ownership of token registry to nft owner of registry service
|
@@ -40,9 +50,8 @@ contract TokenRegistry is
|
|
40
50
|
IRegistry registry = IRegistry(registryAddress);
|
41
51
|
// TODO use _latest instead of _initial -> but _latest is 0 before first release activation
|
42
52
|
address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getNextVersion());
|
43
|
-
//address registryServiceAddress = registry.getServiceAddress(REGISTRY(), registry.getInitialVersion());
|
44
53
|
|
45
|
-
_linkToNftOwnable(
|
54
|
+
_linkToNftOwnable(registryServiceAddress);
|
46
55
|
}
|
47
56
|
|
48
57
|
/// @dev token state is informative, registry have no clue about used tokens
|
@@ -60,7 +69,7 @@ contract TokenRegistry is
|
|
60
69
|
// verify valid major version
|
61
70
|
// ensure major version increments is one
|
62
71
|
uint256 version = majorVersion.toInt();
|
63
|
-
if (!
|
72
|
+
if (!getRegistry().isValidRelease(majorVersion)) {
|
64
73
|
revert TokenMajorVersionInvalid(majorVersion);
|
65
74
|
}
|
66
75
|
|
@@ -93,12 +102,7 @@ contract TokenRegistry is
|
|
93
102
|
revert NotContract(token);
|
94
103
|
}
|
95
104
|
|
96
|
-
// MUST
|
97
|
-
if(ERC165Checker.supportsInterface(token, type(IRegisterable).interfaceId)) {
|
98
|
-
revert NotToken(token);
|
99
|
-
}
|
100
|
-
|
101
|
-
// MUST have decimals > 0
|
105
|
+
// MUST have decimals > 0 (indicator that this is in fact an erc20 token)
|
102
106
|
IERC20Metadata erc20 = IERC20Metadata(token);
|
103
107
|
if(erc20.decimals() == 0) {
|
104
108
|
revert TokenDecimalsZero();
|
@@ -2,24 +2,26 @@
|
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
4
|
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
5
6
|
|
6
|
-
contract ERC165 is
|
7
|
+
contract ERC165 is
|
8
|
+
Initializable,
|
9
|
+
IERC165
|
10
|
+
{
|
7
11
|
mapping(bytes4 => bool) private _isSupported;
|
8
12
|
|
9
|
-
|
10
|
-
|
11
|
-
}
|
12
|
-
|
13
|
-
function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
|
14
|
-
return _isSupported[interfaceId];
|
15
|
-
}
|
16
|
-
|
17
|
-
// @dev register support for ERC165 itself
|
18
|
-
function _initializeERC165() internal {
|
13
|
+
// @dev initializes with support for ERC165
|
14
|
+
function initializeERC165() public onlyInitializing() {
|
19
15
|
_isSupported[type(IERC165).interfaceId] = true;
|
20
16
|
}
|
21
17
|
|
22
|
-
|
18
|
+
// @dev register support for provided interfaceId
|
19
|
+
// includes initialization for ERC165_ID if not yet done
|
20
|
+
function registerInterface(bytes4 interfaceId) public onlyInitializing() {
|
23
21
|
_isSupported[interfaceId] = true;
|
24
22
|
}
|
23
|
+
|
24
|
+
function supportsInterface(bytes4 interfaceId) external view override returns (bool) {
|
25
|
+
return _isSupported[interfaceId];
|
26
|
+
}
|
25
27
|
}
|
@@ -1,22 +1,23 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
|
6
|
+
import {IRegistryLinked} from "./IRegistryLinked.sol";
|
5
7
|
import {NftId} from "../types/NftId.sol";
|
6
8
|
|
7
|
-
interface INftOwnable
|
8
|
-
|
9
|
+
interface INftOwnable is
|
10
|
+
IERC165,
|
11
|
+
IRegistryLinked
|
12
|
+
{
|
13
|
+
error ErrorNftOwnableInitialOwnerZero();
|
14
|
+
error ErrorNftOwnableNotOwner(address account);
|
9
15
|
|
10
|
-
error
|
11
|
-
error
|
12
|
-
error ErrorRegistryNotInitialized();
|
13
|
-
error ErrorRegistryAddressZero();
|
14
|
-
error ErrorNotRegistry(address registryAddress);
|
15
|
-
error ErrorContractNotRegistered(address contractAddress);
|
16
|
+
error ErrorNftOwnableAlreadyLinked(NftId nftId);
|
17
|
+
error ErrorNftOwnableContractNotRegistered(address contractAddress);
|
16
18
|
|
17
19
|
function linkToRegisteredNftId() external;
|
18
20
|
|
19
|
-
function getRegistry() external view returns (IRegistry);
|
20
21
|
function getNftId() external view returns (NftId);
|
21
22
|
function getOwner() external view returns (address);
|
22
23
|
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
|
6
|
+
|
7
|
+
import {Amount} from "../types/Amount.sol";
|
8
|
+
import {ClaimId} from "../types/ClaimId.sol";
|
9
|
+
import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
|
10
|
+
import {NftId} from "../types/NftId.sol";
|
11
|
+
import {PayoutId} from "../types/PayoutId.sol";
|
12
|
+
|
13
|
+
/// @dev generic interface for contracts that need to hold policies and receive payouts
|
14
|
+
/// GIF will notify policy holder contracts for policy creation and payout execution
|
15
|
+
interface IPolicyHolder is
|
16
|
+
IERC165,
|
17
|
+
IERC721Receiver,
|
18
|
+
IRegistryLinked
|
19
|
+
{
|
20
|
+
|
21
|
+
/// @dev callback function that will be called after successful policy activation
|
22
|
+
/// active policies may open claims under the activated policy
|
23
|
+
function policyActivated(NftId policyNftId) external;
|
24
|
+
|
25
|
+
/// @dev callback function to indicate the specified policy has expired
|
26
|
+
/// expired policies may no longer open claims
|
27
|
+
/// it is optional for products to notifiy policy holder of expired claims
|
28
|
+
function policyExpired(NftId policyNftId) external;
|
29
|
+
|
30
|
+
/// @dev callback function to notify the confirmation of the specified claim
|
31
|
+
/// active policies may open claims under the activated policy
|
32
|
+
function claimConfirmed(NftId policyNftId, ClaimId claimId, Amount amount) external;
|
33
|
+
|
34
|
+
/// @dev callback function that will be called after a successful payout
|
35
|
+
function payoutExecuted(NftId policyNftId, PayoutId payoutId, address beneficiary, Amount amount) external;
|
36
|
+
|
37
|
+
/// @dev determines policy and claim specific beneficiary address
|
38
|
+
/// returned address will override GIF default where the policy nft holder is treated as beneficiary
|
39
|
+
function getBeneficiary(NftId policyNftId, ClaimId claimId) external view returns (address beneficiary);
|
40
|
+
}
|
@@ -1,12 +1,12 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
-
|
6
4
|
import {INftOwnable} from "./INftOwnable.sol";
|
7
5
|
import {IRegistry} from "../registry/IRegistry.sol";
|
8
6
|
|
9
|
-
interface IRegisterable is
|
7
|
+
interface IRegisterable is
|
8
|
+
INftOwnable
|
9
|
+
{
|
10
10
|
|
11
11
|
function getInitialInfo()
|
12
12
|
external
|
@@ -0,0 +1,11 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IRegistry} from "../registry/IRegistry.sol";
|
5
|
+
|
6
|
+
interface IRegistryLinked {
|
7
|
+
|
8
|
+
error ErrorNotRegistry(address registryAddress);
|
9
|
+
|
10
|
+
function getRegistry() external view returns (IRegistry);
|
11
|
+
}
|
@@ -1,16 +1,18 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.19;
|
3
3
|
|
4
|
-
import {
|
5
|
-
import {ObjectType} from "../types/ObjectType.sol";
|
4
|
+
import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
|
6
5
|
|
7
6
|
import {IRegisterable} from "./IRegisterable.sol";
|
8
7
|
import {IVersionable} from "./IVersionable.sol";
|
8
|
+
import {ObjectType} from "../types/ObjectType.sol";
|
9
9
|
|
10
10
|
interface IService is
|
11
11
|
IRegisterable,
|
12
|
-
IVersionable
|
12
|
+
IVersionable,
|
13
|
+
IAccessManaged
|
13
14
|
{
|
15
|
+
error ErrorServiceNotImplemented();
|
16
|
+
|
14
17
|
function getDomain() external pure returns(ObjectType serviceDomain);
|
15
|
-
function getMajorVersion() external view returns(VersionPart majorVersion);
|
16
18
|
}
|
@@ -1,11 +1,8 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
-
import {Blocknumber} from "../types/Blocknumber.sol";
|
5
|
-
import {Timestamp} from "../types/Timestamp.sol";
|
6
4
|
import {Version} from "../types/Version.sol";
|
7
5
|
|
8
|
-
|
9
6
|
/// IMPORTANT
|
10
7
|
// Upgradeable contract MUST:
|
11
8
|
// 1) inherit from Versionable
|
@@ -14,7 +11,7 @@ import {Version} from "../types/Version.sol";
|
|
14
11
|
// 4) implement internal _upgrade() function with onlyInitializing modifier (1st version MUST revert)
|
15
12
|
// 5) have onlyInitialising modifier for each function callable inside _initialize()/_upgrade() (MUST use different functions for initialization/upgrade and normal operations)
|
16
13
|
// 6) use default empty constructor -> _disableInitializer() is called from Versionable contructor
|
17
|
-
// 7) use namespace storage
|
14
|
+
// 7) use namespace storage (should this be needed)
|
18
15
|
// 8) since now inheritance is used for upgradability, contract MUST BE inherited ONLY by the next version
|
19
16
|
// Upgradeable contract SHOULD:
|
20
17
|
// 9) define all non private methods as virtual (in order to be able to upgrade them latter)
|
@@ -22,48 +19,29 @@ import {Version} from "../types/Version.sol";
|
|
22
19
|
// in some cases this ok but not in the others...
|
23
20
|
//
|
24
21
|
// IMPORTANT
|
25
|
-
//
|
22
|
+
// If introducting/amending storage related to Versionable version MUST:
|
26
23
|
// 1) define namespace storage struct if accessing storage
|
27
24
|
// - DO NOT use structs inside, except
|
28
25
|
// - CAN use structs ONLY inside mappings
|
29
26
|
// 2) ALWAYS define private getter if accessing storage
|
30
27
|
// - MUST use default implementation, CAN change ONLY return type
|
31
|
-
// - MUST use the same "LOCATION_V1"
|
32
28
|
|
33
29
|
interface IVersionable {
|
34
30
|
|
35
|
-
struct VersionInfo {
|
36
|
-
Version version;
|
37
|
-
address implementation;
|
38
|
-
address activatedBy;
|
39
|
-
Timestamp activatedAt;
|
40
|
-
Blocknumber activatedIn;
|
41
|
-
}
|
42
|
-
|
43
|
-
event LogVersionableInitialized(Version version, address implementation, address activatedBy);
|
44
|
-
|
45
|
-
// TODO uncomment when all implementations are ready
|
46
31
|
/**
|
47
32
|
* @dev IMPORTANT
|
48
33
|
* implementation MUST be guarded by initializer modifier
|
49
|
-
* implementation MUST call internal function Versionable._updateVersionHistory
|
50
34
|
* new version MUST inherit from previous version
|
51
35
|
*/
|
52
|
-
function
|
36
|
+
function initializeVersionable(address activatedBy, bytes memory activationData) external;
|
53
37
|
|
54
38
|
/**
|
55
39
|
* @dev
|
56
40
|
* implementation MUST be guarded by reinitializer(version().toUint64()) modifier
|
57
|
-
* implementation MUST call internal function Versionable._updateVersionHistory
|
58
41
|
* new version MUST inherit from previous version
|
59
42
|
* the first verion MUST revert
|
60
43
|
*/
|
61
|
-
function
|
62
|
-
|
63
|
-
/**
|
64
|
-
* @dev returns true if the specified version has been activated for the current contract
|
65
|
-
*/
|
66
|
-
function isInitialized(Version version) external view returns(bool);
|
44
|
+
function upgradeVersionable(bytes memory upgradeData) external;
|
67
45
|
|
68
46
|
/**
|
69
47
|
* @dev returns version of this contract
|
@@ -72,25 +50,4 @@ interface IVersionable {
|
|
72
50
|
*/
|
73
51
|
function getVersion() external pure returns(Version);
|
74
52
|
|
75
|
-
/**
|
76
|
-
* @dev returns the number of all deployed versions of this contract
|
77
|
-
*/
|
78
|
-
function getVersionCount() external view returns(uint256 numberOfVersions);
|
79
|
-
|
80
|
-
/**
|
81
|
-
* @dev returns the i-th (index) version of this contract
|
82
|
-
*/
|
83
|
-
function getVersion(uint256 index) external view returns(Version version);
|
84
|
-
|
85
|
-
/**
|
86
|
-
* @dev returns the i-th (index) version info of this contract
|
87
|
-
*/
|
88
|
-
function getVersionInfo(Version version) external view returns(VersionInfo memory versionInfo);
|
89
|
-
|
90
|
-
// TODO make sure it is needed here
|
91
|
-
/**
|
92
|
-
* @dev returns currently active version
|
93
|
-
*/
|
94
|
-
function getInitializedVersion() external view returns(uint64);
|
95
|
-
|
96
53
|
}
|
@@ -1,139 +1,118 @@
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
|
+
import {ERC165} from "./ERC165.sol";
|
4
5
|
import {INftOwnable} from "./INftOwnable.sol";
|
5
|
-
import {
|
6
|
-
import {
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
6
|
+
import {NftId} from "../types/NftId.sol";
|
7
|
+
import {RegistryLinked} from "./RegistryLinked.sol";
|
8
|
+
|
9
|
+
contract NftOwnable is
|
10
|
+
ERC165,
|
11
|
+
RegistryLinked,
|
12
|
+
INftOwnable
|
13
|
+
{
|
14
|
+
// keccak256(abi.encode(uint256(keccak256("etherisc.storage.NftOwnable")) - 1)) & ~bytes32(uint256(0xff));
|
15
|
+
bytes32 public constant NFT_OWNABLE_STORAGE_LOCATION_V1 = 0x07ebcf49758b6ed3af50fa146bec0abe157c0218fe65dc0874c286e9d5da4f00;
|
16
|
+
|
17
|
+
struct NftOwnableStorage {
|
18
|
+
NftId _nftId;
|
19
|
+
address _initialOwner;
|
20
|
+
}
|
15
21
|
|
16
22
|
/// @dev enforces msg.sender is owner of nft (or initial owner of nft ownable)
|
17
23
|
modifier onlyOwner() {
|
18
24
|
if (msg.sender != getOwner()) {
|
19
|
-
revert
|
25
|
+
revert ErrorNftOwnableNotOwner(msg.sender);
|
20
26
|
}
|
21
27
|
_;
|
22
28
|
}
|
23
29
|
|
24
|
-
|
25
|
-
|
30
|
+
|
31
|
+
/// @dev initialization for upgradable contracts
|
32
|
+
// used in _initializeRegisterable
|
33
|
+
function initializeNftOwnable(
|
34
|
+
address initialOwner,
|
35
|
+
address registryAddress
|
36
|
+
)
|
37
|
+
public
|
38
|
+
virtual
|
39
|
+
onlyInitializing()
|
40
|
+
{
|
41
|
+
initializeRegistryLinked(registryAddress);
|
42
|
+
initializeERC165();
|
43
|
+
|
44
|
+
if(initialOwner == address(0)) {
|
45
|
+
revert ErrorNftOwnableInitialOwnerZero();
|
46
|
+
}
|
47
|
+
|
48
|
+
_getNftOwnableStorage()._initialOwner = initialOwner;
|
26
49
|
}
|
27
50
|
|
51
|
+
|
28
52
|
/// @dev links this contract to nft after registration
|
29
53
|
// needs to be done once per registered contract and
|
30
54
|
// reduces registry calls to check ownership
|
31
55
|
// does not need any protection as function can only do the "right thing"
|
32
|
-
function linkToRegisteredNftId()
|
33
|
-
|
34
|
-
|
35
|
-
|
56
|
+
function linkToRegisteredNftId()
|
57
|
+
public
|
58
|
+
virtual
|
59
|
+
{
|
60
|
+
NftOwnableStorage storage $ = _getNftOwnableStorage();
|
36
61
|
|
37
|
-
if (
|
38
|
-
revert
|
62
|
+
if ($._nftId.gtz()) {
|
63
|
+
revert ErrorNftOwnableAlreadyLinked($._nftId);
|
39
64
|
}
|
40
65
|
|
41
66
|
address contractAddress = address(this);
|
42
67
|
|
43
|
-
if (!
|
44
|
-
revert
|
68
|
+
if (!getRegistry().isRegistered(contractAddress)) {
|
69
|
+
revert ErrorNftOwnableContractNotRegistered(contractAddress);
|
45
70
|
}
|
46
71
|
|
47
|
-
_nftId =
|
72
|
+
$._nftId = getRegistry().getNftId(contractAddress);
|
48
73
|
}
|
49
74
|
|
50
|
-
|
51
|
-
function getRegistry() public view virtual override returns (IRegistry) {
|
52
|
-
return _registry;
|
53
|
-
}
|
54
|
-
|
55
|
-
|
56
75
|
function getNftId() public view virtual override returns (NftId) {
|
57
|
-
return _nftId;
|
58
|
-
}
|
59
|
-
|
60
|
-
function getInitialOwner() public view returns (address) {
|
61
|
-
return _initialOwner;
|
76
|
+
return _getNftOwnableStorage()._nftId;
|
62
77
|
}
|
63
78
|
|
64
79
|
function getOwner() public view virtual override returns (address) {
|
65
|
-
|
66
|
-
return _registry.ownerOf(_nftId);
|
67
|
-
}
|
68
|
-
|
69
|
-
return _initialOwner;
|
70
|
-
}
|
80
|
+
NftOwnableStorage storage $ = _getNftOwnableStorage();
|
71
81
|
|
82
|
+
if ($._nftId.gtz()) {
|
83
|
+
return getRegistry().ownerOf($._nftId);
|
84
|
+
}
|
72
85
|
|
73
|
-
|
74
|
-
// used in _initializeRegisterable
|
75
|
-
function _initializeNftOwnable(
|
76
|
-
address initialOwner,
|
77
|
-
address registryAddress
|
78
|
-
)
|
79
|
-
internal
|
80
|
-
virtual
|
81
|
-
{
|
82
|
-
require(initialOwner > address(0), "NftOwnable: initial owner is 0");
|
83
|
-
_initialOwner = initialOwner;
|
84
|
-
_setRegistry(registryAddress);
|
86
|
+
return $._initialOwner;
|
85
87
|
}
|
86
88
|
|
87
|
-
|
88
89
|
/// @dev used in constructor of registry service manager
|
89
90
|
// links ownership of registry service manager ot nft owner of registry service
|
90
91
|
function _linkToNftOwnable(
|
91
|
-
address registryAddress,
|
92
92
|
address nftOwnableAddress
|
93
93
|
)
|
94
94
|
internal
|
95
|
-
onlyOwner()
|
96
95
|
returns (NftId)
|
97
96
|
{
|
98
|
-
|
99
|
-
revert ErrorAlreadyLinked(address(_registry), _nftId);
|
100
|
-
}
|
101
|
-
|
102
|
-
_setRegistry(registryAddress);
|
97
|
+
NftOwnableStorage storage $ = _getNftOwnableStorage();
|
103
98
|
|
104
|
-
if (
|
105
|
-
revert
|
99
|
+
if ($._nftId.gtz()) {
|
100
|
+
revert ErrorNftOwnableAlreadyLinked($._nftId);
|
106
101
|
}
|
107
102
|
|
108
|
-
|
109
|
-
|
110
|
-
return _nftId;
|
111
|
-
}
|
112
|
-
|
113
|
-
|
114
|
-
function _setRegistry(address registryAddress)
|
115
|
-
private
|
116
|
-
{
|
117
|
-
if (address(_registry) != address(0)) {
|
118
|
-
revert ErrorRegistryAlreadyInitialized(address(_registry));
|
103
|
+
if (!getRegistry().isRegistered(nftOwnableAddress)) {
|
104
|
+
revert ErrorNftOwnableContractNotRegistered(nftOwnableAddress);
|
119
105
|
}
|
120
106
|
|
121
|
-
|
122
|
-
revert ErrorRegistryAddressZero();
|
123
|
-
}
|
107
|
+
$._nftId = getRegistry().getNftId(nftOwnableAddress);
|
124
108
|
|
125
|
-
|
126
|
-
|
127
|
-
}
|
109
|
+
return $._nftId;
|
110
|
+
}
|
128
111
|
|
129
|
-
_registry = IRegistry(registryAddress);
|
130
112
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
}
|
135
|
-
} catch {
|
136
|
-
revert ErrorNotRegistry(registryAddress);
|
113
|
+
function _getNftOwnableStorage() private pure returns (NftOwnableStorage storage $) {
|
114
|
+
assembly {
|
115
|
+
$.slot := NFT_OWNABLE_STORAGE_LOCATION_V1
|
137
116
|
}
|
138
117
|
}
|
139
118
|
}
|
@@ -0,0 +1,94 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol";
|
5
|
+
import {IERC721Receiver} from "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
|
6
|
+
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
|
7
|
+
|
8
|
+
import {Amount} from "../types/Amount.sol";
|
9
|
+
import {ClaimId, ClaimIdLib} from "../types/ClaimId.sol";
|
10
|
+
import {ERC165} from "./ERC165.sol";
|
11
|
+
import {IPolicyHolder} from "./IPolicyHolder.sol";
|
12
|
+
import {NftId} from "../types/NftId.sol";
|
13
|
+
import {PayoutId} from "../types/PayoutId.sol";
|
14
|
+
import {RegistryLinked} from "./RegistryLinked.sol";
|
15
|
+
|
16
|
+
/// @dev template implementation for IPolicyHolder
|
17
|
+
contract PolicyHolder is
|
18
|
+
ERC165,
|
19
|
+
RegistryLinked,
|
20
|
+
IPolicyHolder
|
21
|
+
{
|
22
|
+
// keccak256(abi.encode(uint256(keccak256("etherisc.storage.PolicyHolder")) - 1)) & ~bytes32(uint256(0xff));
|
23
|
+
// TODO fix address
|
24
|
+
bytes32 public constant POLICY_HOLDER_STORAGE_LOCATION_V1 = 0x07ebcf49758b6ed3af50fa146bec0abe157c0218fe65dc0874c286e9d5da4f00;
|
25
|
+
|
26
|
+
struct PolicyHolderStorage {
|
27
|
+
mapping(NftId policyId => mapping(ClaimId claimId => address beneficiary)) _beneficiary;
|
28
|
+
}
|
29
|
+
|
30
|
+
function initializePolicyHolder(
|
31
|
+
address registryAddress,
|
32
|
+
address beneficiaryDefault
|
33
|
+
)
|
34
|
+
public
|
35
|
+
virtual
|
36
|
+
onlyInitializing()
|
37
|
+
{
|
38
|
+
initializeRegistryLinked(registryAddress);
|
39
|
+
registerInterface(type(IPolicyHolder).interfaceId);
|
40
|
+
}
|
41
|
+
|
42
|
+
/// @dev empty default implementation
|
43
|
+
function policyActivated(NftId policyNftId) external {}
|
44
|
+
|
45
|
+
/// @dev empty default implementation
|
46
|
+
function policyExpired(NftId policyNftId) external {}
|
47
|
+
|
48
|
+
/// @dev empty default implementation
|
49
|
+
function claimConfirmed(NftId policyNftId, ClaimId claimId, Amount amount) external {}
|
50
|
+
|
51
|
+
/// @dev empty default implementation
|
52
|
+
function payoutExecuted(NftId policyNftId, PayoutId payoutId, address beneficiary, Amount amount) external {}
|
53
|
+
|
54
|
+
/// @dev returns claim specific beneficiary
|
55
|
+
/// when no such beneficiary is defined the policy specific beneficiary is returned
|
56
|
+
function getBeneficiary(NftId policyNftId, ClaimId claimId) external virtual view returns (address beneficiary) {
|
57
|
+
beneficiary = _getPolicyHolderStorage()._beneficiary[policyNftId][claimId];
|
58
|
+
|
59
|
+
// fallback to claim independent beneficiary
|
60
|
+
if(beneficiary == address(0) && claimId.gtz()) {
|
61
|
+
beneficiary = _getPolicyHolderStorage()._beneficiary[policyNftId][ClaimIdLib.zero()];
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
//--- IERC165 functions ---------------//
|
66
|
+
function onERC721Received(
|
67
|
+
address, // operator
|
68
|
+
address, // from
|
69
|
+
uint256, // tokenId
|
70
|
+
bytes calldata // data
|
71
|
+
)
|
72
|
+
external
|
73
|
+
virtual
|
74
|
+
returns (bytes4)
|
75
|
+
{
|
76
|
+
return IERC721Receiver.onERC721Received.selector;
|
77
|
+
}
|
78
|
+
|
79
|
+
/// @dev sets policy specific beneficiary (used when no claim specific beneficiary is defined)
|
80
|
+
function _setBeneficiary(NftId policyNftId, address beneficiary) internal {
|
81
|
+
_setBeneficiary(policyNftId, ClaimIdLib.zero(), beneficiary);
|
82
|
+
}
|
83
|
+
|
84
|
+
/// @dev sets policy and claim specific beneficiary
|
85
|
+
function _setBeneficiary(NftId policyNftId, ClaimId claimId, address beneficiary) internal {
|
86
|
+
_getPolicyHolderStorage()._beneficiary[policyNftId][claimId] = beneficiary;
|
87
|
+
}
|
88
|
+
|
89
|
+
function _getPolicyHolderStorage() private pure returns (PolicyHolderStorage storage $) {
|
90
|
+
assembly {
|
91
|
+
$.slot := POLICY_HOLDER_STORAGE_LOCATION_V1
|
92
|
+
}
|
93
|
+
}
|
94
|
+
}
|