@etherisc/gif-next 0.0.2-fd4931b-974 → 0.0.2-fd9539f-062

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.
Files changed (432) hide show
  1. package/README.md +20 -3
  2. package/artifacts/contracts/distribution/Distribution.sol/Distribution.dbg.json +1 -1
  3. package/artifacts/contracts/distribution/Distribution.sol/Distribution.json +19 -13
  4. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.dbg.json +1 -1
  5. package/artifacts/contracts/distribution/DistributionService.sol/DistributionService.json +115 -80
  6. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.dbg.json +1 -1
  7. package/artifacts/contracts/distribution/DistributionServiceManager.sol/DistributionServiceManager.json +86 -59
  8. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.dbg.json +1 -1
  9. package/artifacts/contracts/distribution/IDistributionComponent.sol/IDistributionComponent.json +11 -5
  10. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.dbg.json +1 -1
  11. package/artifacts/contracts/distribution/IDistributionService.sol/IDistributionService.json +20 -1
  12. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.dbg.json +1 -1
  13. package/artifacts/contracts/instance/BundleManager.sol/BundleManager.json +32 -101
  14. package/artifacts/contracts/instance/IInstance.sol/IInstance.dbg.json +1 -1
  15. package/artifacts/contracts/instance/IInstance.sol/IInstance.json +83 -71
  16. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.dbg.json +1 -1
  17. package/artifacts/contracts/instance/IInstanceService.sol/IInstanceService.json +121 -12
  18. package/artifacts/contracts/instance/Instance.sol/Instance.dbg.json +1 -1
  19. package/artifacts/contracts/instance/Instance.sol/Instance.json +105 -85
  20. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.dbg.json +4 -0
  21. package/artifacts/contracts/instance/InstanceAdmin.sol/InstanceAdmin.json +708 -0
  22. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.dbg.json +1 -1
  23. package/artifacts/contracts/instance/InstanceAuthorizationsLib.sol/InstanceAuthorizationsLib.json +125 -29
  24. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.dbg.json +1 -1
  25. package/artifacts/contracts/instance/InstanceReader.sol/InstanceReader.json +195 -64
  26. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.dbg.json +1 -1
  27. package/artifacts/contracts/instance/InstanceService.sol/InstanceService.json +206 -49
  28. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.dbg.json +1 -1
  29. package/artifacts/contracts/instance/InstanceServiceManager.sol/InstanceServiceManager.json +79 -36
  30. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.dbg.json +1 -1
  31. package/artifacts/contracts/instance/InstanceStore.sol/InstanceStore.json +248 -118
  32. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.dbg.json +1 -1
  33. package/artifacts/contracts/instance/base/BalanceStore.sol/BalanceStore.json +2 -2
  34. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.dbg.json +1 -1
  35. package/artifacts/contracts/instance/base/Cloneable.sol/Cloneable.json +0 -53
  36. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.dbg.json +4 -0
  37. package/artifacts/contracts/instance/base/ObjectCounter.sol/ObjectCounter.json +10 -0
  38. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.dbg.json +1 -1
  39. package/artifacts/contracts/instance/base/ObjectManager.sol/ObjectManager.json +2 -71
  40. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.dbg.json +1 -1
  41. package/artifacts/contracts/instance/module/IAccess.sol/IAccess.json +8 -116
  42. package/artifacts/contracts/instance/module/IBundle.sol/IBundle.dbg.json +1 -1
  43. package/artifacts/contracts/instance/module/IComponents.sol/IComponents.dbg.json +1 -1
  44. package/artifacts/contracts/instance/module/IDistribution.sol/IDistribution.dbg.json +1 -1
  45. package/artifacts/contracts/instance/module/IPolicy.sol/IPolicy.dbg.json +1 -1
  46. package/artifacts/contracts/instance/module/IRisk.sol/IRisk.dbg.json +1 -1
  47. package/artifacts/contracts/mock/Dip.sol/Dip.dbg.json +1 -1
  48. package/artifacts/contracts/mock/Dip.sol/Dip.json +2 -2
  49. package/artifacts/contracts/oracle/IOracle.sol/IOracle.dbg.json +4 -0
  50. package/artifacts/contracts/oracle/IOracle.sol/IOracle.json +10 -0
  51. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.dbg.json +4 -0
  52. package/artifacts/contracts/oracle/IOracleComponent.sol/IOracleComponent.json +759 -0
  53. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.dbg.json +4 -0
  54. package/artifacts/contracts/oracle/IOracleService.sol/IOracleService.json +675 -0
  55. package/artifacts/contracts/oracle/Oracle.sol/Oracle.dbg.json +4 -0
  56. package/artifacts/contracts/oracle/Oracle.sol/Oracle.json +1146 -0
  57. package/artifacts/contracts/oracle/OracleService.sol/OracleService.dbg.json +4 -0
  58. package/artifacts/contracts/oracle/OracleService.sol/OracleService.json +1034 -0
  59. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.dbg.json +4 -0
  60. package/artifacts/contracts/oracle/OracleServiceManager.sol/OracleServiceManager.json +730 -0
  61. package/artifacts/contracts/pool/BundleService.sol/BundleService.dbg.json +1 -1
  62. package/artifacts/contracts/pool/BundleService.sol/BundleService.json +91 -48
  63. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.dbg.json +1 -1
  64. package/artifacts/contracts/pool/BundleServiceManager.sol/BundleServiceManager.json +74 -43
  65. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.dbg.json +1 -1
  66. package/artifacts/contracts/pool/IBundleService.sol/IBundleService.json +20 -1
  67. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.dbg.json +1 -1
  68. package/artifacts/contracts/pool/IPoolComponent.sol/IPoolComponent.json +11 -5
  69. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.dbg.json +1 -1
  70. package/artifacts/contracts/pool/IPoolService.sol/IPoolService.json +35 -1
  71. package/artifacts/contracts/pool/Pool.sol/Pool.dbg.json +1 -1
  72. package/artifacts/contracts/pool/Pool.sol/Pool.json +18 -12
  73. package/artifacts/contracts/pool/PoolService.sol/PoolService.dbg.json +1 -1
  74. package/artifacts/contracts/pool/PoolService.sol/PoolService.json +84 -42
  75. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.dbg.json +1 -1
  76. package/artifacts/contracts/pool/PoolServiceManager.sol/PoolServiceManager.json +63 -40
  77. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.dbg.json +1 -1
  78. package/artifacts/contracts/product/ApplicationService.sol/ApplicationService.json +79 -36
  79. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.dbg.json +1 -1
  80. package/artifacts/contracts/product/ApplicationServiceManager.sol/ApplicationServiceManager.json +68 -37
  81. package/artifacts/contracts/product/ClaimService.sol/ClaimService.dbg.json +1 -1
  82. package/artifacts/contracts/product/ClaimService.sol/ClaimService.json +119 -68
  83. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.dbg.json +1 -1
  84. package/artifacts/contracts/product/ClaimServiceManager.sol/ClaimServiceManager.json +88 -53
  85. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.dbg.json +1 -1
  86. package/artifacts/contracts/product/IApplicationService.sol/IApplicationService.json +20 -1
  87. package/artifacts/contracts/product/IClaimService.sol/IClaimService.dbg.json +1 -1
  88. package/artifacts/contracts/product/IClaimService.sol/IClaimService.json +20 -1
  89. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.dbg.json +1 -1
  90. package/artifacts/contracts/product/IPolicyService.sol/IPolicyService.json +20 -1
  91. package/artifacts/contracts/product/IPricingService.sol/IPricingService.dbg.json +1 -1
  92. package/artifacts/contracts/product/IPricingService.sol/IPricingService.json +20 -1
  93. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.dbg.json +1 -1
  94. package/artifacts/contracts/product/IProductComponent.sol/IProductComponent.json +11 -5
  95. package/artifacts/contracts/product/IProductService.sol/IProductService.dbg.json +1 -1
  96. package/artifacts/contracts/product/IProductService.sol/IProductService.json +20 -1
  97. package/artifacts/contracts/product/PolicyService.sol/PolicyService.dbg.json +1 -1
  98. package/artifacts/contracts/product/PolicyService.sol/PolicyService.json +97 -46
  99. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.dbg.json +1 -1
  100. package/artifacts/contracts/product/PolicyServiceManager.sol/PolicyServiceManager.json +77 -42
  101. package/artifacts/contracts/product/PricingService.sol/PricingService.dbg.json +1 -1
  102. package/artifacts/contracts/product/PricingService.sol/PricingService.json +105 -62
  103. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.dbg.json +1 -1
  104. package/artifacts/contracts/product/PricingServiceManager.sol/PricingServiceManager.json +81 -50
  105. package/artifacts/contracts/product/Product.sol/Product.dbg.json +1 -1
  106. package/artifacts/contracts/product/Product.sol/Product.json +18 -12
  107. package/artifacts/contracts/product/ProductService.sol/ProductService.dbg.json +1 -1
  108. package/artifacts/contracts/product/ProductService.sol/ProductService.json +61 -26
  109. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.dbg.json +1 -1
  110. package/artifacts/contracts/product/ProductServiceManager.sol/ProductServiceManager.json +59 -32
  111. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.dbg.json +1 -1
  112. package/artifacts/contracts/registry/ChainNft.sol/ChainNft.json +2 -2
  113. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.dbg.json +1 -1
  114. package/artifacts/contracts/registry/IRegistry.sol/IRegistry.json +82 -45
  115. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.dbg.json +1 -1
  116. package/artifacts/contracts/registry/IRegistryService.sol/IRegistryService.json +31 -1
  117. package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.dbg.json +4 -0
  118. package/artifacts/contracts/registry/IServiceAuthorization.sol/IServiceAuthorization.json +129 -0
  119. package/artifacts/contracts/registry/ITransferInterceptor.sol/ITransferInterceptor.dbg.json +1 -1
  120. package/artifacts/contracts/registry/Registry.sol/Registry.dbg.json +1 -1
  121. package/artifacts/contracts/registry/Registry.sol/Registry.json +254 -97
  122. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.dbg.json +4 -0
  123. package/artifacts/contracts/registry/RegistryAdmin.sol/RegistryAdmin.json +1901 -0
  124. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.dbg.json +1 -1
  125. package/artifacts/contracts/registry/RegistryService.sol/RegistryService.json +69 -15
  126. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.dbg.json +1 -1
  127. package/artifacts/contracts/registry/RegistryServiceManager.sol/RegistryServiceManager.json +51 -35
  128. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.dbg.json +1 -1
  129. package/artifacts/contracts/registry/ReleaseManager.sol/ReleaseManager.json +288 -182
  130. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.dbg.json +4 -0
  131. package/artifacts/contracts/registry/ServiceAuthorization.sol/ServiceAuthorization.json +171 -0
  132. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.dbg.json +4 -0
  133. package/artifacts/contracts/registry/ServiceAuthorizationV3.sol/ServiceAuthorizationV3.json +187 -0
  134. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.dbg.json +1 -1
  135. package/artifacts/contracts/registry/TokenRegistry.sol/TokenRegistry.json +46 -177
  136. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.dbg.json +4 -0
  137. package/artifacts/contracts/shared/AccessAdmin.sol/AccessAdmin.json +1559 -0
  138. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.dbg.json +4 -0
  139. package/artifacts/contracts/shared/AccessManagerCustom.sol/AccessManagerCustom.json +1193 -0
  140. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.dbg.json +4 -0
  141. package/artifacts/contracts/shared/AccessManagerExtended.sol/AccessManagerExtended.json +1747 -0
  142. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.dbg.json +4 -0
  143. package/artifacts/contracts/shared/AccessManagerExtendedInitializeable.sol/AccessManagerExtendedInitializeable.json +1760 -0
  144. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.dbg.json +4 -0
  145. package/artifacts/contracts/shared/AccessManagerExtendedWithDisable.sol/AccessManagerExtendedWithDisable.json +1838 -0
  146. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.dbg.json +4 -0
  147. package/artifacts/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol/AccessManagerExtendedWithDisableInitializeable.json +1856 -0
  148. package/artifacts/contracts/shared/Component.sol/Component.dbg.json +1 -1
  149. package/artifacts/contracts/shared/Component.sol/Component.json +18 -12
  150. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.dbg.json +1 -1
  151. package/artifacts/contracts/shared/ComponentService.sol/ComponentService.json +119 -69
  152. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.dbg.json +1 -1
  153. package/artifacts/contracts/shared/ComponentServiceManager.sol/ComponentServiceManager.json +85 -54
  154. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.dbg.json +1 -1
  155. package/artifacts/contracts/shared/ComponentVerifyingService.sol/ComponentVerifyingService.json +20 -1
  156. package/artifacts/contracts/shared/ERC165.sol/ERC165.dbg.json +1 -1
  157. package/artifacts/contracts/shared/ERC165.sol/ERC165.json +2 -2
  158. package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.dbg.json +4 -0
  159. package/artifacts/contracts/shared/IAccessAdmin.sol/IAccessAdmin.json +1189 -0
  160. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.dbg.json +4 -0
  161. package/artifacts/contracts/shared/IAccessManagerExtended.sol/IAccessManagerExtended.json +1562 -0
  162. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.dbg.json +4 -0
  163. package/artifacts/contracts/shared/IAccessManagerExtendedWithDisable.sol/IAccessManagerExtendedWithDisable.json +1600 -0
  164. package/artifacts/contracts/shared/IComponent.sol/IComponent.dbg.json +1 -1
  165. package/artifacts/contracts/shared/IComponent.sol/IComponent.json +11 -5
  166. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.dbg.json +1 -1
  167. package/artifacts/contracts/shared/IComponentService.sol/IComponentService.json +27 -1
  168. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.dbg.json +1 -1
  169. package/artifacts/contracts/shared/IInstanceLinkedComponent.sol/IInstanceLinkedComponent.json +11 -5
  170. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.dbg.json +1 -1
  171. package/artifacts/contracts/shared/IKeyValueStore.sol/IKeyValueStore.json +0 -10
  172. package/artifacts/contracts/shared/ILifecycle.sol/ILifecycle.dbg.json +1 -1
  173. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.dbg.json +1 -1
  174. package/artifacts/contracts/shared/INftOwnable.sol/INftOwnable.json +7 -1
  175. package/artifacts/contracts/shared/IPolicyHolder.sol/IPolicyHolder.dbg.json +1 -1
  176. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.dbg.json +1 -1
  177. package/artifacts/contracts/shared/IRegisterable.sol/IRegisterable.json +7 -1
  178. package/artifacts/contracts/shared/IRegistryLinked.sol/IRegistryLinked.dbg.json +1 -1
  179. package/artifacts/contracts/shared/IService.sol/IService.dbg.json +1 -1
  180. package/artifacts/contracts/shared/IService.sol/IService.json +20 -1
  181. package/artifacts/contracts/shared/IVersionable.sol/IVersionable.dbg.json +1 -1
  182. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.dbg.json +4 -0
  183. package/artifacts/contracts/shared/InitializableCustom.sol/InitializableCustom.json +39 -0
  184. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.dbg.json +1 -1
  185. package/artifacts/contracts/shared/InstanceLinkedComponent.sol/InstanceLinkedComponent.json +18 -12
  186. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.dbg.json +1 -1
  187. package/artifacts/contracts/shared/KeyValueStore.sol/KeyValueStore.json +10 -20
  188. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.dbg.json +1 -1
  189. package/artifacts/contracts/shared/Lifecycle.sol/Lifecycle.json +6 -6
  190. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.dbg.json +1 -1
  191. package/artifacts/contracts/shared/NftIdSetManager.sol/NftIdSetManager.json +27 -35
  192. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.dbg.json +1 -1
  193. package/artifacts/contracts/shared/NftOwnable.sol/NftOwnable.json +13 -7
  194. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.dbg.json +1 -1
  195. package/artifacts/contracts/shared/PolicyHolder.sol/PolicyHolder.json +6 -6
  196. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.dbg.json +1 -1
  197. package/artifacts/contracts/shared/ProxyManager.sol/ProxyManager.json +35 -16
  198. package/artifacts/contracts/shared/Registerable.sol/Registerable.dbg.json +1 -1
  199. package/artifacts/contracts/shared/Registerable.sol/Registerable.json +15 -9
  200. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.dbg.json +1 -1
  201. package/artifacts/contracts/shared/RegistryLinked.sol/RegistryLinked.json +2 -2
  202. package/artifacts/contracts/shared/Service.sol/Service.dbg.json +1 -1
  203. package/artifacts/contracts/shared/Service.sol/Service.json +20 -1
  204. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.dbg.json +1 -1
  205. package/artifacts/contracts/shared/TokenHandler.sol/TokenHandler.json +6 -6
  206. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.dbg.json +1 -1
  207. package/artifacts/contracts/shared/UpgradableProxyWithAdmin.sol/UpgradableProxyWithAdmin.json +2 -2
  208. package/artifacts/contracts/shared/Versionable.sol/Versionable.dbg.json +1 -1
  209. package/artifacts/contracts/staking/IStaking.sol/IStaking.dbg.json +1 -1
  210. package/artifacts/contracts/staking/IStaking.sol/IStaking.json +247 -579
  211. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.dbg.json +1 -1
  212. package/artifacts/contracts/staking/IStakingService.sol/IStakingService.json +471 -62
  213. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.dbg.json +4 -0
  214. package/artifacts/contracts/staking/StakeManagerLib.sol/StakeManagerLib.json +460 -0
  215. package/artifacts/contracts/staking/Staking.sol/Staking.dbg.json +1 -1
  216. package/artifacts/contracts/staking/Staking.sol/Staking.json +303 -798
  217. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.dbg.json +1 -1
  218. package/artifacts/contracts/staking/StakingManager.sol/StakingManager.json +81 -164
  219. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.dbg.json +1 -1
  220. package/artifacts/contracts/staking/StakingReader.sol/StakingReader.json +368 -39
  221. package/artifacts/contracts/staking/StakingService.sol/StakingService.dbg.json +1 -1
  222. package/artifacts/contracts/staking/StakingService.sol/StakingService.json +503 -120
  223. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.dbg.json +1 -1
  224. package/artifacts/contracts/staking/StakingServiceManager.sol/StakingServiceManager.json +67 -43
  225. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.dbg.json +4 -0
  226. package/artifacts/contracts/staking/StakingStore.sol/StakingStore.json +2261 -0
  227. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.dbg.json +1 -1
  228. package/artifacts/contracts/staking/TargetManagerLib.sol/TargetManagerLib.json +281 -18
  229. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.dbg.json +1 -1
  230. package/artifacts/contracts/type/AddressSet.sol/LibAddressSet.json +2 -2
  231. package/artifacts/contracts/type/Amount.sol/AmountLib.dbg.json +1 -1
  232. package/artifacts/contracts/type/Amount.sol/AmountLib.json +68 -4
  233. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.dbg.json +1 -1
  234. package/artifacts/contracts/type/Blocknumber.sol/BlocknumberLib.json +40 -2
  235. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.dbg.json +1 -1
  236. package/artifacts/contracts/type/ClaimId.sol/ClaimIdLib.json +4 -4
  237. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.dbg.json +1 -1
  238. package/artifacts/contracts/type/DistributorType.sol/DistributorTypeLib.json +4 -4
  239. package/artifacts/contracts/type/Fee.sol/FeeLib.dbg.json +1 -1
  240. package/artifacts/contracts/type/Fee.sol/FeeLib.json +12 -12
  241. package/artifacts/contracts/type/Key32.sol/Key32Lib.dbg.json +1 -1
  242. package/artifacts/contracts/type/Key32.sol/Key32Lib.json +2 -2
  243. package/artifacts/contracts/type/NftId.sol/NftIdLib.dbg.json +1 -1
  244. package/artifacts/contracts/type/NftId.sol/NftIdLib.json +28 -4
  245. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.dbg.json +1 -1
  246. package/artifacts/contracts/type/NftIdSet.sol/LibNftIdSet.json +2 -2
  247. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.dbg.json +1 -1
  248. package/artifacts/contracts/type/ObjectType.sol/ObjectTypeLib.json +96 -2
  249. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.dbg.json +1 -1
  250. package/artifacts/contracts/type/PayoutId.sol/PayoutIdLib.json +4 -4
  251. package/artifacts/contracts/type/Referral.sol/ReferralLib.dbg.json +1 -1
  252. package/artifacts/contracts/type/Referral.sol/ReferralLib.json +4 -4
  253. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.dbg.json +4 -0
  254. package/artifacts/contracts/type/RequestId.sol/RequestIdLib.json +204 -0
  255. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.dbg.json +1 -1
  256. package/artifacts/contracts/type/RiskId.sol/RiskIdLib.json +4 -4
  257. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.dbg.json +1 -1
  258. package/artifacts/contracts/type/RoleId.sol/RoleIdLib.json +114 -4
  259. package/artifacts/contracts/type/Seconds.sol/SecondsLib.dbg.json +1 -1
  260. package/artifacts/contracts/type/Seconds.sol/SecondsLib.json +52 -2
  261. package/artifacts/contracts/type/Selector.sol/SelectorLib.dbg.json +4 -0
  262. package/artifacts/contracts/type/Selector.sol/SelectorLib.json +129 -0
  263. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.dbg.json +4 -0
  264. package/artifacts/contracts/type/Selector.sol/SelectorSetLib.json +10 -0
  265. package/artifacts/contracts/type/StateId.sol/StateIdLib.dbg.json +1 -1
  266. package/artifacts/contracts/type/StateId.sol/StateIdLib.json +2 -2
  267. package/artifacts/contracts/type/String.sol/StrLib.dbg.json +4 -0
  268. package/artifacts/contracts/type/String.sol/StrLib.json +132 -0
  269. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.dbg.json +1 -1
  270. package/artifacts/contracts/type/Timestamp.sol/TimestampLib.json +17 -4
  271. package/artifacts/contracts/type/UFixed.sol/MathLib.dbg.json +1 -1
  272. package/artifacts/contracts/type/UFixed.sol/MathLib.json +2 -2
  273. package/artifacts/contracts/type/UFixed.sol/UFixedLib.dbg.json +1 -1
  274. package/artifacts/contracts/type/UFixed.sol/UFixedLib.json +2 -2
  275. package/artifacts/contracts/type/Version.sol/VersionLib.dbg.json +1 -1
  276. package/artifacts/contracts/type/Version.sol/VersionLib.json +2 -2
  277. package/artifacts/contracts/type/Version.sol/VersionPartLib.dbg.json +1 -1
  278. package/artifacts/contracts/type/Version.sol/VersionPartLib.json +2 -2
  279. package/contracts/distribution/Distribution.sol +2 -4
  280. package/contracts/distribution/DistributionService.sol +5 -6
  281. package/contracts/distribution/DistributionServiceManager.sol +1 -13
  282. package/contracts/distribution/IDistributionComponent.sol +1 -1
  283. package/contracts/distribution/IDistributionService.sol +1 -1
  284. package/contracts/instance/BundleManager.sol +1 -1
  285. package/contracts/instance/IInstance.sol +22 -12
  286. package/contracts/instance/IInstanceService.sol +27 -13
  287. package/contracts/instance/Instance.sol +85 -50
  288. package/contracts/instance/InstanceAdmin.sol +331 -0
  289. package/contracts/instance/InstanceAuthorizationsLib.sol +193 -152
  290. package/contracts/instance/InstanceReader.sol +33 -7
  291. package/contracts/instance/InstanceService.sol +120 -48
  292. package/contracts/instance/InstanceServiceManager.sol +1 -1
  293. package/contracts/instance/InstanceStore.sol +30 -21
  294. package/contracts/instance/base/BalanceStore.sol +12 -7
  295. package/contracts/instance/base/Cloneable.sol +3 -26
  296. package/contracts/instance/base/ObjectCounter.sol +21 -0
  297. package/contracts/instance/base/ObjectManager.sol +2 -4
  298. package/contracts/instance/module/IAccess.sol +3 -11
  299. package/contracts/instance/module/IBundle.sol +1 -1
  300. package/contracts/instance/module/IComponents.sol +1 -1
  301. package/contracts/instance/module/IDistribution.sol +1 -1
  302. package/contracts/instance/module/IPolicy.sol +1 -1
  303. package/contracts/instance/module/IRisk.sol +1 -1
  304. package/contracts/mock/Dip.sol +1 -1
  305. package/contracts/oracle/IOracle.sol +20 -0
  306. package/contracts/oracle/IOracleComponent.sol +32 -0
  307. package/contracts/oracle/IOracleService.sol +65 -0
  308. package/contracts/oracle/Oracle.sol +145 -0
  309. package/contracts/oracle/OracleService.sol +278 -0
  310. package/contracts/oracle/OracleServiceManager.sol +42 -0
  311. package/contracts/pool/BundleService.sol +20 -20
  312. package/contracts/pool/BundleServiceManager.sol +1 -1
  313. package/contracts/pool/IBundleService.sol +1 -1
  314. package/contracts/pool/IPoolComponent.sol +1 -1
  315. package/contracts/pool/IPoolService.sol +4 -1
  316. package/contracts/pool/Pool.sol +1 -1
  317. package/contracts/pool/PoolService.sol +38 -10
  318. package/contracts/pool/PoolServiceManager.sol +1 -1
  319. package/contracts/product/ApplicationService.sol +6 -6
  320. package/contracts/product/ApplicationServiceManager.sol +1 -1
  321. package/contracts/product/ClaimService.sol +12 -7
  322. package/contracts/product/ClaimServiceManager.sol +1 -1
  323. package/contracts/product/IApplicationService.sol +1 -1
  324. package/contracts/product/IClaimService.sol +7 -1
  325. package/contracts/product/IPolicyService.sol +1 -1
  326. package/contracts/product/IPricingService.sol +1 -1
  327. package/contracts/product/IProductComponent.sol +1 -1
  328. package/contracts/product/IProductService.sol +1 -1
  329. package/contracts/product/PolicyService.sol +9 -7
  330. package/contracts/product/PolicyServiceManager.sol +1 -1
  331. package/contracts/product/PricingService.sol +8 -9
  332. package/contracts/product/PricingServiceManager.sol +1 -1
  333. package/contracts/product/Product.sol +1 -1
  334. package/contracts/product/ProductService.sol +6 -6
  335. package/contracts/product/ProductServiceManager.sol +1 -1
  336. package/contracts/registry/ChainNft.sol +2 -1
  337. package/contracts/registry/IRegistry.sol +21 -15
  338. package/contracts/registry/IRegistryService.sol +2 -1
  339. package/contracts/registry/IServiceAuthorization.sol +35 -0
  340. package/contracts/registry/ITransferInterceptor.sol +1 -1
  341. package/contracts/registry/Registry.sol +86 -67
  342. package/contracts/registry/RegistryAdmin.sol +333 -0
  343. package/contracts/registry/RegistryService.sol +9 -71
  344. package/contracts/registry/RegistryServiceManager.sol +2 -21
  345. package/contracts/registry/ReleaseManager.sol +219 -222
  346. package/contracts/registry/ServiceAuthorization.sol +86 -0
  347. package/contracts/registry/ServiceAuthorizationV3.sol +200 -0
  348. package/contracts/registry/TokenRegistry.sol +57 -61
  349. package/contracts/shared/AccessAdmin.sol +759 -0
  350. package/contracts/shared/AccessManagerCustom.sol +741 -0
  351. package/contracts/shared/AccessManagerExtended.sol +481 -0
  352. package/contracts/shared/AccessManagerExtendedInitializeable.sol +13 -0
  353. package/contracts/shared/AccessManagerExtendedWithDisable.sol +137 -0
  354. package/contracts/shared/AccessManagerExtendedWithDisableInitializeable.sol +14 -0
  355. package/contracts/shared/Component.sol +9 -14
  356. package/contracts/shared/ComponentService.sol +40 -18
  357. package/contracts/shared/ComponentServiceManager.sol +1 -1
  358. package/contracts/shared/ComponentVerifyingService.sol +14 -8
  359. package/contracts/shared/ERC165.sol +1 -1
  360. package/contracts/shared/IAccessAdmin.sol +168 -0
  361. package/contracts/shared/IAccessManagerExtended.sol +74 -0
  362. package/contracts/shared/IAccessManagerExtendedWithDisable.sol +18 -0
  363. package/contracts/shared/IComponent.sol +4 -8
  364. package/contracts/shared/IComponentService.sol +12 -1
  365. package/contracts/shared/IInstanceLinkedComponent.sol +1 -1
  366. package/contracts/shared/IKeyValueStore.sol +2 -2
  367. package/contracts/shared/ILifecycle.sol +1 -1
  368. package/contracts/shared/INftOwnable.sol +2 -2
  369. package/contracts/shared/IPolicyHolder.sol +1 -1
  370. package/contracts/shared/IRegisterable.sol +1 -1
  371. package/contracts/shared/IRegistryLinked.sol +1 -1
  372. package/contracts/shared/IService.sol +8 -1
  373. package/contracts/shared/IVersionable.sol +1 -1
  374. package/contracts/shared/InitializableCustom.sol +177 -0
  375. package/contracts/shared/InstanceLinkedComponent.sol +2 -3
  376. package/contracts/shared/KeyValueStore.sol +2 -5
  377. package/contracts/shared/Lifecycle.sol +12 -3
  378. package/contracts/shared/NftIdSetManager.sol +3 -7
  379. package/contracts/shared/NftOwnable.sol +3 -14
  380. package/contracts/shared/PolicyHolder.sol +3 -2
  381. package/contracts/shared/ProxyManager.sol +7 -3
  382. package/contracts/shared/Registerable.sol +1 -1
  383. package/contracts/shared/RegistryLinked.sol +1 -1
  384. package/contracts/shared/Service.sol +28 -22
  385. package/contracts/shared/TokenHandler.sol +1 -1
  386. package/contracts/shared/UpgradableProxyWithAdmin.sol +1 -1
  387. package/contracts/shared/Versionable.sol +1 -1
  388. package/contracts/staking/IStaking.sol +94 -39
  389. package/contracts/staking/IStakingService.sol +71 -40
  390. package/contracts/staking/StakeManagerLib.sol +231 -0
  391. package/contracts/staking/Staking.sol +303 -138
  392. package/contracts/staking/StakingManager.sol +23 -21
  393. package/contracts/staking/StakingReader.sol +120 -25
  394. package/contracts/staking/StakingService.sol +194 -77
  395. package/contracts/staking/StakingServiceManager.sol +3 -3
  396. package/contracts/staking/StakingStore.sol +613 -0
  397. package/contracts/staking/TargetManagerLib.sol +77 -11
  398. package/contracts/type/AddressSet.sol +1 -1
  399. package/contracts/type/Amount.sol +16 -2
  400. package/contracts/type/Blocknumber.sol +14 -2
  401. package/contracts/type/ClaimId.sol +1 -1
  402. package/contracts/type/DistributorType.sol +1 -1
  403. package/contracts/type/Fee.sol +1 -1
  404. package/contracts/type/Key32.sol +1 -1
  405. package/contracts/type/NftId.sol +9 -9
  406. package/contracts/type/NftIdSet.sol +1 -1
  407. package/contracts/type/ObjectType.sol +140 -68
  408. package/contracts/type/PayoutId.sol +1 -1
  409. package/contracts/type/Referral.sol +1 -1
  410. package/contracts/type/RequestId.sol +75 -0
  411. package/contracts/type/RiskId.sol +1 -1
  412. package/contracts/type/RoleId.sol +79 -21
  413. package/contracts/type/Seconds.sol +19 -1
  414. package/contracts/type/Selector.sol +102 -0
  415. package/contracts/type/StateId.sol +13 -1
  416. package/contracts/type/String.sol +53 -0
  417. package/contracts/type/Timestamp.sol +7 -3
  418. package/contracts/type/UFixed.sol +1 -1
  419. package/contracts/type/Version.sol +1 -1
  420. package/package.json +6 -3
  421. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.dbg.json +0 -4
  422. package/artifacts/contracts/instance/InstanceAccessManager.sol/InstanceAccessManager.json +0 -1348
  423. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.dbg.json +0 -4
  424. package/artifacts/contracts/registry/RegistryAccessManager.sol/RegistryAccessManager.json +0 -298
  425. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.dbg.json +0 -4
  426. package/artifacts/contracts/registry/ServiceAuthorizationsLib.sol/ServiceAuthorizationsLib.json +0 -137
  427. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.dbg.json +0 -4
  428. package/artifacts/contracts/shared/AccessManagerUpgradeableInitializeable.sol/AccessManagerUpgradeableInitializeable.json +0 -1206
  429. package/contracts/instance/InstanceAccessManager.sol +0 -543
  430. package/contracts/registry/RegistryAccessManager.sol +0 -167
  431. package/contracts/registry/ServiceAuthorizationsLib.sol +0 -173
  432. package/contracts/shared/AccessManagerUpgradeableInitializeable.sol +0 -13
