@etherisc/gif-next 0.0.2-f18fb8b-243 → 0.0.2-f1f3b2c-994
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 +19 -2
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/AccessAdmin.sol/AccessAdmin.json +81 -63
- package/artifacts/contracts/authorization/AccessManagerCloneable.sol/AccessManagerCloneable.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/Authorization.sol/Authorization.json +2 -2
- package/artifacts/contracts/authorization/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.dbg.json +1 -1
- package/artifacts/contracts/authorization/IAccessAdmin.sol/IAccessAdmin.json +48 -30
- package/artifacts/contracts/authorization/IAuthorization.sol/IAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IModuleAuthorization.sol/IModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/IServiceAuthorization.sol/IServiceAuthorization.json +21 -2
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ModuleAuthorization.sol/ModuleAuthorization.json +2 -2
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +1 -1
- package/artifacts/contracts/authorization/ServiceAuthorization.sol/ServiceAuthorization.json +72 -9
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistribution.sol/BasicDistribution.json +106 -248
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.dbg.json +1 -1
- package/artifacts/contracts/distribution/BasicDistributionAuthorization.sol/BasicDistributionAuthorization.json +16 -16
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
- package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +64 -222
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +228 -217
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
- package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +93 -101
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +64 -37
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
- package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +120 -31
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/DamageLevel.sol/DamageLevelLib.json +22 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePool.sol/FirePool.json +1512 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FirePoolAuthorization.sol/FirePoolAuthorization.json +410 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProduct.sol/FireProduct.json +1999 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireProductAuthorization.sol/FireProductAuthorization.json +414 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.dbg.json +4 -0
- package/artifacts/contracts/examples/fire/FireUSD.sol/FireUSD.json +376 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleDistribution.sol/SimpleDistribution.json +1432 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleOracle.sol/SimpleOracle.json +1192 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimplePool.sol/SimplePool.json +1566 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.dbg.json +4 -0
- package/artifacts/contracts/examples/unpermissioned/SimpleProduct.sol/SimpleProduct.json +2001 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.dbg.json +4 -0
- package/artifacts/contracts/instance/BundleSet.sol/BundleSet.json +703 -0
- package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstance.sol/IInstance.json +6 -6
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +5 -5
- package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
- package/artifacts/contracts/instance/Instance.sol/Instance.json +17 -106
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +146 -112
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceAuthorizationV3.sol/InstanceAuthorizationV3.json +31 -31
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +437 -129
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +44 -151
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +61 -81
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +285 -228
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
- package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
- package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +2 -2
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.dbg.json +1 -1
- package/artifacts/contracts/instance/base/ObjectLifecycle.sol/ObjectLifecycle.json +45 -4
- package/artifacts/contracts/instance/base/ObjectSet.sol/ObjectSet.dbg.json +4 -0
- package/artifacts/contracts/instance/base/{ObjectManager.sol/ObjectManager.json → ObjectSet.sol/ObjectSet.json} +6 -6
- package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
- package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
- package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracle.sol/BasicOracle.json +74 -229
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.dbg.json +1 -1
- package/artifacts/contracts/oracle/BasicOracleAuthorization.sol/BasicOracleAuthorization.json +18 -18
- package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +1 -1
- package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +45 -31
- package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +1 -1
- package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +42 -213
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +37 -144
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +60 -80
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPool.sol/BasicPool.json +94 -274
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.dbg.json +1 -1
- package/artifacts/contracts/pool/BasicPoolAuthorization.sol/BasicPoolAuthorization.json +16 -16
- package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleService.sol/BundleService.json +458 -161
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +154 -86
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
- package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +229 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +87 -88
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +360 -171
- package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
- package/artifacts/contracts/pool/Pool.sol/Pool.json +84 -270
- package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolService.sol/PoolService.json +492 -333
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
- package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +98 -82
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +36 -162
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +57 -89
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProduct.sol/BasicProduct.json +62 -242
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.dbg.json +1 -1
- package/artifacts/contracts/product/BasicProductAuthorization.sol/BasicProductAuthorization.json +16 -16
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +263 -181
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +104 -100
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
- package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +5 -0
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
- package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +147 -6
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +295 -119
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
- package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +43 -43
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
- package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +62 -57
- package/artifacts/contracts/product/IRiskService.sol/IRiskService.dbg.json +4 -0
- package/artifacts/contracts/product/{IProductService.sol/IProductService.json → IRiskService.sol/IRiskService.json} +2 -2
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +406 -321
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +104 -100
- package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
- package/artifacts/contracts/product/PricingService.sol/PricingService.json +118 -265
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +80 -120
- package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
- package/artifacts/contracts/product/Product.sol/Product.json +62 -242
- package/artifacts/contracts/product/RiskService.sol/RiskService.dbg.json +4 -0
- package/artifacts/contracts/product/RiskService.sol/RiskService.json +588 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.dbg.json +4 -0
- package/artifacts/contracts/product/RiskServiceManager.sol/RiskServiceManager.json +682 -0
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
- package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +59 -16
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +274 -22
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +0 -183
- package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
- package/artifacts/contracts/registry/Registry.sol/Registry.json +493 -80
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +263 -145
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +23 -313
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
- package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +52 -72
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.dbg.json +1 -1
- package/artifacts/contracts/registry/ReleaseLifecycle.sol/ReleaseLifecycle.json +46 -5
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.dbg.json +4 -0
- package/artifacts/contracts/registry/ReleaseRegistry.sol/ReleaseRegistry.json +1061 -0
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +1 -1
- package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +70 -12
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
- package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +2 -2
- package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
- package/artifacts/contracts/shared/Component.sol/Component.json +15 -205
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +247 -161
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +105 -95
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
- package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +5 -112
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.dbg.json +4 -0
- package/artifacts/contracts/shared/ContractLib.sol/ContractLib.json +92 -0
- package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponent.sol/IComponent.json +15 -20
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
- package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +153 -0
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +34 -31
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +36 -0
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.json +36 -0
- package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.json +15 -47
- package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
- package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.dbg.json +4 -0
- package/artifacts/contracts/shared/InitializableERC165.sol/InitializableERC165.json +53 -0
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
- package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +34 -216
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
- package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +41 -0
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
- package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +41 -0
- package/artifacts/contracts/shared/NftIdSet.sol/NftIdSet.dbg.json +4 -0
- package/artifacts/contracts/shared/{NftIdSetManager.sol/NftIdSetManager.json → NftIdSet.sol/NftIdSet.json} +4 -4
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
- package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +6 -57
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
- package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +19 -141
- package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
- package/artifacts/contracts/shared/Registerable.sol/Registerable.json +8 -97
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
- package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -15
- package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
- package/artifacts/contracts/shared/Service.sol/Service.json +5 -112
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
- package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +330 -11
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.dbg.json +4 -0
- package/artifacts/contracts/shared/TokenHandlerDeployerLib.sol/TokenHandlerDeployerLib.json +108 -0
- package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
- package/artifacts/contracts/staking/IStaking.sol/IStaking.json +42 -21
- package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +73 -93
- package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
- package/artifacts/contracts/staking/Staking.sol/Staking.json +100 -256
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingLifecycle.sol/StakingLifecycle.json +45 -4
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +77 -88
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +6 -11
- package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingService.sol/StakingService.json +31 -138
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +56 -76
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +1 -1
- package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +176 -130
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
- package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +59 -23
- package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
- package/artifacts/contracts/type/Amount.sol/AmountLib.json +61 -8
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
- package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +2 -2
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +28 -4
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +2 -2
- package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
- package/artifacts/contracts/type/Fee.sol/FeeLib.json +7 -2
- package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
- package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
- package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/NftId.sol/NftIdLib.json +2 -2
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
- package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
- package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +2 -2
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +19 -19
- package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
- package/artifacts/contracts/type/Referral.sol/ReferralLib.json +2 -2
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +2 -2
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +60 -4
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +2 -2
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
- package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +50 -2
- package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +1 -1
- package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
- package/artifacts/contracts/type/StateId.sol/StateIdLib.json +15 -2
- package/artifacts/contracts/type/String.sol/StrLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
- package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +23 -4
- package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/MathLib.json +9 -3
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
- package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +52 -2
- package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
- package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
- package/artifacts/contracts/type/Version.sol/VersionPartLib.json +21 -2
- package/artifacts/contracts/upgradeability/IVersionable.sol/IVersionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/IVersionable.sol/IVersionable.json +1 -1
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.dbg.json +4 -0
- package/artifacts/contracts/upgradeability/ProxyManager.sol/ProxyManager.json +586 -0
- package/artifacts/contracts/upgradeability/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +3 -3
- package/artifacts/contracts/upgradeability/Versionable.sol/Versionable.dbg.json +4 -0
- package/artifacts/contracts/{shared → upgradeability}/Versionable.sol/Versionable.json +1 -1
- package/contracts/authorization/AccessAdmin.sol +31 -24
- package/contracts/authorization/Authorization.sol +5 -2
- package/contracts/authorization/IAccessAdmin.sol +3 -2
- package/contracts/authorization/IServiceAuthorization.sol +4 -2
- package/contracts/authorization/ServiceAuthorization.sol +27 -11
- package/contracts/distribution/BasicDistribution.sol +4 -15
- package/contracts/distribution/BasicDistributionAuthorization.sol +5 -1
- package/contracts/distribution/Distribution.sol +23 -11
- package/contracts/distribution/DistributionService.sol +76 -42
- package/contracts/distribution/DistributionServiceManager.sol +8 -11
- package/contracts/distribution/IDistributionComponent.sol +8 -4
- package/contracts/distribution/IDistributionService.sol +18 -2
- package/contracts/examples/fire/DamageLevel.sol +59 -0
- package/contracts/examples/fire/FirePool.sol +75 -0
- package/contracts/examples/fire/FirePoolAuthorization.sol +34 -0
- package/contracts/examples/fire/FireProduct.sol +411 -0
- package/contracts/examples/fire/FireProductAuthorization.sol +45 -0
- package/contracts/examples/fire/FireUSD.sol +26 -0
- package/contracts/examples/unpermissioned/SimpleDistribution.sol +50 -0
- package/contracts/examples/unpermissioned/SimpleOracle.sol +137 -0
- package/contracts/examples/unpermissioned/SimplePool.sol +76 -0
- package/contracts/examples/unpermissioned/SimpleProduct.sol +351 -0
- package/contracts/instance/{BundleManager.sol → BundleSet.sol} +23 -23
- package/contracts/instance/IInstance.sol +11 -34
- package/contracts/instance/IInstanceService.sol +5 -5
- package/contracts/instance/Instance.sol +13 -38
- package/contracts/instance/InstanceAdmin.sol +31 -9
- package/contracts/instance/InstanceAuthorizationV3.sol +16 -14
- package/contracts/instance/InstanceReader.sol +115 -25
- package/contracts/instance/InstanceService.sol +71 -49
- package/contracts/instance/InstanceServiceManager.sol +8 -13
- package/contracts/instance/InstanceStore.sol +12 -1
- package/contracts/instance/base/ObjectLifecycle.sol +9 -4
- package/contracts/instance/base/{ObjectManager.sol → ObjectSet.sol} +5 -5
- package/contracts/instance/module/IBundle.sol +1 -1
- package/contracts/instance/module/IComponents.sol +4 -8
- package/contracts/instance/module/IDistribution.sol +0 -1
- package/contracts/instance/module/IPolicy.sol +24 -24
- package/contracts/mock/Dip.sol +1 -1
- package/contracts/oracle/IOracleComponent.sol +2 -1
- package/contracts/oracle/Oracle.sol +17 -7
- package/contracts/oracle/OracleService.sol +11 -8
- package/contracts/oracle/OracleServiceManager.sol +8 -11
- package/contracts/pool/BasicPool.sol +7 -5
- package/contracts/pool/BasicPoolAuthorization.sol +11 -2
- package/contracts/pool/BundleService.sol +221 -56
- package/contracts/pool/BundleServiceManager.sol +8 -11
- package/contracts/pool/IBundleService.sol +42 -5
- package/contracts/pool/IPoolComponent.sol +24 -8
- package/contracts/pool/IPoolService.sol +57 -36
- package/contracts/pool/Pool.sol +72 -30
- package/contracts/pool/PoolService.sol +240 -129
- package/contracts/pool/PoolServiceManager.sol +6 -9
- package/contracts/product/ApplicationService.sol +62 -65
- package/contracts/product/ApplicationServiceManager.sol +6 -6
- package/contracts/product/BasicProduct.sol +3 -32
- package/contracts/product/BasicProductAuthorization.sol +3 -0
- package/contracts/product/ClaimService.sol +254 -115
- package/contracts/product/ClaimServiceManager.sol +6 -6
- package/contracts/product/IApplicationService.sol +1 -0
- package/contracts/product/IClaimService.sol +31 -7
- package/contracts/product/IPolicyService.sol +34 -32
- package/contracts/product/IPricingService.sol +7 -7
- package/contracts/product/IProductComponent.sol +18 -4
- package/contracts/product/{IProductService.sol → IRiskService.sol} +1 -1
- package/contracts/product/PolicyService.sol +404 -193
- package/contracts/product/PolicyServiceManager.sol +6 -9
- package/contracts/product/PricingService.sol +46 -46
- package/contracts/product/PricingServiceManager.sol +5 -8
- package/contracts/product/Product.sol +90 -50
- package/contracts/product/{ProductService.sol → RiskService.sol} +13 -41
- package/contracts/product/RiskServiceManager.sol +39 -0
- package/contracts/registry/ChainNft.sol +65 -32
- package/contracts/registry/IRegistry.sol +65 -19
- package/contracts/registry/IRegistryService.sol +0 -9
- package/contracts/registry/Registry.sol +340 -211
- package/contracts/registry/RegistryAdmin.sol +155 -72
- package/contracts/registry/RegistryService.sol +59 -66
- package/contracts/registry/RegistryServiceManager.sol +4 -4
- package/contracts/registry/ReleaseLifecycle.sol +6 -3
- package/contracts/registry/ReleaseRegistry.sol +496 -0
- package/contracts/registry/ServiceAuthorizationV3.sol +13 -15
- package/contracts/registry/TokenRegistry.sol +2 -2
- package/contracts/shared/Component.sol +38 -43
- package/contracts/shared/ComponentService.sol +88 -28
- package/contracts/shared/ComponentServiceManager.sol +10 -7
- package/contracts/shared/ComponentVerifyingService.sol +2 -3
- package/contracts/shared/ContractLib.sol +38 -0
- package/contracts/shared/IComponent.sol +7 -4
- package/contracts/shared/IComponentService.sol +15 -9
- package/contracts/shared/IInstanceLinkedComponent.sol +9 -10
- package/contracts/shared/ILifecycle.sol +3 -1
- package/contracts/shared/IPolicyHolder.sol +12 -22
- package/contracts/shared/IService.sol +1 -1
- package/contracts/shared/{ERC165.sol → InitializableERC165.sol} +3 -3
- package/contracts/shared/InstanceLinkedComponent.sol +26 -6
- package/contracts/shared/KeyValueStore.sol +1 -1
- package/contracts/shared/Lifecycle.sol +13 -2
- package/contracts/shared/{NftIdSetManager.sol → NftIdSet.sol} +1 -1
- package/contracts/shared/NftOwnable.sol +7 -7
- package/contracts/shared/PolicyHolder.sol +17 -57
- package/contracts/shared/Registerable.sol +4 -4
- package/contracts/shared/RegistryLinked.sol +3 -2
- package/contracts/shared/Service.sol +19 -15
- package/contracts/shared/TokenHandler.sol +100 -19
- package/contracts/shared/TokenHandlerDeployerLib.sol +12 -0
- package/contracts/staking/IStaking.sol +3 -3
- package/contracts/staking/IStakingService.sol +12 -5
- package/contracts/staking/StakeManagerLib.sol +18 -25
- package/contracts/staking/Staking.sol +27 -42
- package/contracts/staking/StakingManager.sol +10 -12
- package/contracts/staking/StakingReader.sol +23 -20
- package/contracts/staking/StakingService.sol +10 -14
- package/contracts/staking/StakingServiceManager.sol +4 -4
- package/contracts/staking/StakingStore.sol +12 -22
- package/contracts/staking/TargetManagerLib.sol +7 -3
- package/contracts/type/Amount.sol +27 -5
- package/contracts/type/Blocknumber.sol +7 -1
- package/contracts/type/ClaimId.sol +6 -1
- package/contracts/type/NftId.sol +1 -0
- package/contracts/type/ObjectType.sol +19 -18
- package/contracts/type/PayoutId.sol +10 -10
- package/contracts/type/Referral.sol +1 -0
- package/contracts/type/RiskId.sol +15 -1
- package/contracts/type/Seconds.sol +21 -1
- package/contracts/type/StateId.sol +15 -1
- package/contracts/type/Timestamp.sol +11 -1
- package/contracts/type/UFixed.sol +33 -10
- package/contracts/type/Version.sol +3 -1
- package/contracts/{shared → upgradeability}/ProxyManager.sol +70 -38
- package/contracts/{shared → upgradeability}/UpgradableProxyWithAdmin.sol +1 -3
- package/contracts/{shared → upgradeability}/Versionable.sol +2 -2
- package/package.json +2 -1
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +0 -4
- package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +0 -703
- package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +0 -4
- package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +0 -4
- package/artifacts/contracts/product/ProductService.sol/ProductService.json +0 -708
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +0 -4
- package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +0 -702
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +0 -4
- package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +0 -1159
- package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +0 -4
- package/artifacts/contracts/shared/ERC165.sol/ERC165.json +0 -73
- package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +0 -4
- package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +0 -39
- package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +0 -4
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +0 -4
- package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +0 -617
- package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +0 -4
- package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +0 -4
- package/contracts/product/ProductServiceManager.sol +0 -42
- package/contracts/registry/ReleaseManager.sol +0 -487
- package/contracts/shared/InitializableCustom.sol +0 -177
- /package/contracts/{shared → upgradeability}/IVersionable.sol +0 -0
@@ -0,0 +1,496 @@
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
2
|
+
pragma solidity ^0.8.20;
|
3
|
+
|
4
|
+
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
|
5
|
+
import {AccessManaged} from "@openzeppelin/contracts/access/manager/AccessManaged.sol";
|
6
|
+
|
7
|
+
import {NftId} from "../type/NftId.sol";
|
8
|
+
import {ObjectType, ObjectTypeLib, POOL, RELEASE, REGISTRY, SERVICE, STAKING} from "../type/ObjectType.sol";
|
9
|
+
import {TimestampLib, zeroTimestamp} from "../type/Timestamp.sol";
|
10
|
+
import {Seconds} from "../type/Seconds.sol";
|
11
|
+
import {StateId, SCHEDULED, DEPLOYING, DEPLOYED, SKIPPED, ACTIVE, PAUSED} from "../type/StateId.sol";
|
12
|
+
import {VersionPart, VersionPartLib} from "../type/Version.sol";
|
13
|
+
|
14
|
+
import {IService} from "../shared/IService.sol";
|
15
|
+
import {IRegisterable} from "../shared/IRegisterable.sol";
|
16
|
+
|
17
|
+
import {IRegistry} from "./IRegistry.sol";
|
18
|
+
import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
|
19
|
+
import {IServiceAuthorization} from "../authorization/IServiceAuthorization.sol";
|
20
|
+
import {RegistryAdmin} from "./RegistryAdmin.sol";
|
21
|
+
import {Registry} from "./Registry.sol";
|
22
|
+
import {ReleaseLifecycle} from "./ReleaseLifecycle.sol";
|
23
|
+
|
24
|
+
// TODO rename to something that does not end with 'Manager'
|
25
|
+
// everywhere else *Manager points to an upgradeable contract
|
26
|
+
contract ReleaseRegistry is
|
27
|
+
AccessManaged,
|
28
|
+
ReleaseLifecycle,
|
29
|
+
IRegistryLinked
|
30
|
+
{
|
31
|
+
using ObjectTypeLib for ObjectType;
|
32
|
+
|
33
|
+
uint256 public constant INITIAL_GIF_VERSION = 3;// first active version
|
34
|
+
|
35
|
+
event LogReleaseCreation(VersionPart version, bytes32 salt);
|
36
|
+
event LogReleaseActivation(VersionPart version);
|
37
|
+
event LogReleaseDisabled(VersionPart version);
|
38
|
+
event LogReleaseEnabled(VersionPart version);
|
39
|
+
|
40
|
+
// constructor
|
41
|
+
error ErrorReleaseRegistryNotRegistry(Registry registry);
|
42
|
+
|
43
|
+
// _verifyServiceAuthorization
|
44
|
+
error ErrorReleaseRegistryNotServiceAuth(address notAuth);
|
45
|
+
error ErrorReleaseRegistryServiceAuthVersionMismatch(IServiceAuthorization auth, VersionPart expected, VersionPart actual);
|
46
|
+
error ErrorReleaseRegistryServiceAuthDomainsZero(IServiceAuthorization auth, VersionPart version);
|
47
|
+
|
48
|
+
// registerService
|
49
|
+
error ErrorReleaseRegistryServiceAddressMismatch(address expected, address actual);
|
50
|
+
|
51
|
+
// activateNextRelease
|
52
|
+
error ErrorReleaseRegistryRegistryServiceMissing(VersionPart releaseVersion);
|
53
|
+
|
54
|
+
// _verifyService
|
55
|
+
error ErrorReleaseRegistryNotService(address notService);
|
56
|
+
error ErrorReleaseRegistryServiceAuthorityMismatch(IService service, address serviceAuthority, address releaseAuthority);
|
57
|
+
error ErrorReleaseRegistryServiceVersionMismatch(IService service, VersionPart serviceVersion, VersionPart releaseVersion);
|
58
|
+
error ErrorReleaseRegistryServiceDomainMismatch(IService service, ObjectType expectedDomain, ObjectType actualDomain);
|
59
|
+
|
60
|
+
// _verifyServiceInfo
|
61
|
+
error ErrorReleaseRegistryServiceInfoAddressInvalid(IService service, address expected);
|
62
|
+
error ErrorReleaseRegistryServiceInfoInterceptorInvalid(IService service, bool isInterceptor);
|
63
|
+
error ErrorReleaseRegistryServiceInfoTypeInvalid(IService service, ObjectType expected, ObjectType found);
|
64
|
+
error ErrorReleaseRegistryServiceInfoOwnerInvalid(IService service, address expected, address found);
|
65
|
+
error ErrorReleaseRegistryServiceSelfRegistration(IService service);
|
66
|
+
error ErrorReleaseRegistryServiceOwnerRegistered(IService service, address owner);
|
67
|
+
|
68
|
+
Seconds public constant MIN_DISABLE_DELAY = Seconds.wrap(60 * 24 * 365); // 1 year
|
69
|
+
|
70
|
+
RegistryAdmin public immutable _admin;
|
71
|
+
Registry public immutable _registry;
|
72
|
+
|
73
|
+
mapping(VersionPart version => IRegistry.ReleaseInfo info) internal _releaseInfo;
|
74
|
+
uint256 _releases;
|
75
|
+
|
76
|
+
VersionPart internal _latest; // latest active version
|
77
|
+
VersionPart internal _next; // version to create and activate
|
78
|
+
|
79
|
+
uint256 internal _registeredServices;
|
80
|
+
uint256 internal _servicesToRegister;
|
81
|
+
|
82
|
+
constructor(Registry registry)
|
83
|
+
AccessManaged(msg.sender)
|
84
|
+
{
|
85
|
+
// TODO move this part to RegistryLinked constructor
|
86
|
+
if(!_isRegistry(address(registry))) {
|
87
|
+
revert ErrorReleaseRegistryNotRegistry(registry);
|
88
|
+
}
|
89
|
+
|
90
|
+
setAuthority(registry.getAuthority());
|
91
|
+
|
92
|
+
_registry = registry;
|
93
|
+
_admin = RegistryAdmin(_registry.getRegistryAdminAddress());
|
94
|
+
|
95
|
+
_next = VersionPartLib.toVersionPart(INITIAL_GIF_VERSION - 1);
|
96
|
+
}
|
97
|
+
|
98
|
+
/// @dev sets previous release into SKIPPED state if it was created but not activated
|
99
|
+
/// sets next release into state SCHEDULED
|
100
|
+
function createNextRelease()
|
101
|
+
external
|
102
|
+
restricted() // GIF_ADMIN_ROLE
|
103
|
+
returns(VersionPart)
|
104
|
+
{
|
105
|
+
VersionPart version = _next;
|
106
|
+
|
107
|
+
if(isValidTransition(RELEASE(), _releaseInfo[version].state, SKIPPED())) {
|
108
|
+
_releaseInfo[version].state = SKIPPED();
|
109
|
+
}
|
110
|
+
|
111
|
+
version = VersionPartLib.toVersionPart(version.toInt() + 1);
|
112
|
+
|
113
|
+
_next = version;
|
114
|
+
_releaseInfo[version].version = version;
|
115
|
+
_releaseInfo[version].state = getInitialState(RELEASE());
|
116
|
+
_servicesToRegister = 0;
|
117
|
+
_registeredServices = 0;
|
118
|
+
|
119
|
+
return _next;
|
120
|
+
}
|
121
|
+
|
122
|
+
function prepareNextRelease(
|
123
|
+
IServiceAuthorization serviceAuthorization,
|
124
|
+
bytes32 salt
|
125
|
+
)
|
126
|
+
external
|
127
|
+
restricted() // GIF_MANAGER_ROLE
|
128
|
+
returns(
|
129
|
+
address releaseAuthority,
|
130
|
+
VersionPart releaseVersion,
|
131
|
+
bytes32 releaseSalt
|
132
|
+
)
|
133
|
+
{
|
134
|
+
releaseVersion = _next;
|
135
|
+
|
136
|
+
// release can transition into DEPLOYING state
|
137
|
+
checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), SCHEDULED(), DEPLOYING());
|
138
|
+
|
139
|
+
uint256 serviceDomainsCount = _verifyServiceAuthorization(serviceAuthorization, releaseVersion, salt);
|
140
|
+
|
141
|
+
releaseAuthority = _admin.authority();
|
142
|
+
releaseSalt = salt;
|
143
|
+
// ensures unique salt
|
144
|
+
// TODO CreateX have clones capability also
|
145
|
+
// what would releaseSalt look like if used with CreateX in pemissioned mode?
|
146
|
+
/*releaseSalt = keccak256(
|
147
|
+
bytes.concat(
|
148
|
+
bytes32(releaseVersion.toInt()),
|
149
|
+
salt));*/
|
150
|
+
|
151
|
+
_servicesToRegister = serviceDomainsCount;
|
152
|
+
_releaseInfo[releaseVersion].state = DEPLOYING();
|
153
|
+
_releaseInfo[releaseVersion].salt = releaseSalt;
|
154
|
+
// TODO allow for the same serviceAuthorization address to be used for multiple releases?
|
155
|
+
_releaseInfo[releaseVersion].auth = serviceAuthorization;
|
156
|
+
//_releaseInfo[releaseVersion].authority = releaseAuthority;
|
157
|
+
|
158
|
+
emit LogReleaseCreation(releaseVersion, releaseSalt);
|
159
|
+
}
|
160
|
+
|
161
|
+
function registerService(IService service)
|
162
|
+
external
|
163
|
+
restricted // GIF_MANAGER_ROLE
|
164
|
+
returns(NftId nftId)
|
165
|
+
{
|
166
|
+
VersionPart releaseVersion = _next;
|
167
|
+
|
168
|
+
// release can transition to DEPLOYED state
|
169
|
+
checkTransition(_releaseInfo[releaseVersion].state, RELEASE(), DEPLOYING(), DEPLOYED());
|
170
|
+
|
171
|
+
address releaseAuthority = _admin.authority();
|
172
|
+
IServiceAuthorization serviceAuth = _releaseInfo[releaseVersion].auth;
|
173
|
+
ObjectType expectedDomain = serviceAuth.getServiceDomain(_registeredServices);
|
174
|
+
|
175
|
+
// service can work with release registry and release version
|
176
|
+
(
|
177
|
+
IRegistry.ObjectInfo memory info,
|
178
|
+
ObjectType serviceDomain,
|
179
|
+
VersionPart serviceVersion
|
180
|
+
//,string memory serviceName
|
181
|
+
) = _verifyService(
|
182
|
+
service,
|
183
|
+
releaseAuthority,
|
184
|
+
releaseVersion,
|
185
|
+
expectedDomain
|
186
|
+
);
|
187
|
+
|
188
|
+
//_releaseInfo[releaseVersion].addresses.push(address(service)); // TODO get this info from auth contract?
|
189
|
+
//_releaseInfo[releaseVersion].domains.push(serviceDomain);
|
190
|
+
//_releaseInfo[releaseVersion].names.push(serviceName); // TODO if needed read in _verifyService()
|
191
|
+
|
192
|
+
_registeredServices++; // TODO use releaseInfo.someArray.length instead of _registeredServices
|
193
|
+
|
194
|
+
// release fully deployed
|
195
|
+
if(_servicesToRegister == _registeredServices) {
|
196
|
+
_releaseInfo[releaseVersion].state = DEPLOYED();
|
197
|
+
}
|
198
|
+
|
199
|
+
// TODO: service address matches defined in release auth (precalculated one)
|
200
|
+
// revert ErrorReleaseRegistryServiceAddressMismatch()
|
201
|
+
|
202
|
+
// setup service authorization
|
203
|
+
_admin.authorizeService(
|
204
|
+
serviceAuth,
|
205
|
+
service,
|
206
|
+
serviceDomain,
|
207
|
+
releaseVersion);
|
208
|
+
|
209
|
+
// register service with registry
|
210
|
+
nftId = _registry.registerService(info, serviceVersion, serviceDomain);
|
211
|
+
service.linkToRegisteredNftId();
|
212
|
+
}
|
213
|
+
// TODO return activated version
|
214
|
+
function activateNextRelease()
|
215
|
+
external
|
216
|
+
restricted // GIF_ADMIN_ROLE
|
217
|
+
{
|
218
|
+
VersionPart version = _next;
|
219
|
+
|
220
|
+
// release can transition to ACTIVE state
|
221
|
+
checkTransition(_releaseInfo[version].state, RELEASE(), DEPLOYED(), ACTIVE());
|
222
|
+
|
223
|
+
_latest = version;
|
224
|
+
_releases++;
|
225
|
+
_releaseInfo[version].state = ACTIVE();
|
226
|
+
_releaseInfo[version].activatedAt = TimestampLib.blockTimestamp();
|
227
|
+
|
228
|
+
// grant special roles for registry/staking/pool services
|
229
|
+
// this will enable access to core contracts functions
|
230
|
+
|
231
|
+
// registry service MUST be registered for each release
|
232
|
+
address service = _registry.getServiceAddress(REGISTRY(), version);
|
233
|
+
if(service == address(0)) {
|
234
|
+
revert ErrorReleaseRegistryRegistryServiceMissing(version);
|
235
|
+
}
|
236
|
+
|
237
|
+
_admin.grantServiceRoleForAllVersions(IService(service), REGISTRY());
|
238
|
+
|
239
|
+
service = _registry.getServiceAddress(STAKING(), version);
|
240
|
+
if(service != address(0)) {
|
241
|
+
_admin.grantServiceRoleForAllVersions(IService(service), STAKING());
|
242
|
+
}
|
243
|
+
|
244
|
+
service = _registry.getServiceAddress(POOL(), version);
|
245
|
+
if(service != address(0)) {
|
246
|
+
_admin.grantServiceRoleForAllVersions(IService(service), POOL());
|
247
|
+
}
|
248
|
+
|
249
|
+
// TODO may run out of gas
|
250
|
+
// TODO test how many service can be locked in one transaction
|
251
|
+
// -> add to docs + each release must test for this -> add to release version tests (in test call with some gas limit?)
|
252
|
+
_setReleaseLocked(version, false);
|
253
|
+
|
254
|
+
emit LogReleaseActivation(version);
|
255
|
+
}
|
256
|
+
|
257
|
+
/// @dev stop all operations with release services
|
258
|
+
function pauseRelease(VersionPart version)
|
259
|
+
external
|
260
|
+
restricted // GIF_ADMIN_ROLE
|
261
|
+
{
|
262
|
+
// release can transition to PAUSED state
|
263
|
+
checkTransition(_releaseInfo[version].state, RELEASE(), ACTIVE(), PAUSED());
|
264
|
+
|
265
|
+
_releaseInfo[version].state = PAUSED();
|
266
|
+
_releaseInfo[version].disabledAt = TimestampLib.blockTimestamp();
|
267
|
+
|
268
|
+
_setReleaseLocked(version, true);
|
269
|
+
|
270
|
+
emit LogReleaseDisabled(version);
|
271
|
+
}
|
272
|
+
|
273
|
+
/// @dev resume operations with release services
|
274
|
+
function unpauseRelease(VersionPart version)
|
275
|
+
external
|
276
|
+
restricted // GIF_ADMIN_ROLE
|
277
|
+
{
|
278
|
+
// release can transition to ACTIVE state
|
279
|
+
checkTransition(_releaseInfo[version].state, RELEASE(), PAUSED(), ACTIVE());
|
280
|
+
|
281
|
+
_releaseInfo[version].state = ACTIVE();
|
282
|
+
_releaseInfo[version].disabledAt = zeroTimestamp();
|
283
|
+
|
284
|
+
_setReleaseLocked(version, false);
|
285
|
+
|
286
|
+
emit LogReleaseEnabled(version);
|
287
|
+
}
|
288
|
+
|
289
|
+
//--- view functions ----------------------------------------------------//
|
290
|
+
|
291
|
+
function predictDeterministicAddress(
|
292
|
+
address implementation,
|
293
|
+
bytes32 salt,
|
294
|
+
address deployer
|
295
|
+
) external pure returns (address predicted) {
|
296
|
+
return Clones.predictDeterministicAddress(implementation, salt, deployer);
|
297
|
+
}
|
298
|
+
|
299
|
+
function isActiveRelease(VersionPart version) public view returns(bool) {
|
300
|
+
return _releaseInfo[version].state == ACTIVE();
|
301
|
+
}
|
302
|
+
|
303
|
+
function getReleaseInfo(VersionPart version) external view returns(IRegistry.ReleaseInfo memory) {
|
304
|
+
return _releaseInfo[version];
|
305
|
+
}
|
306
|
+
|
307
|
+
function releases() external view returns (uint) {
|
308
|
+
return _releases;
|
309
|
+
}
|
310
|
+
|
311
|
+
function getNextVersion() public view returns(VersionPart) {
|
312
|
+
return _next;
|
313
|
+
}
|
314
|
+
|
315
|
+
function getLatestVersion() external view returns(VersionPart) {
|
316
|
+
return _latest;
|
317
|
+
}
|
318
|
+
|
319
|
+
function getState(VersionPart version) external view returns (StateId stateId) {
|
320
|
+
return _releaseInfo[version].state;
|
321
|
+
}
|
322
|
+
|
323
|
+
function getRemainingServicesToRegister() external view returns (uint256 services) {
|
324
|
+
return _servicesToRegister - _registeredServices;
|
325
|
+
}
|
326
|
+
|
327
|
+
function getServiceAuthorization(VersionPart version)
|
328
|
+
external
|
329
|
+
view
|
330
|
+
returns (IServiceAuthorization serviceAuthorization)
|
331
|
+
{
|
332
|
+
return _releaseInfo[version].auth;
|
333
|
+
}
|
334
|
+
|
335
|
+
function getRegistryAdmin() external view returns (address) {
|
336
|
+
return address(_admin);
|
337
|
+
}
|
338
|
+
|
339
|
+
//--- IRegistryLinked ------------------------------------------------------//
|
340
|
+
|
341
|
+
function getRegistry() external view returns (IRegistry) {
|
342
|
+
return _registry;
|
343
|
+
}
|
344
|
+
|
345
|
+
//--- private functions ----------------------------------------------------//
|
346
|
+
|
347
|
+
// close / open service targets instead of revoking / granting roles
|
348
|
+
function _setReleaseLocked(VersionPart version, bool locked)
|
349
|
+
private
|
350
|
+
{
|
351
|
+
address service;
|
352
|
+
ObjectType domain;
|
353
|
+
IServiceAuthorization auth = _releaseInfo[version].auth;
|
354
|
+
|
355
|
+
ObjectType[] memory domains = auth.getServiceDomains();
|
356
|
+
for(uint idx = 0; idx < domains.length; idx++)
|
357
|
+
{
|
358
|
+
domain = domains[idx];
|
359
|
+
service = _registry.getServiceAddress(domain, version);
|
360
|
+
assert(service != address(0));
|
361
|
+
|
362
|
+
_admin.setServiceLocked(IService(service), locked);
|
363
|
+
}
|
364
|
+
|
365
|
+
// TODO add check for active/disabled release to core contracts functions interacting with releases
|
366
|
+
}
|
367
|
+
|
368
|
+
function _verifyServiceAuthorization(
|
369
|
+
IServiceAuthorization serviceAuthorization,
|
370
|
+
VersionPart releaseVersion,
|
371
|
+
bytes32 salt
|
372
|
+
)
|
373
|
+
private
|
374
|
+
view
|
375
|
+
returns (uint256 serviceDomainsCount)
|
376
|
+
{
|
377
|
+
// authorization contract supports IServiceAuthorization interface
|
378
|
+
if(!serviceAuthorization.supportsInterface(type(IServiceAuthorization).interfaceId)) {
|
379
|
+
revert ErrorReleaseRegistryNotServiceAuth(address(serviceAuthorization));
|
380
|
+
}
|
381
|
+
|
382
|
+
// authorizaions contract version matches with release version
|
383
|
+
VersionPart authVersion = serviceAuthorization.getRelease();
|
384
|
+
if (releaseVersion != authVersion) {
|
385
|
+
revert ErrorReleaseRegistryServiceAuthVersionMismatch(serviceAuthorization, releaseVersion, authVersion);
|
386
|
+
}
|
387
|
+
|
388
|
+
// sanity check to ensure service domain list is not empty
|
389
|
+
serviceDomainsCount = serviceAuthorization.getServiceDomains().length;
|
390
|
+
if (serviceDomainsCount == 0) {
|
391
|
+
revert ErrorReleaseRegistryServiceAuthDomainsZero(serviceAuthorization, releaseVersion);
|
392
|
+
}
|
393
|
+
}
|
394
|
+
|
395
|
+
// TODO get service names
|
396
|
+
function _verifyService(
|
397
|
+
IService service,
|
398
|
+
address expectedAuthority,
|
399
|
+
VersionPart expectedVersion,
|
400
|
+
ObjectType expectedDomain
|
401
|
+
)
|
402
|
+
internal
|
403
|
+
view
|
404
|
+
returns(
|
405
|
+
IRegistry.ObjectInfo memory serviceInfo,
|
406
|
+
ObjectType serviceDomain,
|
407
|
+
VersionPart serviceVersion
|
408
|
+
)
|
409
|
+
{
|
410
|
+
if(!service.supportsInterface(type(IService).interfaceId)) {
|
411
|
+
revert ErrorReleaseRegistryNotService(address(service));
|
412
|
+
}
|
413
|
+
|
414
|
+
address owner = msg.sender;
|
415
|
+
address serviceAuthority = service.authority();
|
416
|
+
serviceVersion = service.getVersion().toMajorPart();
|
417
|
+
serviceDomain = service.getDomain();// checked in registry
|
418
|
+
serviceInfo = service.getInitialInfo();
|
419
|
+
|
420
|
+
_verifyServiceInfo(service, serviceInfo, owner);
|
421
|
+
|
422
|
+
if(serviceAuthority != expectedAuthority) {
|
423
|
+
revert ErrorReleaseRegistryServiceAuthorityMismatch(
|
424
|
+
service,
|
425
|
+
serviceAuthority,
|
426
|
+
expectedAuthority);
|
427
|
+
}
|
428
|
+
|
429
|
+
if(serviceVersion != expectedVersion) {
|
430
|
+
revert ErrorReleaseRegistryServiceVersionMismatch(
|
431
|
+
service,
|
432
|
+
serviceVersion,
|
433
|
+
expectedVersion);
|
434
|
+
}
|
435
|
+
|
436
|
+
if(serviceDomain != expectedDomain) {
|
437
|
+
revert ErrorReleaseRegistryServiceDomainMismatch(
|
438
|
+
service,
|
439
|
+
expectedDomain,
|
440
|
+
serviceDomain);
|
441
|
+
}
|
442
|
+
}
|
443
|
+
|
444
|
+
|
445
|
+
function _verifyServiceInfo(
|
446
|
+
IService service,
|
447
|
+
IRegistry.ObjectInfo memory info,
|
448
|
+
address expectedOwner // assume always valid, can not be 0
|
449
|
+
)
|
450
|
+
internal
|
451
|
+
view
|
452
|
+
{
|
453
|
+
if(info.objectAddress != address(service)) {
|
454
|
+
revert ErrorReleaseRegistryServiceInfoAddressInvalid(service, info.objectAddress);
|
455
|
+
}
|
456
|
+
|
457
|
+
if(info.isInterceptor != false) { // service is never interceptor
|
458
|
+
revert ErrorReleaseRegistryServiceInfoInterceptorInvalid(service, info.isInterceptor);
|
459
|
+
}
|
460
|
+
|
461
|
+
if(info.objectType != SERVICE()) {
|
462
|
+
revert ErrorReleaseRegistryServiceInfoTypeInvalid(service, SERVICE(), info.objectType);
|
463
|
+
}
|
464
|
+
|
465
|
+
address owner = info.initialOwner;
|
466
|
+
|
467
|
+
if(owner != expectedOwner) { // registerable owner protection
|
468
|
+
revert ErrorReleaseRegistryServiceInfoOwnerInvalid(service, expectedOwner, owner);
|
469
|
+
}
|
470
|
+
|
471
|
+
if(owner == address(service)) {
|
472
|
+
revert ErrorReleaseRegistryServiceSelfRegistration(service);
|
473
|
+
}
|
474
|
+
|
475
|
+
if(_registry.isRegistered(owner)) {
|
476
|
+
revert ErrorReleaseRegistryServiceOwnerRegistered(service, owner);
|
477
|
+
}
|
478
|
+
}
|
479
|
+
|
480
|
+
/// @dev returns true iff a the address passes some simple proxy tests.
|
481
|
+
function _isRegistry(address registryAddress) internal view returns (bool) {
|
482
|
+
|
483
|
+
// zero address is certainly not registry
|
484
|
+
if (registryAddress == address(0)) {
|
485
|
+
return false;
|
486
|
+
}
|
487
|
+
// TODO try catch and return false in case of revert or just panic
|
488
|
+
// check if contract returns a zero nft id for its own address
|
489
|
+
if (IRegistry(registryAddress).getNftIdForAddress(registryAddress).eqz()) {
|
490
|
+
return false;
|
491
|
+
}
|
492
|
+
|
493
|
+
return true;
|
494
|
+
}
|
495
|
+
}
|
496
|
+
|
@@ -2,14 +2,12 @@
|
|
2
2
|
pragma solidity ^0.8.20;
|
3
3
|
|
4
4
|
import {
|
5
|
-
ALL, REGISTRY,
|
5
|
+
ALL, REGISTRY, PRODUCT, ORACLE, POOL, INSTANCE, COMPONENT, DISTRIBUTION, DISTRIBUTOR, APPLICATION, POLICY, CLAIM, BUNDLE, STAKING, PRICE
|
6
6
|
} from "../../contracts/type/ObjectType.sol";
|
7
7
|
|
8
|
-
import {ComponentService} from "../shared/ComponentService.sol";
|
9
8
|
import {IAccess} from "../authorization/IAccess.sol";
|
10
9
|
import {IBundleService} from "../pool/IBundleService.sol";
|
11
10
|
import {IDistributionService} from "../distribution/IDistributionService.sol";
|
12
|
-
import {InstanceService} from "../instance/InstanceService.sol";
|
13
11
|
import {IInstanceService} from "../instance/IInstanceService.sol";
|
14
12
|
import {IPoolService} from "../pool/IPoolService.sol";
|
15
13
|
import {IStakingService} from "../staking/IStakingService.sol";
|
@@ -21,8 +19,8 @@ contract ServiceAuthorizationV3
|
|
21
19
|
is ServiceAuthorization
|
22
20
|
{
|
23
21
|
|
24
|
-
constructor(
|
25
|
-
ServiceAuthorization(commitHash)
|
22
|
+
constructor(bytes memory commitHash)
|
23
|
+
ServiceAuthorization(commitHash, 3)
|
26
24
|
{}
|
27
25
|
|
28
26
|
function _setupDomains()
|
@@ -39,9 +37,9 @@ contract ServiceAuthorizationV3
|
|
39
37
|
_authorizeDomain(POOL(), address(8));
|
40
38
|
_authorizeDomain(ORACLE(), address(9));
|
41
39
|
_authorizeDomain(PRODUCT(), address(10));
|
42
|
-
_authorizeDomain(
|
43
|
-
_authorizeDomain(
|
44
|
-
_authorizeDomain(
|
40
|
+
_authorizeDomain(POLICY(), address(11));
|
41
|
+
_authorizeDomain(CLAIM(), address(12));
|
42
|
+
_authorizeDomain(APPLICATION(), address(13));
|
45
43
|
}
|
46
44
|
|
47
45
|
|
@@ -69,14 +67,14 @@ contract ServiceAuthorizationV3
|
|
69
67
|
functions = _authorizeForService(REGISTRY(), APPLICATION());
|
70
68
|
_authorize(functions, IRegistryService.registerPolicy.selector, "registerPolicy");
|
71
69
|
|
72
|
-
functions = _authorizeForService(REGISTRY(), POOL());
|
73
|
-
_authorize(functions, IRegistryService.registerPool.selector, "registerPool");
|
70
|
+
// functions = _authorizeForService(REGISTRY(), POOL());
|
71
|
+
// _authorize(functions, IRegistryService.registerPool.selector, "registerPool");
|
74
72
|
|
75
73
|
functions = _authorizeForService(REGISTRY(), BUNDLE());
|
76
74
|
_authorize(functions, IRegistryService.registerBundle.selector, "registerBundle");
|
77
75
|
|
78
76
|
functions = _authorizeForService(REGISTRY(), DISTRIBUTION());
|
79
|
-
_authorize(functions, IRegistryService.registerDistribution.selector, "registerDistribution");
|
77
|
+
// _authorize(functions, IRegistryService.registerDistribution.selector, "registerDistribution");
|
80
78
|
_authorize(functions, IRegistryService.registerDistributor.selector, "registerDistributor");
|
81
79
|
|
82
80
|
functions = _authorizeForService(REGISTRY(), COMPONENT());
|
@@ -88,8 +86,8 @@ contract ServiceAuthorizationV3
|
|
88
86
|
functions = _authorizeForService(REGISTRY(), STAKING());
|
89
87
|
_authorize(functions, IRegistryService.registerStake.selector, "registerStake");
|
90
88
|
|
91
|
-
functions = _authorizeForService(REGISTRY(), PRODUCT());
|
92
|
-
_authorize(functions, IRegistryService.registerProduct.selector, "registerProduct");
|
89
|
+
// functions = _authorizeForService(REGISTRY(), PRODUCT());
|
90
|
+
// _authorize(functions, IRegistryService.registerProduct.selector, "registerProduct");
|
93
91
|
}
|
94
92
|
|
95
93
|
|
@@ -163,6 +161,7 @@ contract ServiceAuthorizationV3
|
|
163
161
|
|
164
162
|
functions = _authorizeForService(DISTRIBUTION(), POLICY());
|
165
163
|
_authorize(functions, IDistributionService.processSale.selector, "processSale");
|
164
|
+
_authorize(functions, IDistributionService.processReferral.selector, "processReferral");
|
166
165
|
}
|
167
166
|
|
168
167
|
|
@@ -175,11 +174,10 @@ contract ServiceAuthorizationV3
|
|
175
174
|
functions = _authorizeForService(POOL(), POLICY());
|
176
175
|
_authorize(functions, IPoolService.lockCollateral.selector, "lockCollateral");
|
177
176
|
_authorize(functions, IPoolService.releaseCollateral.selector, "releaseCollateral");
|
178
|
-
_authorize(functions, IPoolService.reduceCollateral.selector, "reduceCollateral");
|
179
177
|
_authorize(functions, IPoolService.processSale.selector, "processSale");
|
180
178
|
|
181
179
|
functions = _authorizeForService(POOL(), CLAIM());
|
182
|
-
_authorize(functions, IPoolService.
|
180
|
+
_authorize(functions, IPoolService.processPayout.selector, "processPayout");
|
183
181
|
}
|
184
182
|
|
185
183
|
|
@@ -12,7 +12,7 @@ import {IRegisterable} from "../shared/IRegisterable.sol";
|
|
12
12
|
|
13
13
|
import {IRegistry} from "./IRegistry.sol";
|
14
14
|
import {IRegistryLinked} from "../shared/IRegistryLinked.sol";
|
15
|
-
import {
|
15
|
+
import {ReleaseRegistry} from "./ReleaseRegistry.sol";
|
16
16
|
import {RegistryAdmin} from "./RegistryAdmin.sol";
|
17
17
|
|
18
18
|
|
@@ -49,7 +49,7 @@ contract TokenRegistry is
|
|
49
49
|
TokenInfo [] internal _token;
|
50
50
|
|
51
51
|
IRegistry internal _registry;
|
52
|
-
|
52
|
+
ReleaseRegistry internal _releaseRegistry;
|
53
53
|
IERC20Metadata internal _dipToken;
|
54
54
|
|
55
55
|
/// @dev enforces msg.sender is owner of nft (or initial owner of nft ownable)
|