@arbitrum/nitro-contracts 3.0.1-beta.1 → 3.1.1
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/build/contracts/@openzeppelin/contracts/access/Ownable.sol/Ownable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/interfaces/draft-IERC1822.sol/IERC1822Proxiable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol/ERC1967Proxy.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/ERC1967/ERC1967Upgrade.sol/ERC1967Upgrade.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/Proxy.sol/Proxy.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/beacon/IBeacon.sol/IBeacon.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol/UpgradeableBeacon.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol/ProxyAdmin.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol/TransparentUpgradeableProxy.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/proxy/utils/UUPSUpgradeable.sol/UUPSUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/security/ReentrancyGuard.sol/ReentrancyGuard.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/ERC20.sol/ERC20.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/IERC20.sol/IERC20.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol/IERC20Metadata.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol/IERC20Permit.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol/SafeERC20.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/Address.sol/Address.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/Create2.sol/Create2.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/StorageSlot.sol/StorageSlot.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/Strings.sol/Strings.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts/utils/cryptography/ECDSA.sol/ECDSA.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/AccessControlEnumerableUpgradeable.sol/AccessControlEnumerableUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol/AccessControlUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/IAccessControlEnumerableUpgradeable.sol/IAccessControlEnumerableUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/IAccessControlUpgradeable.sol/IAccessControlUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/security/PausableUpgradeable.sol/PausableUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol/ERC20Upgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol/IERC20Upgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol/ERC20BurnableUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/token/ERC20/extensions/IERC20MetadataUpgradeable.sol/IERC20MetadataUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/Create2Upgradeable.sol/Create2Upgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StorageSlotUpgradeable.sol/StorageSlotUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/StringsUpgradeable.sol/StringsUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/cryptography/ECDSAUpgradeable.sol/ECDSAUpgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/cryptography/draft-EIP712Upgradeable.sol/EIP712Upgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/introspection/ERC165Upgradeable.sol/ERC165Upgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/introspection/IERC165Upgradeable.sol/IERC165Upgradeable.dbg.json +1 -1
- package/build/contracts/@openzeppelin/contracts-upgradeable/utils/structs/EnumerableSetUpgradeable.sol/EnumerableSetUpgradeable.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/AbsBoldStakingPool.sol/AbsBoldStakingPool.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/AssertionStakingPool.sol/AssertionStakingPool.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/AssertionStakingPool.sol/AssertionStakingPool.json +2 -2
- package/build/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol/AssertionStakingPoolCreator.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/AssertionStakingPoolCreator.sol/AssertionStakingPoolCreator.json +2 -2
- package/build/contracts/src/assertionStakingPool/EdgeStakingPool.sol/EdgeStakingPool.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/EdgeStakingPool.sol/EdgeStakingPool.json +2 -2
- package/build/contracts/src/assertionStakingPool/EdgeStakingPoolCreator.sol/EdgeStakingPoolCreator.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/EdgeStakingPoolCreator.sol/EdgeStakingPoolCreator.json +2 -2
- package/build/contracts/src/assertionStakingPool/StakingPoolCreatorUtils.sol/StakingPoolCreatorUtils.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/interfaces/IAbsBoldStakingPool.sol/IAbsBoldStakingPool.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPool.sol/IAssertionStakingPool.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/interfaces/IAssertionStakingPoolCreator.sol/IAssertionStakingPoolCreator.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPool.sol/IEdgeStakingPool.dbg.json +1 -1
- package/build/contracts/src/assertionStakingPool/interfaces/IEdgeStakingPoolCreator.sol/IEdgeStakingPoolCreator.dbg.json +1 -1
- package/build/contracts/src/bridge/AbsBridge.sol/AbsBridge.dbg.json +1 -1
- package/build/contracts/src/bridge/AbsInbox.sol/AbsInbox.dbg.json +1 -1
- package/build/contracts/src/bridge/AbsOutbox.sol/AbsOutbox.dbg.json +1 -1
- package/build/contracts/src/bridge/Bridge.sol/Bridge.dbg.json +1 -1
- package/build/contracts/src/bridge/Bridge.sol/Bridge.json +2 -2
- package/build/contracts/src/bridge/DelayBuffer.sol/DelayBuffer.dbg.json +1 -1
- package/build/contracts/src/bridge/ERC20Bridge.sol/ERC20Bridge.dbg.json +1 -1
- package/build/contracts/src/bridge/ERC20Bridge.sol/ERC20Bridge.json +2 -2
- package/build/contracts/src/bridge/ERC20Inbox.sol/ERC20Inbox.dbg.json +1 -1
- package/build/contracts/src/bridge/ERC20Inbox.sol/ERC20Inbox.json +2 -2
- package/build/contracts/src/bridge/ERC20Outbox.sol/ERC20Outbox.dbg.json +1 -1
- package/build/contracts/src/bridge/ERC20Outbox.sol/ERC20Outbox.json +2 -2
- package/build/contracts/src/bridge/GasRefunder.sol/GasRefunder.dbg.json +1 -1
- package/build/contracts/src/bridge/IBridge.sol/IBridge.dbg.json +1 -1
- package/build/contracts/src/bridge/IDelayedMessageProvider.sol/IDelayedMessageProvider.dbg.json +1 -1
- package/build/contracts/src/bridge/IERC20Bridge.sol/IERC20Bridge.dbg.json +1 -1
- package/build/contracts/src/bridge/IERC20Inbox.sol/IERC20Inbox.dbg.json +1 -1
- package/build/contracts/src/bridge/IEthBridge.sol/IEthBridge.dbg.json +1 -1
- package/build/contracts/src/bridge/IInbox.sol/IInbox.dbg.json +1 -1
- package/build/contracts/src/bridge/IInboxBase.sol/IInboxBase.dbg.json +1 -1
- package/build/contracts/src/bridge/IOutbox.sol/IOutbox.dbg.json +1 -1
- package/build/contracts/src/bridge/IOwnable.sol/IOwnable.dbg.json +1 -1
- package/build/contracts/src/bridge/ISequencerInbox.sol/IFeeTokenPricer.dbg.json +4 -0
- package/build/contracts/src/bridge/ISequencerInbox.sol/IFeeTokenPricer.json +24 -0
- package/build/contracts/src/bridge/ISequencerInbox.sol/ISequencerInbox.dbg.json +1 -1
- package/build/contracts/src/bridge/ISequencerInbox.sol/ISequencerInbox.json +44 -0
- package/build/contracts/src/bridge/Inbox.sol/Inbox.dbg.json +1 -1
- package/build/contracts/src/bridge/Inbox.sol/Inbox.json +2 -2
- package/build/contracts/src/bridge/Messages.sol/Messages.dbg.json +1 -1
- package/build/contracts/src/bridge/Outbox.sol/Outbox.dbg.json +1 -1
- package/build/contracts/src/bridge/Outbox.sol/Outbox.json +2 -2
- package/build/contracts/src/bridge/SequencerInbox.sol/SequencerInbox.dbg.json +1 -1
- package/build/contracts/src/bridge/SequencerInbox.sol/SequencerInbox.json +51 -2
- package/build/contracts/src/bridge/extra/ERC20MigrationOutbox.sol/ERC20MigrationOutbox.dbg.json +4 -0
- package/build/contracts/src/bridge/extra/ERC20MigrationOutbox.sol/ERC20MigrationOutbox.json +113 -0
- package/build/contracts/src/bridge/extra/IERC20MigrationOutbox.sol/IERC20MigrationOutbox.dbg.json +4 -0
- package/build/contracts/src/bridge/extra/IERC20MigrationOutbox.sol/IERC20MigrationOutbox.json +97 -0
- package/build/contracts/src/chain/CacheManager.sol/CacheManager.dbg.json +1 -1
- package/build/contracts/src/chain/CacheManager.sol/CacheManager.json +2 -2
- package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/EdgeChallengeManager.dbg.json +1 -1
- package/build/contracts/src/challengeV2/EdgeChallengeManager.sol/EdgeChallengeManager.json +2 -2
- package/build/contracts/src/challengeV2/IAssertionChain.sol/IAssertionChain.dbg.json +1 -1
- package/build/contracts/src/challengeV2/IEdgeChallengeManager.sol/IEdgeChallengeManager.dbg.json +1 -1
- package/build/contracts/src/challengeV2/libraries/ArrayUtilsLib.sol/ArrayUtilsLib.dbg.json +1 -1
- package/build/contracts/src/challengeV2/libraries/ChallengeEdgeLib.sol/ChallengeEdgeLib.dbg.json +1 -1
- package/build/contracts/src/challengeV2/libraries/ChallengeEdgeLib.sol/ChallengeEdgeLib.json +2 -2
- package/build/contracts/src/challengeV2/libraries/EdgeChallengeManagerLib.sol/EdgeChallengeManagerLib.dbg.json +1 -1
- package/build/contracts/src/challengeV2/libraries/EdgeChallengeManagerLib.sol/EdgeChallengeManagerLib.json +2 -2
- package/build/contracts/src/challengeV2/libraries/MerkleTreeAccumulatorLib.sol/MerkleTreeAccumulatorLib.dbg.json +1 -1
- package/build/contracts/src/challengeV2/libraries/MerkleTreeAccumulatorLib.sol/MerkleTreeAccumulatorLib.json +2 -2
- package/build/contracts/src/challengeV2/libraries/UintUtilsLib.sol/UintUtilsLib.dbg.json +1 -1
- package/build/contracts/src/express-lane-auction/Balance.sol/BalanceLib.dbg.json +1 -1
- package/build/contracts/src/express-lane-auction/Burner.sol/Burner.dbg.json +1 -1
- package/build/contracts/src/express-lane-auction/ELCRound.sol/LatestELCRoundsLib.dbg.json +1 -1
- package/build/contracts/src/express-lane-auction/ExpressLaneAuction.sol/ExpressLaneAuction.dbg.json +1 -1
- package/build/contracts/src/express-lane-auction/ExpressLaneAuction.sol/ExpressLaneAuction.json +2 -2
- package/build/contracts/src/express-lane-auction/IExpressLaneAuction.sol/IExpressLaneAuction.dbg.json +1 -1
- package/build/contracts/src/express-lane-auction/RoundTimingInfo.sol/RoundTimingInfoLib.dbg.json +1 -1
- package/build/contracts/src/libraries/AddressAliasHelper.sol/AddressAliasHelper.dbg.json +1 -1
- package/build/contracts/src/libraries/AdminFallbackProxy.sol/AdminFallbackProxy.dbg.json +1 -1
- package/build/contracts/src/libraries/AdminFallbackProxy.sol/DoubleLogicERC1967Upgrade.dbg.json +1 -1
- package/build/contracts/src/libraries/ArbitrumChecker.sol/ArbitrumChecker.dbg.json +1 -1
- package/build/contracts/src/libraries/CallerChecker.sol/CallerChecker.dbg.json +1 -1
- package/build/contracts/src/libraries/CryptographyPrimitives.sol/CryptographyPrimitives.dbg.json +1 -1
- package/build/contracts/src/libraries/DecimalsConverterHelper.sol/DecimalsConverterHelper.dbg.json +1 -1
- package/build/contracts/src/libraries/DelegateCallAware.sol/DelegateCallAware.dbg.json +1 -1
- package/build/contracts/src/libraries/DoubleLogicUUPSUpgradeable.sol/DoubleLogicUUPSUpgradeable.dbg.json +1 -1
- package/build/contracts/src/libraries/GasRefundEnabled.sol/GasRefundEnabled.dbg.json +1 -1
- package/build/contracts/src/libraries/IGasRefunder.sol/IGasRefunder.dbg.json +1 -1
- package/build/contracts/src/libraries/IReader4844.sol/IReader4844.dbg.json +1 -1
- package/build/contracts/src/libraries/MerkleLib.sol/MerkleLib.dbg.json +1 -1
- package/build/contracts/src/libraries/MerkleLib.sol/MerkleLib.json +2 -2
- package/build/contracts/src/libraries/UUPSNotUpgradeable.sol/UUPSNotUpgradeable.dbg.json +1 -1
- package/build/contracts/src/mocks/BridgeStub.sol/BridgeStub.dbg.json +1 -1
- package/build/contracts/src/mocks/BridgeStub.sol/BridgeStub.json +2 -2
- package/build/contracts/src/mocks/BridgeUnproxied.sol/BridgeUnproxied.dbg.json +1 -1
- package/build/contracts/src/mocks/BridgeUnproxied.sol/BridgeUnproxied.json +2 -2
- package/build/contracts/src/mocks/InboxStub.sol/InboxStub.dbg.json +1 -1
- package/build/contracts/src/mocks/InboxStub.sol/InboxStub.json +2 -2
- package/build/contracts/src/mocks/MerkleTreeAccess.sol/MerkleTreeAccess.dbg.json +1 -1
- package/build/contracts/src/mocks/MerkleTreeAccess.sol/MerkleTreeAccess.json +2 -2
- package/build/contracts/src/mocks/MockRollupEventInbox.sol/MockRollupEventInbox.dbg.json +1 -1
- package/build/contracts/src/mocks/MockRollupEventInbox.sol/MockRollupEventInbox.json +2 -2
- package/build/contracts/src/mocks/SequencerInboxBlobMock.sol/SequencerInboxBlobMock.dbg.json +1 -1
- package/build/contracts/src/mocks/SequencerInboxBlobMock.sol/SequencerInboxBlobMock.json +51 -2
- package/build/contracts/src/mocks/SequencerInboxStub.sol/SequencerInboxStub.dbg.json +1 -1
- package/build/contracts/src/mocks/SequencerInboxStub.sol/SequencerInboxStub.json +51 -2
- package/build/contracts/src/mocks/SimpleOneStepProofEntry.sol/SimpleOneStepProofEntry.dbg.json +1 -1
- package/build/contracts/src/mocks/SimpleOneStepProofEntry.sol/SimpleOneStepProofEntry.json +2 -2
- package/build/contracts/src/mocks/TestWETH9.sol/IWETH9.dbg.json +1 -1
- package/build/contracts/src/mocks/TestWETH9.sol/TestWETH9.dbg.json +1 -1
- package/build/contracts/src/mocks/UpgradeExecutorMock.sol/UpgradeExecutorMock.dbg.json +1 -1
- package/build/contracts/src/node-interface/NodeInterface.sol/NodeInterface.dbg.json +1 -1
- package/build/contracts/src/node-interface/NodeInterfaceDebug.sol/NodeInterfaceDebug.dbg.json +1 -1
- package/build/contracts/src/osp/HashProofHelper.sol/HashProofHelper.dbg.json +1 -1
- package/build/contracts/src/osp/IOneStepProofEntry.sol/IOneStepProofEntry.dbg.json +1 -1
- package/build/contracts/src/osp/IOneStepProofEntry.sol/OneStepProofEntryLib.dbg.json +1 -1
- package/build/contracts/src/osp/IOneStepProofEntry.sol/OneStepProofEntryLib.json +2 -2
- package/build/contracts/src/osp/IOneStepProver.sol/IOneStepProver.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProofEntry.sol/OneStepProofEntry.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProofEntry.sol/OneStepProofEntry.json +2 -2
- package/build/contracts/src/osp/OneStepProver0.sol/OneStepProver0.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProver0.sol/OneStepProver0.json +2 -2
- package/build/contracts/src/osp/OneStepProverHostIo.sol/OneStepProverHostIo.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProverHostIo.sol/OneStepProverHostIo.json +2 -2
- package/build/contracts/src/osp/OneStepProverMath.sol/OneStepProverMath.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProverMath.sol/OneStepProverMath.json +2 -2
- package/build/contracts/src/osp/OneStepProverMemory.sol/OneStepProverMemory.dbg.json +1 -1
- package/build/contracts/src/osp/OneStepProverMemory.sol/OneStepProverMemory.json +2 -2
- package/build/contracts/src/precompiles/ArbAddressTable.sol/ArbAddressTable.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbAggregator.sol/ArbAggregator.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbBLS.sol/ArbBLS.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbDebug.sol/ArbDebug.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbFunctionTable.sol/ArbFunctionTable.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbGasInfo.sol/ArbGasInfo.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbInfo.sol/ArbInfo.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbNativeTokenManager.sol/ArbNativeTokenManager.dbg.json +4 -0
- package/build/contracts/src/precompiles/ArbNativeTokenManager.sol/ArbNativeTokenManager.json +75 -0
- package/build/contracts/src/precompiles/ArbOwner.sol/ArbOwner.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbOwner.sol/ArbOwner.json +71 -0
- package/build/contracts/src/precompiles/ArbOwnerPublic.sol/ArbOwnerPublic.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbOwnerPublic.sol/ArbOwnerPublic.json +32 -0
- package/build/contracts/src/precompiles/ArbRetryableTx.sol/ArbRetryableTx.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbStatistics.sol/ArbStatistics.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbSys.sol/ArbSys.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbWasm.sol/ArbWasm.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbWasmCache.sol/ArbWasmCache.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbosActs.sol/ArbosActs.dbg.json +1 -1
- package/build/contracts/src/precompiles/ArbosTest.sol/ArbosTest.dbg.json +1 -1
- package/build/contracts/src/rollup/AbsRollupEventInbox.sol/AbsRollupEventInbox.dbg.json +1 -1
- package/build/contracts/src/rollup/Assertion.sol/AssertionNodeLib.dbg.json +1 -1
- package/build/contracts/src/rollup/Assertion.sol/AssertionNodeLib.json +2 -2
- package/build/contracts/src/rollup/AssertionState.sol/AssertionStateLib.dbg.json +1 -1
- package/build/contracts/src/rollup/AssertionState.sol/AssertionStateLib.json +2 -2
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/BOLDUpgradeAction.json +2 -2
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ConstantArrayStorage.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ConstantArrayStorage.json +2 -2
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollup.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/IOldRollupAdmin.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/ISeqInboxPostUpgradeInit.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/StateHashPreImageLookup.dbg.json +1 -1
- package/build/contracts/src/rollup/BOLDUpgradeAction.sol/StateHashPreImageLookup.json +2 -2
- package/build/contracts/src/rollup/BridgeCreator.sol/BridgeCreator.dbg.json +1 -1
- package/build/contracts/src/rollup/BridgeCreator.sol/BridgeCreator.json +7 -2
- package/build/contracts/src/rollup/DeployHelper.sol/DeployHelper.dbg.json +1 -1
- package/build/contracts/src/rollup/DeployHelper.sol/DeployHelper.json +2 -2
- package/build/contracts/src/rollup/ERC20RollupEventInbox.sol/ERC20RollupEventInbox.dbg.json +1 -1
- package/build/contracts/src/rollup/ERC20RollupEventInbox.sol/ERC20RollupEventInbox.json +2 -2
- package/build/contracts/src/rollup/FactoryDeployerHelper.sol/FactoryDeployerHelper.dbg.json +1 -1
- package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IDeployHelper.dbg.json +1 -1
- package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IERC20.dbg.json +1 -1
- package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IERC20Bridge.dbg.json +1 -1
- package/build/contracts/src/rollup/FactoryDeployerHelper.sol/IInboxBase.dbg.json +1 -1
- package/build/contracts/src/rollup/IRollupAdmin.sol/IRollupAdmin.dbg.json +1 -1
- package/build/contracts/src/rollup/IRollupCore.sol/IRollupCore.dbg.json +1 -1
- package/build/contracts/src/rollup/IRollupEventInbox.sol/IRollupEventInbox.dbg.json +1 -1
- package/build/contracts/src/rollup/IRollupLogic.sol/IRollupUser.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupAdminLogic.sol/RollupAdminLogic.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupAdminLogic.sol/RollupAdminLogic.json +2 -2
- package/build/contracts/src/rollup/RollupCore.sol/RollupCore.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupCreator.sol/RollupCreator.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupCreator.sol/RollupCreator.json +7 -2
- package/build/contracts/src/rollup/RollupEventInbox.sol/RollupEventInbox.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupEventInbox.sol/RollupEventInbox.json +2 -2
- package/build/contracts/src/rollup/RollupLib.sol/RollupLib.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupLib.sol/RollupLib.json +2 -2
- package/build/contracts/src/rollup/RollupProxy.sol/RollupProxy.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupProxy.sol/RollupProxy.json +2 -2
- package/build/contracts/src/rollup/RollupUserLogic.sol/RollupUserLogic.dbg.json +1 -1
- package/build/contracts/src/rollup/RollupUserLogic.sol/RollupUserLogic.json +2 -2
- package/build/contracts/src/rollup/ValidatorWallet.sol/ValidatorWallet.dbg.json +1 -1
- package/build/contracts/src/rollup/ValidatorWallet.sol/ValidatorWallet.json +2 -2
- package/build/contracts/src/rollup/ValidatorWalletCreator.sol/ValidatorWalletCreator.dbg.json +1 -1
- package/build/contracts/src/rollup/ValidatorWalletCreator.sol/ValidatorWalletCreator.json +2 -2
- package/build/contracts/src/state/Deserialize.sol/Deserialize.dbg.json +1 -1
- package/build/contracts/src/state/GlobalState.sol/GlobalStateLib.dbg.json +1 -1
- package/build/contracts/src/state/Instructions.sol/Instructions.dbg.json +1 -1
- package/build/contracts/src/state/Machine.sol/MachineLib.dbg.json +1 -1
- package/build/contracts/src/state/MerkleProof.sol/MerkleProofLib.dbg.json +1 -1
- package/build/contracts/src/state/Module.sol/ModuleLib.dbg.json +1 -1
- package/build/contracts/src/state/ModuleMemory.sol/ModuleMemoryLib.dbg.json +1 -1
- package/build/contracts/src/state/ModuleMemoryCompact.sol/ModuleMemoryCompactLib.dbg.json +1 -1
- package/build/contracts/src/state/MultiStack.sol/MultiStackLib.dbg.json +1 -1
- package/build/contracts/src/state/PcArray.sol/PcArrayLib.dbg.json +1 -1
- package/build/contracts/src/state/StackFrame.sol/StackFrameLib.dbg.json +1 -1
- package/build/contracts/src/state/Value.sol/ValueLib.dbg.json +1 -1
- package/build/contracts/src/state/ValueArray.sol/ValueArrayLib.dbg.json +1 -1
- package/build/contracts/src/state/ValueStack.sol/ValueStackLib.dbg.json +1 -1
- package/build/contracts/src/stylus/StylusDeployer.sol/StylusDeployer.dbg.json +4 -0
- package/build/contracts/src/stylus/StylusDeployer.sol/StylusDeployer.json +149 -0
- package/build/contracts/src/test-helpers/BridgeTester.sol/BridgeTester.dbg.json +1 -1
- package/build/contracts/src/test-helpers/BridgeTester.sol/BridgeTester.json +2 -2
- package/build/contracts/src/test-helpers/CryptographyPrimitivesTester.sol/CryptographyPrimitivesTester.dbg.json +1 -1
- package/build/contracts/src/test-helpers/EthVault.sol/EthVault.dbg.json +1 -1
- package/build/contracts/src/test-helpers/MessageTester.sol/MessageTester.dbg.json +1 -1
- package/build/contracts/src/test-helpers/NoReceiveForwarder.sol/ConstructorError.dbg.json +4 -0
- package/build/contracts/src/test-helpers/NoReceiveForwarder.sol/ConstructorError.json +16 -0
- package/build/contracts/src/test-helpers/NoReceiveForwarder.sol/ConstructorFine.dbg.json +4 -0
- package/build/contracts/src/test-helpers/NoReceiveForwarder.sol/ConstructorFine.json +29 -0
- package/build/contracts/src/test-helpers/NoReceiveForwarder.sol/NoReceiveForwarder.dbg.json +4 -0
- package/build/contracts/src/test-helpers/NoReceiveForwarder.sol/NoReceiveForwarder.json +29 -0
- package/build/contracts/src/test-helpers/NoReceiveForwarder.sol/ReceivingForwarder.dbg.json +4 -0
- package/build/contracts/src/test-helpers/NoReceiveForwarder.sol/ReceivingForwarder.json +33 -0
- package/build/contracts/src/test-helpers/OutboxWithoutOptTester.sol/OutboxWithoutOptTester.dbg.json +1 -1
- package/build/contracts/src/test-helpers/OutboxWithoutOptTester.sol/OutboxWithoutOptTester.json +2 -2
- package/build/contracts/src/test-helpers/RollupMock.sol/RollupMock.dbg.json +1 -1
- package/build/contracts/src/test-helpers/TestToken.sol/TestToken.dbg.json +1 -1
- package/build/contracts/src/test-helpers/ValueArrayTester.sol/ValueArrayTester.dbg.json +1 -1
- package/package.json +7 -2
- package/src/bridge/ISequencerInbox.sol +33 -1
- package/src/bridge/SequencerInbox.sol +49 -10
- package/src/bridge/extra/ERC20MigrationOutbox.sol +44 -0
- package/src/bridge/extra/IERC20MigrationOutbox.sol +38 -0
- package/src/express-lane-auction/IExpressLaneAuction.sol +4 -0
- package/src/libraries/Error.sol +3 -0
- package/src/precompiles/ArbNativeTokenManager.sol +39 -0
- package/src/precompiles/ArbOwner.sol +28 -0
- package/src/precompiles/ArbOwnerPublic.sol +10 -0
- package/src/rollup/BridgeCreator.sol +5 -2
- package/src/rollup/ERC20RollupEventInbox.sol +16 -2
- package/src/rollup/RollupAdminLogic.sol +0 -3
- package/src/rollup/RollupCreator.sol +3 -1
- package/src/stylus/StylusDeployer.sol +165 -0
- package/src/test-helpers/NoReceiveForwarder.sol +38 -0
- package/build/contracts/src/mocks/ArbOS11To32UpgradeTest.sol/ArbOS11To32UpgradeTest.dbg.json +0 -4
- package/build/contracts/src/mocks/ArbOS11To32UpgradeTest.sol/ArbOS11To32UpgradeTest.json +0 -24
- package/build/contracts/src/mocks/Benchmarks.sol/Benchmarks.dbg.json +0 -4
- package/build/contracts/src/mocks/Benchmarks.sol/Benchmarks.json +0 -46
- package/build/contracts/src/mocks/BigMap.sol/BigMap.dbg.json +0 -4
- package/build/contracts/src/mocks/BigMap.sol/BigMap.json +0 -48
- package/build/contracts/src/mocks/CreateTest.sol/CreateTest.dbg.json +0 -4
- package/build/contracts/src/mocks/CreateTest.sol/CreateTest.json +0 -15
- package/build/contracts/src/mocks/HostioTest.sol/HostioTest.dbg.json +0 -4
- package/build/contracts/src/mocks/HostioTest.sol/HostioTest.json +0 -513
- package/build/contracts/src/mocks/MultiCallTest.sol/MultiCallTest.dbg.json +0 -4
- package/build/contracts/src/mocks/MultiCallTest.sol/MultiCallTest.json +0 -71
- package/build/contracts/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol/PendingBlkTimeAndNrAdvanceCheck.dbg.json +0 -4
- package/build/contracts/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol/PendingBlkTimeAndNrAdvanceCheck.json +0 -36
- package/build/contracts/src/mocks/Program.sol/ProgramTest.dbg.json +0 -4
- package/build/contracts/src/mocks/Program.sol/ProgramTest.json +0 -142
- package/build/contracts/src/mocks/ProxyAdminForBinding.sol/ProxyAdminForBinding.dbg.json +0 -4
- package/build/contracts/src/mocks/ProxyAdminForBinding.sol/ProxyAdminForBinding.json +0 -160
- package/build/contracts/src/mocks/SdkStorage.sol/SdkStorage.dbg.json +0 -4
- package/build/contracts/src/mocks/SdkStorage.sol/SdkStorage.json +0 -25
- package/build/contracts/src/mocks/SelfDestruct.sol/SelfDestructInConstructorWithDestination.dbg.json +0 -4
- package/build/contracts/src/mocks/SelfDestruct.sol/SelfDestructInConstructorWithDestination.json +0 -22
- package/build/contracts/src/mocks/SelfDestruct.sol/SelfDestructInConstructorWithoutDestination.dbg.json +0 -4
- package/build/contracts/src/mocks/SelfDestruct.sol/SelfDestructInConstructorWithoutDestination.json +0 -16
- package/build/contracts/src/mocks/SelfDestruct.sol/SelfDestructOutsideConstructor.dbg.json +0 -4
- package/build/contracts/src/mocks/SelfDestruct.sol/SelfDestructOutsideConstructor.json +0 -36
- package/build/contracts/src/mocks/Simple.sol/Simple.dbg.json +0 -4
- package/build/contracts/src/mocks/Simple.sol/Simple.json +0 -303
- package/build/contracts/src/mocks/SimpleCacheManager.sol/SimpleCacheManager.dbg.json +0 -4
- package/build/contracts/src/mocks/SimpleCacheManager.sol/SimpleCacheManager.json +0 -37
- package/build/contracts/src/mocks/SimpleProxy.sol/SimpleProxy.dbg.json +0 -4
- package/build/contracts/src/mocks/SimpleProxy.sol/SimpleProxy.json +0 -30
- package/src/mocks/ArbOS11To32UpgradeTest.sol +0 -18
- package/src/mocks/Benchmarks.sol +0 -52
- package/src/mocks/BigMap.sol +0 -23
- package/src/mocks/CreateTest.sol +0 -44
- package/src/mocks/HostioTest.sol +0 -200
- package/src/mocks/MultiCallTest.sol +0 -119
- package/src/mocks/PendingBlkTimeAndNrAdvanceCheck.sol +0 -31
- package/src/mocks/Program.sol +0 -128
- package/src/mocks/ProxyAdminForBinding.sol +0 -9
- package/src/mocks/SdkStorage.sol +0 -176
- package/src/mocks/SelfDestruct.sol +0 -33
- package/src/mocks/Simple.sol +0 -168
- package/src/mocks/SimpleCacheManager.sol +0 -29
- package/src/mocks/SimpleProxy.sol +0 -21
package/src/libraries/Error.sol
CHANGED
@@ -206,6 +206,9 @@ error Deprecated();
|
|
206
206
|
/// @dev Thrown when any component of maxTimeVariation is over uint64
|
207
207
|
error BadMaxTimeVariation();
|
208
208
|
|
209
|
+
/// @dev Thrown when a fee token pricer is provided but the chain doesn't use a fee token
|
210
|
+
error CannotSetFeeTokenPricer();
|
211
|
+
|
209
212
|
/// @dev Thrown when any component of bufferConfig is zero
|
210
213
|
error BadBufferConfig();
|
211
214
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
// Copyright 2021-2025, Offchain Labs, Inc.
|
2
|
+
// For license information, see https://github.com/OffchainLabs/nitro-contracts/blob/main/LICENSE.md
|
3
|
+
// SPDX-License-Identifier: BUSL-1.1
|
4
|
+
|
5
|
+
pragma solidity >=0.4.21 <0.9.0;
|
6
|
+
|
7
|
+
/**
|
8
|
+
* @title Enables minting and burning native tokens.
|
9
|
+
* @notice Authorized callers are added/removed through ArbOwner precompile.
|
10
|
+
* Precompiled contract that exists in every Arbitrum chain at 0x0000000000000000000000000000000000000073.
|
11
|
+
* Available in ArbOS version 41
|
12
|
+
*/
|
13
|
+
interface ArbNativeTokenManager {
|
14
|
+
/**
|
15
|
+
* @notice Emitted when some amount of the native gas token is minted to a NativeTokenOwner.
|
16
|
+
*/
|
17
|
+
event NativeTokenMinted(address indexed to, uint256 amount);
|
18
|
+
|
19
|
+
/**
|
20
|
+
* @notice Emitted when some amount of the native gas token is burned from a NativeTokenOwner.
|
21
|
+
*/
|
22
|
+
event NativeTokenBurned(address indexed from, uint256 amount);
|
23
|
+
|
24
|
+
/**
|
25
|
+
* @notice In case the caller is authorized,
|
26
|
+
* mints some amount of the native gas token for this chain to the caller.
|
27
|
+
*/
|
28
|
+
function mintNativeToken(
|
29
|
+
uint256 amount
|
30
|
+
) external;
|
31
|
+
|
32
|
+
/**
|
33
|
+
* @notice In case the caller is authorized,
|
34
|
+
* burns some amount of the native gas token for this chain from the caller.
|
35
|
+
*/
|
36
|
+
function burnNativeToken(
|
37
|
+
uint256 amount
|
38
|
+
) external;
|
39
|
+
}
|
@@ -33,6 +33,34 @@ interface ArbOwner {
|
|
33
33
|
/// @notice Retrieves the list of chain owners
|
34
34
|
function getAllChainOwners() external view returns (address[] memory);
|
35
35
|
|
36
|
+
/// @notice Sets the NativeTokenManagementFrom time
|
37
|
+
/// Available in ArbOS version 41
|
38
|
+
function setNativeTokenManagementFrom(
|
39
|
+
uint64 timestamp
|
40
|
+
) external;
|
41
|
+
|
42
|
+
/// @notice Add account as a native token owner
|
43
|
+
/// Available in ArbOS version 41
|
44
|
+
function addNativeTokenOwner(
|
45
|
+
address newOwner
|
46
|
+
) external;
|
47
|
+
|
48
|
+
/// @notice Remove account from the list of native token owners
|
49
|
+
/// Available in ArbOS version 41
|
50
|
+
function removeNativeTokenOwner(
|
51
|
+
address ownerToRemove
|
52
|
+
) external;
|
53
|
+
|
54
|
+
/// @notice See if the user is a native token owner
|
55
|
+
/// Available in ArbOS version 41
|
56
|
+
function isNativeTokenOwner(
|
57
|
+
address addr
|
58
|
+
) external view returns (bool);
|
59
|
+
|
60
|
+
/// @notice Retrieves the list of native token owners
|
61
|
+
/// Available in ArbOS version 41
|
62
|
+
function getAllNativeTokenOwners() external view returns (address[] memory);
|
63
|
+
|
36
64
|
/// @notice Set how slowly ArbOS updates its estimate of the L1 basefee
|
37
65
|
function setL1BaseFeeEstimateInertia(
|
38
66
|
uint64 inertia
|
@@ -24,6 +24,16 @@ interface ArbOwnerPublic {
|
|
24
24
|
/// @notice Retrieves the list of chain owners
|
25
25
|
function getAllChainOwners() external view returns (address[] memory);
|
26
26
|
|
27
|
+
/// @notice See if the user is a native token owner
|
28
|
+
/// Available in ArbOS version 41
|
29
|
+
function isNativeTokenOwner(
|
30
|
+
address addr
|
31
|
+
) external view returns (bool);
|
32
|
+
|
33
|
+
/// @notice Retrieves the list of native token owners
|
34
|
+
/// Available in ArbOS version 41
|
35
|
+
function getAllNativeTokenOwners() external view returns (address[] memory);
|
36
|
+
|
27
37
|
/// @notice Gets the network fee collector
|
28
38
|
function getNetworkFeeAccount() external view returns (address);
|
29
39
|
|
@@ -120,7 +120,8 @@ contract BridgeCreator is Ownable {
|
|
120
120
|
address rollup,
|
121
121
|
address nativeToken,
|
122
122
|
ISequencerInbox.MaxTimeVariation calldata maxTimeVariation,
|
123
|
-
BufferConfig calldata bufferConfig
|
123
|
+
BufferConfig calldata bufferConfig,
|
124
|
+
IFeeTokenPricer feeTokenPricer
|
124
125
|
) external returns (BridgeContracts memory) {
|
125
126
|
// use create2 salt to ensure deterministic addresses
|
126
127
|
bytes32 create2Salt = keccak256(abi.encode(msg.data, msg.sender));
|
@@ -141,7 +142,9 @@ contract BridgeCreator is Ownable {
|
|
141
142
|
} else {
|
142
143
|
IERC20Bridge(address(frame.bridge)).initialize(IOwnable(rollup), nativeToken);
|
143
144
|
}
|
144
|
-
frame.sequencerInbox.initialize(
|
145
|
+
frame.sequencerInbox.initialize(
|
146
|
+
IBridge(frame.bridge), maxTimeVariation, bufferConfig, feeTokenPricer
|
147
|
+
);
|
145
148
|
frame.inbox.initialize(frame.bridge, frame.sequencerInbox);
|
146
149
|
frame.rollupEventInbox.initialize(frame.bridge);
|
147
150
|
frame.outbox.initialize(frame.bridge);
|
@@ -6,6 +6,7 @@ pragma solidity ^0.8.0;
|
|
6
6
|
|
7
7
|
import "./AbsRollupEventInbox.sol";
|
8
8
|
import "../bridge/IERC20Bridge.sol";
|
9
|
+
import "../bridge/ISequencerInbox.sol";
|
9
10
|
import {INITIALIZATION_MSG_TYPE} from "../libraries/MessageTypes.sol";
|
10
11
|
|
11
12
|
/**
|
@@ -23,8 +24,21 @@ contract ERC20RollupEventInbox is AbsRollupEventInbox {
|
|
23
24
|
);
|
24
25
|
}
|
25
26
|
|
26
|
-
function _currentDataCostToReport() internal
|
27
|
-
//
|
27
|
+
function _currentDataCostToReport() internal override returns (uint256) {
|
28
|
+
// if a fee token pricer is configured then it can be used to charge for data posting fees
|
29
|
+
ISequencerInbox seqInbox = ISequencerInbox(bridge.sequencerInbox());
|
30
|
+
IFeeTokenPricer feeTokenPricer = seqInbox.feeTokenPricer();
|
31
|
+
if (address(feeTokenPricer) != address(0)) {
|
32
|
+
uint256 gasPrice = block.basefee;
|
33
|
+
if (ArbitrumChecker.runningOnArbitrum()) {
|
34
|
+
gasPrice += ArbGasInfo(address(0x6c)).getL1BaseFeeEstimate();
|
35
|
+
}
|
36
|
+
// scale the current gas price to the child chain gas price
|
37
|
+
uint256 exchangeRate = feeTokenPricer.getExchangeRate();
|
38
|
+
return (gasPrice * exchangeRate) / 1e18;
|
39
|
+
}
|
40
|
+
|
41
|
+
// if no fee token pricer is configured then data costs cant be reimbursed, and l1 price is set to 0
|
28
42
|
return 0;
|
29
43
|
}
|
30
44
|
}
|
@@ -308,9 +308,6 @@ contract RollupAdminLogic is RollupCore, IRollupAdmin, DoubleLogicUUPSUpgradeabl
|
|
308
308
|
// 4. create a new assertion using the assertion with the updated config has as a prev
|
309
309
|
// 5. force confirm it - this is necessary to set latestConfirmed on the correct line
|
310
310
|
// 6. unpause the contract
|
311
|
-
|
312
|
-
// Normally, a new assertion is created using its prev's confirmPeriodBlocks
|
313
|
-
// in the case of a force create, we use the rollup's current confirmPeriodBlocks
|
314
311
|
createNewAssertion(assertion, prevAssertionHash, expectedAssertionHash);
|
315
312
|
|
316
313
|
emit AssertionForceCreated(expectedAssertionHash);
|
@@ -41,6 +41,7 @@ contract RollupCreator is Ownable {
|
|
41
41
|
uint256 maxFeePerGasForRetryables;
|
42
42
|
address[] batchPosters;
|
43
43
|
address batchPosterManager;
|
44
|
+
IFeeTokenPricer feeTokenPricer;
|
44
45
|
}
|
45
46
|
|
46
47
|
BridgeCreator public bridgeCreator;
|
@@ -186,7 +187,8 @@ contract RollupCreator is Ownable {
|
|
186
187
|
address(rollup),
|
187
188
|
deployParams.nativeToken,
|
188
189
|
deployParams.config.sequencerInboxMaxTimeVariation,
|
189
|
-
deployParams.config.bufferConfig
|
190
|
+
deployParams.config.bufferConfig,
|
191
|
+
deployParams.feeTokenPricer
|
190
192
|
);
|
191
193
|
|
192
194
|
IEdgeChallengeManager challengeManager =
|
@@ -0,0 +1,165 @@
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
2
|
+
pragma solidity 0.8.17;
|
3
|
+
|
4
|
+
import {ArbWasm} from "../precompiles/ArbWasm.sol";
|
5
|
+
|
6
|
+
/// @title A Stylus contract deployer, activator and initializer
|
7
|
+
/// @author The name of the author
|
8
|
+
/// @notice Stylus contracts do not support constructors. Instead, Stylus devs can use this contract to deploy and
|
9
|
+
/// initialize their contracts atomically
|
10
|
+
contract StylusDeployer {
|
11
|
+
ArbWasm constant ARB_WASM = ArbWasm(0x0000000000000000000000000000000000000071);
|
12
|
+
|
13
|
+
event ContractDeployed(address deployedContract);
|
14
|
+
|
15
|
+
error ContractDeploymentError(bytes bytecode);
|
16
|
+
error ContractInitializationError(address newContract, bytes data);
|
17
|
+
error RefundExcessValueError(uint256 excessValue);
|
18
|
+
error EmptyBytecode();
|
19
|
+
error InitValueButNotInitData();
|
20
|
+
|
21
|
+
/// @notice Deploy, activate and initialize a stylus contract
|
22
|
+
/// In order to call a stylus contract, and therefore initialize it, it must first be activated.
|
23
|
+
/// This contract provides an atomic way of deploying, activating and initializing a stylus contract.
|
24
|
+
///
|
25
|
+
/// Initialisation will be called if initData is supplied, other initialization is skipped
|
26
|
+
/// Activation is not always necessary. If a contract has the same code has as another recently activated
|
27
|
+
/// contract then activation will be skipped.
|
28
|
+
/// If additional value remains in the contract after activation it will be transferred to the msg.sender
|
29
|
+
/// to that end the caller must ensure that they can receive eth.
|
30
|
+
///
|
31
|
+
/// The caller should do the following before calling this contract:
|
32
|
+
/// 1. Check whether the contract will require activation, and if so what the cost will be.
|
33
|
+
/// This can be done by spoofing an address with the contract code, then calling ArbWasm.programVersion to compare the
|
34
|
+
/// the returned result against ArbWasm.stylusVersion. If activation is required ArbWasm.activateProgram can then be called
|
35
|
+
/// to find the returned dataFee.
|
36
|
+
/// 2. Next this deploy function can be called. The value of the call must be set to the previously ascertained dataFee + initValue
|
37
|
+
/// If activation is not require, the value of the call should be set to initValue
|
38
|
+
///
|
39
|
+
/// Note: Stylus contract caching is not done by the deployer, and will have to be done separately after deployment.
|
40
|
+
/// See https://docs.arbitrum.io/stylus/how-tos/caching-contracts for more details on caching
|
41
|
+
/// @param bytecode The bytecode of the stylus contract to be deployed
|
42
|
+
/// @param initData Initialisation call data. After deployment the contract will be called with this data
|
43
|
+
/// If no initialisation data is provided then the newly deployed contract will not be called.
|
44
|
+
/// This means that the receive or dataless fallback function cannot be called from this contract.
|
45
|
+
/// @param initValue Initialisation value. After deployment, the contract will be called with the init data and this value.
|
46
|
+
/// At least as much eth as init value must be provided with this call. Init value is specified here separately
|
47
|
+
/// rather than using the msg.value since the msg.value may need to be greater than the init value to accomodate activation data fee.
|
48
|
+
/// See the @notice block above for more details.
|
49
|
+
/// @param salt If a non zero salt is provided the contract will be created using CREATE2 instead of CREATE
|
50
|
+
/// The supplied salt will be hashed with the initData so that wherever the address is observed
|
51
|
+
/// it was initialised with the same variables.
|
52
|
+
/// @return The address of the deployed conract
|
53
|
+
function deploy(
|
54
|
+
bytes calldata bytecode,
|
55
|
+
bytes calldata initData,
|
56
|
+
uint256 initValue,
|
57
|
+
bytes32 salt
|
58
|
+
) public payable returns (address) {
|
59
|
+
if (salt != 0) {
|
60
|
+
// if a salt was supplied, hash the salt with the init data. This guarantees that
|
61
|
+
// anywhere the address of this contract is seen the same init data was used
|
62
|
+
salt = initSalt(salt, initData);
|
63
|
+
}
|
64
|
+
|
65
|
+
address newContractAddress = deployContract(bytecode, salt);
|
66
|
+
bool shouldActivate = requiresActivation(newContractAddress);
|
67
|
+
uint256 dataFee = 0;
|
68
|
+
if (shouldActivate) {
|
69
|
+
// ensure there will be enough left over for init
|
70
|
+
// activateProgram will return unused value back to this contract without an EVM call
|
71
|
+
uint256 activationValue = msg.value - initValue;
|
72
|
+
(, dataFee) = ARB_WASM.activateProgram{value: activationValue}(newContractAddress);
|
73
|
+
}
|
74
|
+
|
75
|
+
// initialize - this will fail if the program wasn't activated by this point
|
76
|
+
// we check if initData exists to avoid calling contracts unnecessarily
|
77
|
+
if (initData.length != 0) {
|
78
|
+
(bool success, bytes memory data) =
|
79
|
+
address(newContractAddress).call{value: initValue}(initData);
|
80
|
+
if (!success) {
|
81
|
+
revert ContractInitializationError(newContractAddress, data);
|
82
|
+
}
|
83
|
+
} else if (initValue != 0) {
|
84
|
+
// if initValue exists init data should too
|
85
|
+
revert InitValueButNotInitData();
|
86
|
+
}
|
87
|
+
|
88
|
+
// refund any remaining value
|
89
|
+
uint256 bal = msg.value - dataFee - initValue;
|
90
|
+
if (bal != 0) {
|
91
|
+
// the caller must be payable
|
92
|
+
(bool sent,) = payable(msg.sender).call{value: bal}("");
|
93
|
+
if (!sent) {
|
94
|
+
revert RefundExcessValueError(bal);
|
95
|
+
}
|
96
|
+
}
|
97
|
+
|
98
|
+
// activation already emits the following event:
|
99
|
+
// event ProgramActivated(bytes32 indexed codehash, bytes32 moduleHash, address program, uint256 dataFee, uint16 version);
|
100
|
+
emit ContractDeployed(newContractAddress);
|
101
|
+
|
102
|
+
return newContractAddress;
|
103
|
+
}
|
104
|
+
|
105
|
+
/// @notice When using CREATE2 the deployer includes the init data and value in the salt so that callers
|
106
|
+
/// can be sure that wherever they encourter this address it was initialized with the same data and value
|
107
|
+
/// @param salt A user supplied salt
|
108
|
+
/// @param initData The init data that will be used to init the deployed contract
|
109
|
+
function initSalt(bytes32 salt, bytes calldata initData) public pure returns (bytes32) {
|
110
|
+
return keccak256(abi.encodePacked(salt, initData));
|
111
|
+
}
|
112
|
+
|
113
|
+
/// @notice Checks whether a contract requires activation
|
114
|
+
function requiresActivation(
|
115
|
+
address addr
|
116
|
+
) public view returns (bool) {
|
117
|
+
// currently codeHashVersion returns an error when codeHashVersion != stylus version
|
118
|
+
// so we do a try/catch to to check it
|
119
|
+
uint16 codeHashVersion;
|
120
|
+
try ARB_WASM.codehashVersion(addr.codehash) returns (uint16 version) {
|
121
|
+
codeHashVersion = version;
|
122
|
+
} catch {
|
123
|
+
// stylus version is always >= 1
|
124
|
+
codeHashVersion = 0;
|
125
|
+
}
|
126
|
+
|
127
|
+
// due to the bug in ARB_WASM.codeHashVersion we know that codeHashVersion will either be 0 or the current
|
128
|
+
// version. We still check that is not equal to the stylusVersion
|
129
|
+
return codeHashVersion != ARB_WASM.stylusVersion();
|
130
|
+
}
|
131
|
+
|
132
|
+
/// @notice Deploy the a contract with the supplied bytecode.
|
133
|
+
/// Will create2 if the supplied salt is non zero
|
134
|
+
function deployContract(bytes memory bytecode, bytes32 salt) internal returns (address) {
|
135
|
+
if (bytecode.length == 0) {
|
136
|
+
revert EmptyBytecode();
|
137
|
+
}
|
138
|
+
|
139
|
+
address newContractAddress;
|
140
|
+
if (salt != 0) {
|
141
|
+
assembly {
|
142
|
+
newContractAddress := create2(0, add(bytecode, 0x20), mload(bytecode), salt)
|
143
|
+
}
|
144
|
+
} else {
|
145
|
+
assembly {
|
146
|
+
newContractAddress := create(0, add(bytecode, 0x20), mload(bytecode))
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
// bubble up the revert if there was one
|
151
|
+
assembly {
|
152
|
+
if and(iszero(newContractAddress), not(iszero(returndatasize()))) {
|
153
|
+
let p := mload(0x40)
|
154
|
+
returndatacopy(p, 0, returndatasize())
|
155
|
+
revert(p, returndatasize())
|
156
|
+
}
|
157
|
+
}
|
158
|
+
|
159
|
+
if (newContractAddress == address(0)) {
|
160
|
+
revert ContractDeploymentError(bytecode);
|
161
|
+
}
|
162
|
+
|
163
|
+
return newContractAddress;
|
164
|
+
}
|
165
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
2
|
+
pragma solidity ^0.8.0;
|
3
|
+
|
4
|
+
/// @notice A call forward that doesnt implement the receive or fallback functions, so cant receive value
|
5
|
+
contract NoReceiveForwarder {
|
6
|
+
function forward(address to, bytes calldata data) public payable {
|
7
|
+
(bool success,) = address(to).call{value: msg.value}(data);
|
8
|
+
require(success, "call forward failed");
|
9
|
+
}
|
10
|
+
}
|
11
|
+
|
12
|
+
/// @notice A call forward that does implement the receive or fallback functions, so cant receive value
|
13
|
+
contract ReceivingForwarder {
|
14
|
+
function forward(address to, bytes calldata data) public payable {
|
15
|
+
(bool success,) = address(to).call{value: msg.value}(data);
|
16
|
+
require(success, "call forward failed");
|
17
|
+
}
|
18
|
+
|
19
|
+
receive() external payable {}
|
20
|
+
}
|
21
|
+
|
22
|
+
/// @notice Errors upon construction
|
23
|
+
contract ConstructorError {
|
24
|
+
constructor() {
|
25
|
+
require(false, "test error in constructor");
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
/// @notice Errors upon construction
|
30
|
+
contract ConstructorFine {
|
31
|
+
constructor() {
|
32
|
+
require(true, "test error in constructor");
|
33
|
+
}
|
34
|
+
|
35
|
+
function number() public pure returns (uint256) {
|
36
|
+
return 0;
|
37
|
+
}
|
38
|
+
}
|
@@ -1,24 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"_format": "hh-sol-artifact-1",
|
3
|
-
"contractName": "ArbOS11To32UpgradeTest",
|
4
|
-
"sourceName": "src/mocks/ArbOS11To32UpgradeTest.sol",
|
5
|
-
"abi": [
|
6
|
-
{
|
7
|
-
"inputs": [],
|
8
|
-
"name": "mcopy",
|
9
|
-
"outputs": [
|
10
|
-
{
|
11
|
-
"internalType": "bytes32",
|
12
|
-
"name": "x",
|
13
|
-
"type": "bytes32"
|
14
|
-
}
|
15
|
-
],
|
16
|
-
"stateMutability": "nonpayable",
|
17
|
-
"type": "function"
|
18
|
-
}
|
19
|
-
],
|
20
|
-
"bytecode": "0x608060405234801561000f575f80fd5b5061014e8061001d5f395ff3fe608060405234801561000f575f80fd5b5060043610610029575f3560e01c806319b0cc231461002d575b5f80fd5b610035610047565b60405190815260200160405180910390f35b5f60096020526020805f5e5f51905060646001600160a01b031663051038f26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610093573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100b79190610101565b6057146100fe5760405162461bcd60e51b815260206004820152601160248201527022ac2822a1aa22a22fa0a92127a9af999960791b604482015260640160405180910390fd5b90565b5f60208284031215610111575f80fd5b505191905056fea26469706673582212209dea1ebe41065a9fcc7551ce48ee3750697e8689adeae54c74e6ead3a017aef464736f6c63430008180033",
|
21
|
-
"deployedBytecode": "0x608060405234801561000f575f80fd5b5060043610610029575f3560e01c806319b0cc231461002d575b5f80fd5b610035610047565b60405190815260200160405180910390f35b5f60096020526020805f5e5f51905060646001600160a01b031663051038f26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610093573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100b79190610101565b6057146100fe5760405162461bcd60e51b815260206004820152601160248201527022ac2822a1aa22a22fa0a92127a9af999960791b604482015260640160405180910390fd5b90565b5f60208284031215610111575f80fd5b505191905056fea26469706673582212209dea1ebe41065a9fcc7551ce48ee3750697e8689adeae54c74e6ead3a017aef464736f6c63430008180033",
|
22
|
-
"linkReferences": {},
|
23
|
-
"deployedLinkReferences": {}
|
24
|
-
}
|
@@ -1,46 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"_format": "hh-sol-artifact-1",
|
3
|
-
"contractName": "Benchmarks",
|
4
|
-
"sourceName": "src/mocks/Benchmarks.sol",
|
5
|
-
"abi": [
|
6
|
-
{
|
7
|
-
"inputs": [],
|
8
|
-
"name": "fillBlockAdd",
|
9
|
-
"outputs": [],
|
10
|
-
"stateMutability": "payable",
|
11
|
-
"type": "function"
|
12
|
-
},
|
13
|
-
{
|
14
|
-
"inputs": [],
|
15
|
-
"name": "fillBlockHash",
|
16
|
-
"outputs": [],
|
17
|
-
"stateMutability": "payable",
|
18
|
-
"type": "function"
|
19
|
-
},
|
20
|
-
{
|
21
|
-
"inputs": [],
|
22
|
-
"name": "fillBlockMulMod",
|
23
|
-
"outputs": [],
|
24
|
-
"stateMutability": "payable",
|
25
|
-
"type": "function"
|
26
|
-
},
|
27
|
-
{
|
28
|
-
"inputs": [],
|
29
|
-
"name": "fillBlockQuickStep",
|
30
|
-
"outputs": [],
|
31
|
-
"stateMutability": "payable",
|
32
|
-
"type": "function"
|
33
|
-
},
|
34
|
-
{
|
35
|
-
"inputs": [],
|
36
|
-
"name": "fillBlockRecover",
|
37
|
-
"outputs": [],
|
38
|
-
"stateMutability": "payable",
|
39
|
-
"type": "function"
|
40
|
-
}
|
41
|
-
],
|
42
|
-
"bytecode": "0x608060405234801561001057600080fd5b50610321806100206000396000f3fe60806040526004361061005a5760003560e01c80636488e930116100435780636488e93014610071578063ea01a66f14610079578063fb721c181461008157600080fd5b80630b39d8e51461005f578063142ddcf914610069575b600080fd5b610067610089565b005b6100676101ff565b610067610229565b610067610296565b6100676102a0565b7feddecf107b5740cef7f5a01e3ea7e287665c4e75a8eb6afae2fda2e3d436778673361594f5429d23ece0a88e4fbe529e1c49d524d8601b7fc6178c2de1078cd36c3bd302cde755340d7f17fcb3fcc0b9c333ba03b217029f7f5fdbcefe2675e96219cdae57a7894280bf80fd40d44ce146a35e169ea6a78fd35b60408051600081526020810180835287905260ff851691810191909152606081018390526080810182905273ffffffffffffffffffffffffffffffffffffffff85169060019060a0016020604051602081039080840390855afa15801561016f573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16146101fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f57524f4e475f415242494e415554000000000000000000000000000000000000604482015260640160405180910390fd5b610104565b60005b7feddecf107b5740cef7f5a01e3ea7e287665c4e75a8eb6afae2fda2e3d436778601610202565b7feddecf107b5740cef7f5a01e3ea7e287665c4e75a8eb6afae2fda2e3d43677865b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f7fc6178c2de1078cd36c3bd302cde755340d7f17fcb3fcc0b9c333ba03b217029f8209905061024b565b60005b5034610299565b7feddecf107b5740cef7f5a01e3ea7e287665c4e75a8eb6afae2fda2e3d43677865b6040805160208101839052016040516020818303038152906040528051906020012090506102c256fea264697066735822122027bb326e97bf6a46d542532f574c63c704a8e473e80dfcc3f9d3971a6d1d41b764736f6c63430008110033",
|
43
|
-
"deployedBytecode": "0x60806040526004361061005a5760003560e01c80636488e930116100435780636488e93014610071578063ea01a66f14610079578063fb721c181461008157600080fd5b80630b39d8e51461005f578063142ddcf914610069575b600080fd5b610067610089565b005b6100676101ff565b610067610229565b610067610296565b6100676102a0565b7feddecf107b5740cef7f5a01e3ea7e287665c4e75a8eb6afae2fda2e3d436778673361594f5429d23ece0a88e4fbe529e1c49d524d8601b7fc6178c2de1078cd36c3bd302cde755340d7f17fcb3fcc0b9c333ba03b217029f7f5fdbcefe2675e96219cdae57a7894280bf80fd40d44ce146a35e169ea6a78fd35b60408051600081526020810180835287905260ff851691810191909152606081018390526080810182905273ffffffffffffffffffffffffffffffffffffffff85169060019060a0016020604051602081039080840390855afa15801561016f573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16146101fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f57524f4e475f415242494e415554000000000000000000000000000000000000604482015260640160405180910390fd5b610104565b60005b7feddecf107b5740cef7f5a01e3ea7e287665c4e75a8eb6afae2fda2e3d436778601610202565b7feddecf107b5740cef7f5a01e3ea7e287665c4e75a8eb6afae2fda2e3d43677865b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f7fc6178c2de1078cd36c3bd302cde755340d7f17fcb3fcc0b9c333ba03b217029f8209905061024b565b60005b5034610299565b7feddecf107b5740cef7f5a01e3ea7e287665c4e75a8eb6afae2fda2e3d43677865b6040805160208101839052016040516020818303038152906040528051906020012090506102c256fea264697066735822122027bb326e97bf6a46d542532f574c63c704a8e473e80dfcc3f9d3971a6d1d41b764736f6c63430008110033",
|
44
|
-
"linkReferences": {},
|
45
|
-
"deployedLinkReferences": {}
|
46
|
-
}
|
@@ -1,48 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"_format": "hh-sol-artifact-1",
|
3
|
-
"contractName": "BigMap",
|
4
|
-
"sourceName": "src/mocks/BigMap.sol",
|
5
|
-
"abi": [
|
6
|
-
{
|
7
|
-
"inputs": [
|
8
|
-
{
|
9
|
-
"internalType": "uint256",
|
10
|
-
"name": "clear",
|
11
|
-
"type": "uint256"
|
12
|
-
},
|
13
|
-
{
|
14
|
-
"internalType": "uint256",
|
15
|
-
"name": "add",
|
16
|
-
"type": "uint256"
|
17
|
-
}
|
18
|
-
],
|
19
|
-
"name": "clearAndAddValues",
|
20
|
-
"outputs": [],
|
21
|
-
"stateMutability": "nonpayable",
|
22
|
-
"type": "function"
|
23
|
-
},
|
24
|
-
{
|
25
|
-
"inputs": [
|
26
|
-
{
|
27
|
-
"internalType": "uint256",
|
28
|
-
"name": "",
|
29
|
-
"type": "uint256"
|
30
|
-
}
|
31
|
-
],
|
32
|
-
"name": "data",
|
33
|
-
"outputs": [
|
34
|
-
{
|
35
|
-
"internalType": "uint256",
|
36
|
-
"name": "",
|
37
|
-
"type": "uint256"
|
38
|
-
}
|
39
|
-
],
|
40
|
-
"stateMutability": "view",
|
41
|
-
"type": "function"
|
42
|
-
}
|
43
|
-
],
|
44
|
-
"bytecode": "0x608060405234801561001057600080fd5b506101e9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c8063a2fe30ff1461003b578063f0ba844014610050575b600080fd5b61004e6100493660046100f8565b610082565b005b61007061005e36600461011a565b60006020819052908152604090205481565b60405190815260200160405180910390f35b6001545b816001546100949190610162565b8110156100c157600081815260208190526040902062845fed9055806100b98161017b565b915050610086565b600181905560005b838110156100f257600081815260208190526040812055806100ea8161017b565b9150506100c9565b50505050565b6000806040838503121561010b57600080fd5b50508035926020909101359150565b60006020828403121561012c57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561017557610175610133565b92915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036101ac576101ac610133565b506001019056fea2646970667358221220d7c605ba9e85f421d609c402eb23f4342b0fa52d1bc480f84d7e85aa5b77801b64736f6c63430008110033",
|
45
|
-
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063a2fe30ff1461003b578063f0ba844014610050575b600080fd5b61004e6100493660046100f8565b610082565b005b61007061005e36600461011a565b60006020819052908152604090205481565b60405190815260200160405180910390f35b6001545b816001546100949190610162565b8110156100c157600081815260208190526040902062845fed9055806100b98161017b565b915050610086565b600181905560005b838110156100f257600081815260208190526040812055806100ea8161017b565b9150506100c9565b50505050565b6000806040838503121561010b57600080fd5b50508035926020909101359150565b60006020828403121561012c57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561017557610175610133565b92915050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036101ac576101ac610133565b506001019056fea2646970667358221220d7c605ba9e85f421d609c402eb23f4342b0fa52d1bc480f84d7e85aa5b77801b64736f6c63430008110033",
|
46
|
-
"linkReferences": {},
|
47
|
-
"deployedLinkReferences": {}
|
48
|
-
}
|
@@ -1,15 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"_format": "hh-sol-artifact-1",
|
3
|
-
"contractName": "CreateTest",
|
4
|
-
"sourceName": "src/mocks/CreateTest.sol",
|
5
|
-
"abi": [
|
6
|
-
{
|
7
|
-
"stateMutability": "nonpayable",
|
8
|
-
"type": "fallback"
|
9
|
-
}
|
10
|
-
],
|
11
|
-
"bytecode": "0x608060405234801561001057600080fd5b506102d2806100206000396000f3fe608060405234801561001057600080fd5b50600036606060008383600081811061002b5761002b610206565b919091013560f81c915061004490508360018187610235565b909450925060006100586020828688610235565b6100619161025f565b90506100708460208188610235565b9450945060008260ff166002036100fb576000610090602082888a610235565b6100999161025f565b90506100a8866020818a610235565b96509650600087878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050825192935084929150506020830186f592505050610143565b600086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060208301905084f09150505b73ffffffffffffffffffffffffffffffffffffffff81166101c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6661696c656420746f2063726561746500000000000000000000000000000000604482015260640160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c80519650602001945050505050f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000808585111561024557600080fd5b8386111561025257600080fd5b5050820193919092039150565b80356020831015610296577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b9291505056fea26469706673582212209431771ba2c9b8e2676999adcd0dff83847db2d5a6b3805a1b7d04ccc2f5231564736f6c63430008110033",
|
12
|
-
"deployedBytecode": "0x608060405234801561001057600080fd5b50600036606060008383600081811061002b5761002b610206565b919091013560f81c915061004490508360018187610235565b909450925060006100586020828688610235565b6100619161025f565b90506100708460208188610235565b9450945060008260ff166002036100fb576000610090602082888a610235565b6100999161025f565b90506100a8866020818a610235565b96509650600087878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050825192935084929150506020830186f592505050610143565b600086868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505082519293505060208301905084f09150505b73ffffffffffffffffffffffffffffffffffffffff81166101c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6661696c656420746f2063726561746500000000000000000000000000000000604482015260640160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16803b806020016040519081016040528181526000908060200190933c80519650602001945050505050f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000808585111561024557600080fd5b8386111561025257600080fd5b5050820193919092039150565b80356020831015610296577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b165b9291505056fea26469706673582212209431771ba2c9b8e2676999adcd0dff83847db2d5a6b3805a1b7d04ccc2f5231564736f6c63430008110033",
|
13
|
-
"linkReferences": {},
|
14
|
-
"deployedLinkReferences": {}
|
15
|
-
}
|