@@ -0,0 +1,741 @@
1
+ // SPDX-License-Identifier: MIT
2
+ pragma solidity ^0.8.24;
3
+
4
+ import {IAccessManager} from "@openzeppelin/contracts/access/manager/IAccessManager.sol";
5
+ import {IAccessManaged} from "@openzeppelin/contracts/access/manager/IAccessManaged.sol";
6
+ import {Address} from "@openzeppelin/contracts/utils/Address.sol";
7
+ import {ContextUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol";
8
+ import {MulticallUpgradeable} from "@openzeppelin/contracts-upgradeable/utils/MulticallUpgradeable.sol";
9
+ import {Math} from "@openzeppelin/contracts/utils/math/Math.sol";
10
+ import {Time} from "@openzeppelin/contracts/utils/types/Time.sol";
11
+ import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
12
+
13
+ /*
14
+ * copy of @openzeppelin/contract-upgradeable/access/manager/AccessManagerUpgradeable.sol" except:
15
+ 1. abstract
16
+ 2. renamed to AccessManagerCustom
17
+ 2. _getAdminRestrictions() private view -> internal virtual view
18
+ 3. _checkSelector() private pure -> internal pure
19
+ */
20
+ abstract contract AccessManagerCustom is
21
+ Initializable,
22
+ ContextUpgradeable,
23
+ MulticallUpgradeable,
24
+ IAccessManager
25
+ {
26
+ using Time for *;
27
+
28
+ // Structure that stores the details for a target contract.
29
+ struct TargetConfig {
30
+ mapping(bytes4 selector => uint64 roleId) allowedRoles;
31
+ Time.Delay adminDelay;
32
+ bool closed;
33
+ }
34
+
35
+ // Structure that stores the details for a role/account pair. This structures fit into a single slot.
36
+ struct Access {
37
+ // Timepoint at which the user gets the permission.
38
+ // If this is either 0 or in the future, then the role permission is not available.
39
+ uint48 since;
40
+ // Delay for execution. Only applies to restricted() / execute() calls.
41
+ Time.Delay delay;
42
+ }
43
+
44
+ // Structure that stores the details of a role.
45
+ struct Role {
46
+ // Members of the role.
47
+ mapping(address user => Access access) members;
48
+ // Admin who can grant or revoke permissions.
49
+ uint64 admin;
50
+ // Guardian who can cancel operations targeting functions that need this role.
51
+ uint64 guardian;
52
+ // Delay in which the role takes effect after being granted.
53
+ Time.Delay grantDelay;
54
+ }
55
+
56
+ // Structure that stores the details for a scheduled operation. This structure fits into a single slot.
57
+ struct Schedule {
58
+ // Moment at which the operation can be executed.
59
+ uint48 timepoint;
60
+ // Operation nonce to allow third-party contracts to identify the operation.
61
+ uint32 nonce;
62
+ }
63
+
64
+ uint64 public constant ADMIN_ROLE = type(uint64).min; // 0
65
+ uint64 public constant PUBLIC_ROLE = type(uint64).max; // 2**64-1
66
+
67
+ /// @custom:storage-location erc7201:openzeppelin.storage.AccessManagerCustom
68
+ struct AccessManagerStorage {
69
+ mapping(address target => TargetConfig mode) _targets;
70
+ mapping(uint64 roleId => Role) _roles;
71
+ mapping(bytes32 operationId => Schedule) _schedules;
72
+
73
+ // Used to identify operations that are currently being executed via {execute}.
74
+ // This should be transient storage when supported by the EVM.
75
+ bytes32 _executionId;
76
+ }
77
+
78
+ // TODO compute address
79
+ // keccak256(abi.encode(uint256(keccak256("etherisc.storage.AccessManagerCustom")) - 1)) & ~bytes32(uint256(0xff))
80
+ bytes32 private constant AccessManagerCustomStorageLocation = 0x77301bc69e8248c80abb894217605b71fa89ea6a9e8bdf359d9e8aa1dd62bf00;
81
+
82
+ function _getAccessManagerCustomStorage() private pure returns (AccessManagerStorage storage $) {
83
+ assembly {
84
+ $.slot := AccessManagerCustomStorageLocation
85
+ }
86
+ }
87
+
88
+ /**
89
+ * @dev Check that the caller is authorized to perform the operation, following the restrictions encoded in
90
+ * {_getAdminRestrictions}.
91
+ */
92
+ modifier onlyAuthorized() {
93
+ _checkAuthorized();
94
+ _;
95
+ }
96
+
97
+ function __AccessManagerCustom_init(address initialAdmin) internal onlyInitializing {
98
+ __AccessManagerCustom_init_unchained(initialAdmin);
99
+ }
100
+
101
+ function __AccessManagerCustom_init_unchained(address initialAdmin) internal onlyInitializing {
102
+ if (initialAdmin == address(0)) {
103
+ revert AccessManagerInvalidInitialAdmin(address(0));
104
+ }
105
+
106
+ // admin is active immediately and without any execution delay.
107
+ _grantRole(ADMIN_ROLE, initialAdmin, 0, 0);
108
+ }
109
+
110
+ // =================================================== GETTERS ====================================================
111
+ /// @inheritdoc IAccessManager
112
+ function canCall(
113
+ address caller,
114
+ address target,
115
+ bytes4 selector
116
+ ) public view virtual returns (bool immediate, uint32 delay) {
117
+ if (isTargetClosed(target)) {
118
+ return (false, 0);
119
+ } else if (caller == address(this)) {
120
+ // Caller is AccessManager, this means the call was sent through {execute} and it already checked
121
+ // permissions. We verify that the call "identifier", which is set during {execute}, is correct.
122
+ return (_isExecuting(target, selector), 0);
123
+ } else {
124
+ uint64 roleId = getTargetFunctionRole(target, selector);
125
+ (bool isMember, uint32 currentDelay) = hasRole(roleId, caller);
126
+ return isMember ? (currentDelay == 0, currentDelay) : (false, 0);
127
+ }
128
+ }
129
+
130
+ /// @inheritdoc IAccessManager
131
+ function expiration() public view virtual returns (uint32) {
132
+ return 1 weeks;
133
+ }
134
+
135
+ /// @inheritdoc IAccessManager
136
+ function minSetback() public view virtual returns (uint32) {
137
+ return 5 days;
138
+ }
139
+
140
+ /// @inheritdoc IAccessManager
141
+ function isTargetClosed(address target) public view virtual returns (bool) {
142
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
143
+ return $._targets[target].closed;
144
+ }
145
+
146
+ /// @inheritdoc IAccessManager
147
+ function getTargetFunctionRole(address target, bytes4 selector) public view virtual returns (uint64) {
148
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
149
+ return $._targets[target].allowedRoles[selector];
150
+ }
151
+
152
+ /// @inheritdoc IAccessManager
153
+ function getTargetAdminDelay(address target) public view virtual returns (uint32) {
154
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
155
+ return $._targets[target].adminDelay.get();
156
+ }
157
+
158
+ /// @inheritdoc IAccessManager
159
+ function getRoleAdmin(uint64 roleId) public view virtual returns (uint64) {
160
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
161
+ return $._roles[roleId].admin;
162
+ }
163
+
164
+ /// @inheritdoc IAccessManager
165
+ function getRoleGuardian(uint64 roleId) public view virtual returns (uint64) {
166
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
167
+ return $._roles[roleId].guardian;
168
+ }
169
+
170
+ /// @inheritdoc IAccessManager
171
+ function getRoleGrantDelay(uint64 roleId) public view virtual returns (uint32) {
172
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
173
+ return $._roles[roleId].grantDelay.get();
174
+ }
175
+
176
+ /// @inheritdoc IAccessManager
177
+ function getAccess(
178
+ uint64 roleId,
179
+ address account
180
+ ) public view virtual returns (uint48 since, uint32 currentDelay, uint32 pendingDelay, uint48 effect) {
181
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
182
+ Access storage access = $._roles[roleId].members[account];
183
+
184
+ since = access.since;
185
+ (currentDelay, pendingDelay, effect) = access.delay.getFull();
186
+
187
+ return (since, currentDelay, pendingDelay, effect);
188
+ }
189
+
190
+ /// @inheritdoc IAccessManager
191
+ function hasRole(
192
+ uint64 roleId,
193
+ address account
194
+ ) public view virtual returns (bool isMember, uint32 executionDelay) {
195
+ if (roleId == PUBLIC_ROLE) {
196
+ return (true, 0);
197
+ } else {
198
+ (uint48 hasRoleSince, uint32 currentDelay, , ) = getAccess(roleId, account);
199
+ return (hasRoleSince != 0 && hasRoleSince <= Time.timestamp(), currentDelay);
200
+ }
201
+ }
202
+
203
+ // =============================================== ROLE MANAGEMENT ===============================================
204
+ /// @inheritdoc IAccessManager
205
+ function labelRole(uint64 roleId, string calldata label) public virtual onlyAuthorized {
206
+ if (roleId == ADMIN_ROLE || roleId == PUBLIC_ROLE) {
207
+ revert AccessManagerLockedRole(roleId);
208
+ }
209
+ emit RoleLabel(roleId, label);
210
+ }
211
+
212
+ /// @inheritdoc IAccessManager
213
+ function grantRole(uint64 roleId, address account, uint32 executionDelay) public virtual onlyAuthorized {
214
+ _grantRole(roleId, account, getRoleGrantDelay(roleId), executionDelay);
215
+ }
216
+
217
+ /// @inheritdoc IAccessManager
218
+ function revokeRole(uint64 roleId, address account) public virtual onlyAuthorized {
219
+ _revokeRole(roleId, account);
220
+ }
221
+
222
+ /// @inheritdoc IAccessManager
223
+ function renounceRole(uint64 roleId, address callerConfirmation) public virtual {
224
+ if (callerConfirmation != _msgSender()) {
225
+ revert AccessManagerBadConfirmation();
226
+ }
227
+ _revokeRole(roleId, callerConfirmation);
228
+ }
229
+
230
+ /// @inheritdoc IAccessManager
231
+ function setRoleAdmin(uint64 roleId, uint64 admin) public virtual onlyAuthorized {
232
+ _setRoleAdmin(roleId, admin);
233
+ }
234
+
235
+ /// @inheritdoc IAccessManager
236
+ function setRoleGuardian(uint64 roleId, uint64 guardian) public virtual onlyAuthorized {
237
+ _setRoleGuardian(roleId, guardian);
238
+ }
239
+
240
+ /// @inheritdoc IAccessManager
241
+ function setGrantDelay(uint64 roleId, uint32 newDelay) public virtual onlyAuthorized {
242
+ _setGrantDelay(roleId, newDelay);
243
+ }
244
+
245
+ /**
246
+ * @dev Internal version of {grantRole} without access control. Returns true if the role was newly granted.
247
+ *
248
+ * Emits a {RoleGranted} event.
249
+ */
250
+ function _grantRole(
251
+ uint64 roleId,
252
+ address account,
253
+ uint32 grantDelay,
254
+ uint32 executionDelay
255
+ ) internal virtual returns (bool) {
256
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
257
+ if (roleId == PUBLIC_ROLE) {
258
+ revert AccessManagerLockedRole(roleId);
259
+ }
260
+
261
+ bool newMember = $._roles[roleId].members[account].since == 0;
262
+ uint48 since;
263
+
264
+ if (newMember) {
265
+ since = Time.timestamp() + grantDelay;
266
+ $._roles[roleId].members[account] = Access({since: since, delay: executionDelay.toDelay()});
267
+ } else {
268
+ // No setback here. Value can be reset by doing revoke + grant, effectively allowing the admin to perform
269
+ // any change to the execution delay within the duration of the role admin delay.
270
+ ($._roles[roleId].members[account].delay, since) = $._roles[roleId].members[account].delay.withUpdate(
271
+ executionDelay,
272
+ 0
273
+ );
274
+ }
275
+
276
+ emit RoleGranted(roleId, account, executionDelay, since, newMember);
277
+ return newMember;
278
+ }
279
+
280
+ /**
281
+ * @dev Internal version of {revokeRole} without access control. This logic is also used by {renounceRole}.
282
+ * Returns true if the role was previously granted.
283
+ *
284
+ * Emits a {RoleRevoked} event if the account had the role.
285
+ */
286
+ function _revokeRole(uint64 roleId, address account) internal virtual returns (bool) {
287
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
288
+ if (roleId == PUBLIC_ROLE) {
289
+ revert AccessManagerLockedRole(roleId);
290
+ }
291
+
292
+ if ($._roles[roleId].members[account].since == 0) {
293
+ return false;
294
+ }
295
+
296
+ delete $._roles[roleId].members[account];
297
+
298
+ emit RoleRevoked(roleId, account);
299
+ return true;
300
+ }
301
+
302
+ /**
303
+ * @dev Internal version of {setRoleAdmin} without access control.
304
+ *
305
+ * Emits a {RoleAdminChanged} event.
306
+ *
307
+ * NOTE: Setting the admin role as the `PUBLIC_ROLE` is allowed, but it will effectively allow
308
+ * anyone to set grant or revoke such role.
309
+ */
310
+ function _setRoleAdmin(uint64 roleId, uint64 admin) internal virtual {
311
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
312
+ if (roleId == ADMIN_ROLE || roleId == PUBLIC_ROLE) {
313
+ revert AccessManagerLockedRole(roleId);
314
+ }
315
+
316
+ $._roles[roleId].admin = admin;
317
+
318
+ emit RoleAdminChanged(roleId, admin);
319
+ }
320
+
321
+ /**
322
+ * @dev Internal version of {setRoleGuardian} without access control.
323
+ *
324
+ * Emits a {RoleGuardianChanged} event.
325
+ *
326
+ * NOTE: Setting the guardian role as the `PUBLIC_ROLE` is allowed, but it will effectively allow
327
+ * anyone to cancel any scheduled operation for such role.
328
+ */
329
+ function _setRoleGuardian(uint64 roleId, uint64 guardian) internal virtual {
330
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
331
+ if (roleId == ADMIN_ROLE || roleId == PUBLIC_ROLE) {
332
+ revert AccessManagerLockedRole(roleId);
333
+ }
334
+
335
+ $._roles[roleId].guardian = guardian;
336
+
337
+ emit RoleGuardianChanged(roleId, guardian);
338
+ }
339
+
340
+ /**
341
+ * @dev Internal version of {setGrantDelay} without access control.
342
+ *
343
+ * Emits a {RoleGrantDelayChanged} event.
344
+ */
345
+ function _setGrantDelay(uint64 roleId, uint32 newDelay) internal virtual {
346
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
347
+ if (roleId == PUBLIC_ROLE) {
348
+ revert AccessManagerLockedRole(roleId);
349
+ }
350
+
351
+ uint48 effect;
352
+ ($._roles[roleId].grantDelay, effect) = $._roles[roleId].grantDelay.withUpdate(newDelay, minSetback());
353
+
354
+ emit RoleGrantDelayChanged(roleId, newDelay, effect);
355
+ }
356
+
357
+ // ============================================= FUNCTION MANAGEMENT ==============================================
358
+ /// @inheritdoc IAccessManager
359
+ function setTargetFunctionRole(
360
+ address target,
361
+ bytes4[] calldata selectors,
362
+ uint64 roleId
363
+ ) public virtual onlyAuthorized {
364
+ for (uint256 i = 0; i < selectors.length; ++i) {
365
+ _setTargetFunctionRole(target, selectors[i], roleId);
366
+ }
367
+ }
368
+
369
+ /**
370
+ * @dev Internal version of {setTargetFunctionRole} without access control.
371
+ *
372
+ * Emits a {TargetFunctionRoleUpdated} event.
373
+ */
374
+ function _setTargetFunctionRole(address target, bytes4 selector, uint64 roleId) internal virtual {
375
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
376
+ $._targets[target].allowedRoles[selector] = roleId;
377
+ emit TargetFunctionRoleUpdated(target, selector, roleId);
378
+ }
379
+
380
+ /// @inheritdoc IAccessManager
381
+ function setTargetAdminDelay(address target, uint32 newDelay) public virtual onlyAuthorized {
382
+ _setTargetAdminDelay(target, newDelay);
383
+ }
384
+
385
+ /**
386
+ * @dev Internal version of {setTargetAdminDelay} without access control.
387
+ *
388
+ * Emits a {TargetAdminDelayUpdated} event.
389
+ */
390
+ function _setTargetAdminDelay(address target, uint32 newDelay) internal virtual {
391
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
392
+ uint48 effect;
393
+ ($._targets[target].adminDelay, effect) = $._targets[target].adminDelay.withUpdate(newDelay, minSetback());
394
+ emit TargetAdminDelayUpdated(target, newDelay, effect);
395
+ }
396
+
397
+ // =============================================== MODE MANAGEMENT ================================================
398
+ /// @inheritdoc IAccessManager
399
+ function setTargetClosed(address target, bool closed) public virtual onlyAuthorized {
400
+ _setTargetClosed(target, closed);
401
+ }
402
+
403
+ /**
404
+ * @dev Set the closed flag for a contract. This is an internal setter with no access restrictions.
405
+ *
406
+ * Emits a {TargetClosed} event.
407
+ */
408
+ function _setTargetClosed(address target, bool closed) internal virtual {
409
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
410
+ if (target == address(this)) {
411
+ revert AccessManagerLockedAccount(target);
412
+ }
413
+ $._targets[target].closed = closed;
414
+ emit TargetClosed(target, closed);
415
+ }
416
+
417
+ // ============================================== DELAYED OPERATIONS ==============================================
418
+ /// @inheritdoc IAccessManager
419
+ function getSchedule(bytes32 id) public view virtual returns (uint48) {
420
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
421
+ uint48 timepoint = $._schedules[id].timepoint;
422
+ return _isExpired(timepoint) ? 0 : timepoint;
423
+ }
424
+
425
+ /// @inheritdoc IAccessManager
426
+ function getNonce(bytes32 id) public view virtual returns (uint32) {
427
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
428
+ return $._schedules[id].nonce;
429
+ }
430
+
431
+ /// @inheritdoc IAccessManager
432
+ function schedule(
433
+ address target,
434
+ bytes calldata data,
435
+ uint48 when
436
+ ) public virtual returns (bytes32 operationId, uint32 nonce) {
437
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
438
+ address caller = _msgSender();
439
+
440
+ // Fetch restrictions that apply to the caller on the targeted function
441
+ (, uint32 setback) = _canCallExtended(caller, target, data);
442
+
443
+ uint48 minWhen = Time.timestamp() + setback;
444
+
445
+ // if call with delay is not authorized, or if requested timing is too soon
446
+ if (setback == 0 || (when > 0 && when < minWhen)) {
447
+ revert AccessManagerUnauthorizedCall(caller, target, _checkSelector(data));
448
+ }
449
+
450
+ // Reuse variable due to stack too deep
451
+ when = uint48(Math.max(when, minWhen)); // cast is safe: both inputs are uint48
452
+
453
+ // If caller is authorised, schedule operation
454
+ operationId = hashOperation(caller, target, data);
455
+
456
+ _checkNotScheduled(operationId);
457
+
458
+ unchecked {
459
+ // It's not feasible to overflow the nonce in less than 1000 years
460
+ nonce = $._schedules[operationId].nonce + 1;
461
+ }
462
+ $._schedules[operationId].timepoint = when;
463
+ $._schedules[operationId].nonce = nonce;
464
+ emit OperationScheduled(operationId, nonce, when, caller, target, data);
465
+
466
+ // Using named return values because otherwise we get stack too deep
467
+ }
468
+
469
+ /**
470
+ * @dev Reverts if the operation is currently scheduled and has not expired.
471
+ * (Note: This function was introduced due to stack too deep errors in schedule.)
472
+ */
473
+ function _checkNotScheduled(bytes32 operationId) private view {
474
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
475
+ uint48 prevTimepoint = $._schedules[operationId].timepoint;
476
+ if (prevTimepoint != 0 && !_isExpired(prevTimepoint)) {
477
+ revert AccessManagerAlreadyScheduled(operationId);
478
+ }
479
+ }
480
+
481
+ /// @inheritdoc IAccessManager
482
+ // Reentrancy is not an issue because permissions are checked on msg.sender. Additionally,
483
+ // _consumeScheduledOp guarantees a scheduled operation is only executed once.
484
+ // slither-disable-next-line reentrancy-no-eth
485
+ function execute(address target, bytes calldata data) public payable virtual returns (uint32) {
486
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
487
+ address caller = _msgSender();
488
+
489
+ // Fetch restrictions that apply to the caller on the targeted function
490
+ (bool immediate, uint32 setback) = _canCallExtended(caller, target, data);
491
+
492
+ // If caller is not authorised, revert
493
+ if (!immediate && setback == 0) {
494
+ revert AccessManagerUnauthorizedCall(caller, target, _checkSelector(data));
495
+ }
496
+
497
+ bytes32 operationId = hashOperation(caller, target, data);
498
+ uint32 nonce;
499
+
500
+ // If caller is authorised, check operation was scheduled early enough
501
+ // Consume an available schedule even if there is no currently enforced delay
502
+ if (setback != 0 || getSchedule(operationId) != 0) {
503
+ nonce = _consumeScheduledOp(operationId);
504
+ }
505
+
506
+ // Mark the target and selector as authorised
507
+ bytes32 executionIdBefore = $._executionId;
508
+ $._executionId = _hashExecutionId(target, _checkSelector(data));
509
+
510
+ // Perform call
511
+ Address.functionCallWithValue(target, data, msg.value);
512
+
513
+ // Reset execute identifier
514
+ $._executionId = executionIdBefore;
515
+
516
+ return nonce;
517
+ }
518
+
519
+ /// @inheritdoc IAccessManager
520
+ function cancel(address caller, address target, bytes calldata data) public virtual returns (uint32) {
521
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
522
+ address msgsender = _msgSender();
523
+ bytes4 selector = _checkSelector(data);
524
+
525
+ bytes32 operationId = hashOperation(caller, target, data);
526
+ if ($._schedules[operationId].timepoint == 0) {
527
+ revert AccessManagerNotScheduled(operationId);
528
+ } else if (caller != msgsender) {
529
+ // calls can only be canceled by the account that scheduled them, a global admin, or by a guardian of the required role.
530
+ (bool isAdmin, ) = hasRole(ADMIN_ROLE, msgsender);
531
+ (bool isGuardian, ) = hasRole(getRoleGuardian(getTargetFunctionRole(target, selector)), msgsender);
532
+ if (!isAdmin && !isGuardian) {
533
+ revert AccessManagerUnauthorizedCancel(msgsender, caller, target, selector);
534
+ }
535
+ }
536
+
537
+ delete $._schedules[operationId].timepoint; // reset the timepoint, keep the nonce
538
+ uint32 nonce = $._schedules[operationId].nonce;
539
+ emit OperationCanceled(operationId, nonce);
540
+
541
+ return nonce;
542
+ }
543
+
544
+ /// @inheritdoc IAccessManager
545
+ function consumeScheduledOp(address caller, bytes calldata data) public virtual {
546
+ address target = _msgSender();
547
+ if (IAccessManaged(target).isConsumingScheduledOp() != IAccessManaged.isConsumingScheduledOp.selector) {
548
+ revert AccessManagerUnauthorizedConsume(target);
549
+ }
550
+ _consumeScheduledOp(hashOperation(caller, target, data));
551
+ }
552
+
553
+ /**
554
+ * @dev Internal variant of {consumeScheduledOp} that operates on bytes32 operationId.
555
+ *
556
+ * Returns the nonce of the scheduled operation that is consumed.
557
+ */
558
+ function _consumeScheduledOp(bytes32 operationId) internal virtual returns (uint32) {
559
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
560
+ uint48 timepoint = $._schedules[operationId].timepoint;
561
+ uint32 nonce = $._schedules[operationId].nonce;
562
+
563
+ if (timepoint == 0) {
564
+ revert AccessManagerNotScheduled(operationId);
565
+ } else if (timepoint > Time.timestamp()) {
566
+ revert AccessManagerNotReady(operationId);
567
+ } else if (_isExpired(timepoint)) {
568
+ revert AccessManagerExpired(operationId);
569
+ }
570
+
571
+ delete $._schedules[operationId].timepoint; // reset the timepoint, keep the nonce
572
+ emit OperationExecuted(operationId, nonce);
573
+
574
+ return nonce;
575
+ }
576
+
577
+ /// @inheritdoc IAccessManager
578
+ function hashOperation(address caller, address target, bytes calldata data) public view virtual returns (bytes32) {
579
+ return keccak256(abi.encode(caller, target, data));
580
+ }
581
+
582
+ // ==================================================== OTHERS ====================================================
583
+ /// @inheritdoc IAccessManager
584
+ function updateAuthority(address target, address newAuthority) public virtual onlyAuthorized {
585
+ IAccessManaged(target).setAuthority(newAuthority);
586
+ }
587
+
588
+ // ================================================= ADMIN LOGIC ==================================================
589
+ /**
590
+ * @dev Check if the current call is authorized according to admin logic.
591
+ */
592
+ function _checkAuthorized() private {
593
+ address caller = msg.sender;//_msgSender();
594
+ (bool immediate, uint32 delay) = _canCallSelf(caller, _msgData());
595
+ if (!immediate) {
596
+ if (delay == 0) {
597
+ (, uint64 requiredRole, ) = _getAdminRestrictions(_msgData());
598
+ revert AccessManagerUnauthorizedAccount(caller, requiredRole);
599
+ } else {
600
+ _consumeScheduledOp(hashOperation(caller, address(this), _msgData()));
601
+ }
602
+ }
603
+ }
604
+
605
+ /**
606
+ * @dev Get the admin restrictions of a given function call based on the function and arguments involved.
607
+ *
608
+ * Returns:
609
+ * - bool restricted: does this data match a restricted operation
610
+ * - uint64: which role is this operation restricted to
611
+ * - uint32: minimum delay to enforce for that operation (max between operation's delay and admin's execution delay)
612
+ */
613
+ /**
614
+ * @dev Get the admin restrictions of a given function call based on the function and arguments involved.
615
+ *
616
+ * Returns:
617
+ * - bool restricted: does this data match a restricted operation
618
+ * - uint64: which role is this operation restricted to
619
+ * - uint32: minimum delay to enforce for that operation (max between operation's delay and admin's execution delay)
620
+ */
621
+ function _getAdminRestrictions(
622
+ bytes calldata data
623
+ ) internal virtual view returns (bool restricted, uint64 roleAdminId, uint32 executionDelay) {
624
+ if (data.length < 4) {
625
+ return (false, 0, 0);
626
+ }
627
+
628
+ bytes4 selector = _checkSelector(data);
629
+
630
+ // Restricted to ADMIN with no delay beside any execution delay the caller may have
631
+ if (
632
+ selector == this.labelRole.selector ||
633
+ selector == this.setRoleAdmin.selector ||
634
+ selector == this.setRoleGuardian.selector ||
635
+ selector == this.setGrantDelay.selector ||
636
+ selector == this.setTargetAdminDelay.selector
637
+ ) {
638
+ return (true, ADMIN_ROLE, 0);
639
+ }
640
+
641
+ // Restricted to ADMIN with the admin delay corresponding to the target
642
+ if (
643
+ selector == this.updateAuthority.selector ||
644
+ selector == this.setTargetClosed.selector ||
645
+ selector == this.setTargetFunctionRole.selector
646
+ ) {
647
+ // First argument is a target.
648
+ address target = abi.decode(data[0x04:0x24], (address));// who is target???
649
+ uint32 delay = getTargetAdminDelay(target);
650
+ return (true, ADMIN_ROLE, delay);
651
+ }
652
+
653
+ // Restricted to that role's admin with no delay beside any execution delay the caller may have.
654
+ if (selector == this.grantRole.selector || selector == this.revokeRole.selector) {
655
+ // First argument is a roleId.
656
+ uint64 roleId = abi.decode(data[0x04:0x24], (uint64));
657
+ return (true, getRoleAdmin(roleId), 0);
658
+ }
659
+
660
+ return (false, 0, 0);
661
+ }
662
+
663
+ // =================================================== HELPERS ====================================================
664
+ /**
665
+ * @dev An extended version of {canCall} for internal usage that checks {_canCallSelf}
666
+ * when the target is this contract.
667
+ *
668
+ * Returns:
669
+ * - bool immediate: whether the operation can be executed immediately (with no delay)
670
+ * - uint32 delay: the execution delay
671
+ */
672
+ function _canCallExtended(
673
+ address caller,
674
+ address target,
675
+ bytes calldata data
676
+ ) private view returns (bool immediate, uint32 delay) {
677
+ if (target == address(this)) {
678
+ return _canCallSelf(caller, data);
679
+ } else {
680
+ return data.length < 4 ? (false, 0) : canCall(caller, target, _checkSelector(data));
681
+ }
682
+ }
683
+
684
+ /**
685
+ * @dev A version of {canCall} that checks for admin restrictions in this contract.
686
+ */
687
+ function _canCallSelf(address caller, bytes calldata data) private view returns (bool immediate, uint32 delay) {
688
+ if (data.length < 4) {
689
+ return (false, 0);
690
+ }
691
+
692
+ if (caller == address(this)) {
693
+ // Caller is AccessManager, this means the call was sent through {execute} and it already checked
694
+ // permissions. We verify that the call "identifier", which is set during {execute}, is correct.
695
+ return (_isExecuting(address(this), _checkSelector(data)), 0);
696
+ }
697
+
698
+ (bool enabled, uint64 roleId, uint32 operationDelay) = _getAdminRestrictions(data);
699
+ if (!enabled) {
700
+ return (false, 0);
701
+ }
702
+
703
+ (bool inRole, uint32 executionDelay) = hasRole(roleId, caller);
704
+ if (!inRole) {
705
+ return (false, 0);
706
+ }
707
+
708
+ // downcast is safe because both options are uint32
709
+ delay = uint32(Math.max(operationDelay, executionDelay));
710
+ return (delay == 0, delay);
711
+ }
712
+
713
+ /**
714
+ * @dev Returns true if a call with `target` and `selector` is being executed via {executed}.
715
+ */
716
+ function _isExecuting(address target, bytes4 selector) private view returns (bool) {
717
+ AccessManagerStorage storage $ = _getAccessManagerCustomStorage();
718
+ return $._executionId == _hashExecutionId(target, selector);
719
+ }
720
+
721
+ /**
722
+ * @dev Returns true if a schedule timepoint is past its expiration deadline.
723
+ */
724
+ function _isExpired(uint48 timepoint) private view returns (bool) {
725
+ return timepoint + expiration() <= Time.timestamp();
726
+ }
727
+
728
+ /**
729
+ * @dev Extracts the selector from calldata. Panics if data is not at least 4 bytes
730
+ */
731
+ function _checkSelector(bytes calldata data) internal pure returns (bytes4) {
732
+ return bytes4(data[0:4]);
733
+ }
734
+
735
+ /**
736
+ * @dev Hashing function for execute protection
737
+ */
738
+ function _hashExecutionId(address target, bytes4 selector) private pure returns (bytes32) {
739
+ return keccak256(abi.encode(target, selector));
740
+ }
741
+ }