diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index b17d2b067a..ff3934599f 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -9,6 +9,8 @@ jobs: id-token: write contents: read actions: read + env: + ALLOW_FAILURE: ${{ contains(join(github.event.pull_request.labels.*.name, ' '), 'allow-lint-issues') }} steps: - name: Setup tar default options shell: bash @@ -26,8 +28,13 @@ jobs: go-version-file: go.mod - name: Run golangci-lint + if: ${{ env.ALLOW_FAILURE != 'true' }} uses: smartcontractkit/.github/actions/ci-lint-go@bd2ca3d8fa2dc89f98b49b297e9b72c2e3e68cdc # v3.1.0 with: golangci-lint-version: v2.6.1 only-new-issues: true - working-directory: pkg \ No newline at end of file + go-directory: pkg + + - name: Skip golangci-lint (allow-lint-issues) + if: ${{ env.ALLOW_FAILURE == 'true' }} + run: echo "Skipping golangci-lint because PR has the allow-lint-issues label" diff --git a/contracts/GNUmakefile b/contracts/GNUmakefile index 1304a6314b..537fa78dff 100644 --- a/contracts/GNUmakefile +++ b/contracts/GNUmakefile @@ -78,6 +78,10 @@ wrappers: pnpmdep mockery abigen ## Recompiles solidity contracts and their go w ./scripts/native_solc_compile_all_$(FOUNDRY_PROFILE) cd ../gethwrappers; go generate ./$(FOUNDRY_PROFILE) +wrappers-release: export metadata=true +.PHONY: wrappers-release +wrappers-release: ## Generate the gethwrappers for release which includes metadata. + make wrappers # This call generates all gethwrappers for all products. It does so based on the # assumption that native_solc_compile_all contains sub-calls to each product, and diff --git a/contracts/gas-snapshots/l2ep.gas-snapshot b/contracts/gas-snapshots/l2ep.gas-snapshot index 9ef7760d16..6185dae847 100644 --- a/contracts/gas-snapshots/l2ep.gas-snapshot +++ b/contracts/gas-snapshots/l2ep.gas-snapshot @@ -1,8 +1,8 @@ ArbitrumCrossDomainForwarder_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 37563) ArbitrumCrossDomainForwarder_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 12954) ArbitrumCrossDomainForwarder_Constructor:test_InitialState() (gas: 22111) -ArbitrumCrossDomainForwarder_Forward:test_Forward() (gas: 47793) -ArbitrumCrossDomainForwarder_Forward:test_ForwardRevert() (gas: 22258) +ArbitrumCrossDomainForwarder_Forward:test_Forward() (gas: 47761) +ArbitrumCrossDomainForwarder_Forward:test_ForwardRevert() (gas: 22090) ArbitrumCrossDomainForwarder_Forward:test_NotCallableByUnknownAddress() (gas: 16083) ArbitrumCrossDomainForwarder_TransferL1Ownership:test_CallableByL1Owner() (gas: 41434) ArbitrumCrossDomainForwarder_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 19269) @@ -11,15 +11,15 @@ ArbitrumCrossDomainForwarder_TransferL1Ownership:test_NotCallableByNonOwners() ( ArbitrumCrossDomainGovernor_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 37563) ArbitrumCrossDomainGovernor_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 12954) ArbitrumCrossDomainGovernor_Constructor:test_InitialState() (gas: 22134) -ArbitrumCrossDomainGovernor_Forward:test_CallableByL2Owner() (gas: 49924) -ArbitrumCrossDomainGovernor_Forward:test_Forward() (gas: 47840) -ArbitrumCrossDomainGovernor_Forward:test_ForwardRevert() (gas: 24367) +ArbitrumCrossDomainGovernor_Forward:test_CallableByL2Owner() (gas: 49879) +ArbitrumCrossDomainGovernor_Forward:test_Forward() (gas: 47795) +ArbitrumCrossDomainGovernor_Forward:test_ForwardRevert() (gas: 24199) ArbitrumCrossDomainGovernor_Forward:test_NotCallableByUnknownAddress() (gas: 18216) -ArbitrumCrossDomainGovernor_ForwardDelegate:test_BubbleUpRevert() (gas: 19437) -ArbitrumCrossDomainGovernor_ForwardDelegate:test_CallableByCrossDomainMessengerAddressOrL1Owner() (gas: 60762) -ArbitrumCrossDomainGovernor_ForwardDelegate:test_CallableByL2Owner() (gas: 62890) +ArbitrumCrossDomainGovernor_ForwardDelegate:test_BubbleUpRevert() (gas: 19272) +ArbitrumCrossDomainGovernor_ForwardDelegate:test_CallableByCrossDomainMessengerAddressOrL1Owner() (gas: 60718) +ArbitrumCrossDomainGovernor_ForwardDelegate:test_CallableByL2Owner() (gas: 62846) ArbitrumCrossDomainGovernor_ForwardDelegate:test_NotCallableByUnknownAddress() (gas: 18271) -ArbitrumCrossDomainGovernor_ForwardDelegate:test_RevertsBatchWhenOneCallFails() (gas: 64375) +ArbitrumCrossDomainGovernor_ForwardDelegate:test_RevertsBatchWhenOneCallFails() (gas: 63919) ArbitrumCrossDomainGovernor_TransferL1Ownership:test_CallableByL1Owner() (gas: 41434) ArbitrumCrossDomainGovernor_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 19269) ArbitrumCrossDomainGovernor_TransferL1Ownership:test_NotCallableByL2Owner() (gas: 18644) @@ -47,60 +47,60 @@ BaseSequencerUptimeFeed_UpdateStatus:test_updateStatus_UpdateWhen_StatusChangeAn BaseSequencerUptimeFeed_transferL1Sender:test_transferL1Sender_CorrectlyTransfersL1Sender() (gas: 1479295) BaseValidator_Constructor:test_Constructor_EmitsWhen_ConstructorIsSuccessfull() (gas: 715556) BaseValidator_GetAndSetGasLimit:test_GetAndSetGasLimit_CorrectlyHandlesGasLimit() (gas: 20114) -OptimismCrossDomainForwarder_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 47106) -OptimismCrossDomainForwarder_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 22135) +OptimismCrossDomainForwarder_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 46952) +OptimismCrossDomainForwarder_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 22033) OptimismCrossDomainForwarder_Constructor:test_InitialState() (gas: 21947) -OptimismCrossDomainForwarder_Forward:test_Forward() (gas: 58188) -OptimismCrossDomainForwarder_Forward:test_ForwardRevert() (gas: 32644) +OptimismCrossDomainForwarder_Forward:test_Forward() (gas: 58095) +OptimismCrossDomainForwarder_Forward:test_ForwardRevert() (gas: 32410) OptimismCrossDomainForwarder_Forward:test_NotCallableByUnknownAddress() (gas: 13895) -OptimismCrossDomainForwarder_TransferL1Ownership:test_CallableByL1Owner() (gas: 48907) -OptimismCrossDomainForwarder_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 28728) +OptimismCrossDomainForwarder_TransferL1Ownership:test_CallableByL1Owner() (gas: 48811) +OptimismCrossDomainForwarder_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 28632) OptimismCrossDomainForwarder_TransferL1Ownership:test_NotCallableByL2Owner() (gas: 16456) OptimismCrossDomainForwarder_TransferL1Ownership:test_NotCallableByNonOwners() (gas: 11044) -OptimismCrossDomainGovernor_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 47106) -OptimismCrossDomainGovernor_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 22135) +OptimismCrossDomainGovernor_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 46952) +OptimismCrossDomainGovernor_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 22033) OptimismCrossDomainGovernor_Constructor:test_InitialState() (gas: 21970) -OptimismCrossDomainGovernor_Forward:test_CallableByL2Owner() (gas: 47768) -OptimismCrossDomainGovernor_Forward:test_Forward() (gas: 58255) -OptimismCrossDomainGovernor_Forward:test_ForwardRevert() (gas: 32668) +OptimismCrossDomainGovernor_Forward:test_CallableByL2Owner() (gas: 47723) +OptimismCrossDomainGovernor_Forward:test_Forward() (gas: 58149) +OptimismCrossDomainGovernor_Forward:test_ForwardRevert() (gas: 32434) OptimismCrossDomainGovernor_Forward:test_NotCallableByUnknownAddress() (gas: 16031) -OptimismCrossDomainGovernor_ForwardDelegate:test_BubbleUpRevert() (gas: 29227) -OptimismCrossDomainGovernor_ForwardDelegate:test_CallableByCrossDomainMessengerAddressOrL1Owner() (gas: 72811) -OptimismCrossDomainGovernor_ForwardDelegate:test_CallableByL2Owner() (gas: 72816) +OptimismCrossDomainGovernor_ForwardDelegate:test_BubbleUpRevert() (gas: 28984) +OptimismCrossDomainGovernor_ForwardDelegate:test_CallableByCrossDomainMessengerAddressOrL1Owner() (gas: 72772) +OptimismCrossDomainGovernor_ForwardDelegate:test_CallableByL2Owner() (gas: 72777) OptimismCrossDomainGovernor_ForwardDelegate:test_NotCallableByUnknownAddress() (gas: 16086) -OptimismCrossDomainGovernor_ForwardDelegate:test_RevertsBatchWhenOneCallFails() (gas: 76144) -OptimismCrossDomainGovernor_TransferL1Ownership:test_CallableByL1Owner() (gas: 48907) -OptimismCrossDomainGovernor_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 28728) +OptimismCrossDomainGovernor_ForwardDelegate:test_RevertsBatchWhenOneCallFails() (gas: 75679) +OptimismCrossDomainGovernor_TransferL1Ownership:test_CallableByL1Owner() (gas: 48811) +OptimismCrossDomainGovernor_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 28632) OptimismCrossDomainGovernor_TransferL1Ownership:test_NotCallableByL2Owner() (gas: 16456) OptimismCrossDomainGovernor_TransferL1Ownership:test_NotCallableByNonOwners() (gas: 11044) OptimismSequencerUptimeFeed_Constructor:test_Constructor_InitialState() (gas: 1530881) OptimismSequencerUptimeFeed_ValidateSender:test_ValidateSender_UpdateStatusWhen_StatusChangeAndNoTimeChange() (gas: 15374) OptimismValidator_Validate:test_Validate_PostSequencerOffline() (gas: 79034) OptimismValidator_Validate:test_Validate_PostSequencerStatus_NoStatusChange() (gas: 79040) -ScrollCrossDomainForwarder_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 47192) -ScrollCrossDomainForwarder_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 22185) -ScrollCrossDomainForwarder_Constructor:test_InitialState() (gas: 21623) -ScrollCrossDomainForwarder_Forward:test_Forward() (gas: 58252) -ScrollCrossDomainForwarder_Forward:test_ForwardRevert() (gas: 32700) +ScrollCrossDomainForwarder_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 47039) +ScrollCrossDomainForwarder_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 22083) +ScrollCrossDomainForwarder_Constructor:test_InitialState() (gas: 21939) +ScrollCrossDomainForwarder_Forward:test_Forward() (gas: 58159) +ScrollCrossDomainForwarder_Forward:test_ForwardRevert() (gas: 32466) ScrollCrossDomainForwarder_Forward:test_NotCallableByUnknownAddress() (gas: 13895) -ScrollCrossDomainForwarder_TransferL1Ownership:test_CallableByL1Owner() (gas: 48970) -ScrollCrossDomainForwarder_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 28786) +ScrollCrossDomainForwarder_TransferL1Ownership:test_CallableByL1Owner() (gas: 48874) +ScrollCrossDomainForwarder_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 28690) ScrollCrossDomainForwarder_TransferL1Ownership:test_NotCallableByL2Owner() (gas: 16456) ScrollCrossDomainForwarder_TransferL1Ownership:test_NotCallableByNonOwners() (gas: 11044) -ScrollCrossDomainGovernor_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 47192) -ScrollCrossDomainGovernor_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 22185) -ScrollCrossDomainGovernor_Constructor:test_InitialState() (gas: 21646) -ScrollCrossDomainGovernor_Forward:test_CallableByL2Owner() (gas: 47763) -ScrollCrossDomainGovernor_Forward:test_Forward() (gas: 58314) -ScrollCrossDomainGovernor_Forward:test_ForwardRevert() (gas: 32721) +ScrollCrossDomainGovernor_AcceptL1Ownership:test_CallableByPendingL1Owner() (gas: 47039) +ScrollCrossDomainGovernor_AcceptL1Ownership:test_NotCallableByNonPendingOwners() (gas: 22083) +ScrollCrossDomainGovernor_Constructor:test_InitialState() (gas: 21962) +ScrollCrossDomainGovernor_Forward:test_CallableByL2Owner() (gas: 47718) +ScrollCrossDomainGovernor_Forward:test_Forward() (gas: 58208) +ScrollCrossDomainGovernor_Forward:test_ForwardRevert() (gas: 32487) ScrollCrossDomainGovernor_Forward:test_NotCallableByUnknownAddress() (gas: 16028) -ScrollCrossDomainGovernor_ForwardDelegate:test_BubbleUpRevert() (gas: 29285) -ScrollCrossDomainGovernor_ForwardDelegate:test_CallableByCrossDomainMessengerAddressOrL1Owner() (gas: 72875) -ScrollCrossDomainGovernor_ForwardDelegate:test_CallableByL2Owner() (gas: 72880) +ScrollCrossDomainGovernor_ForwardDelegate:test_BubbleUpRevert() (gas: 29042) +ScrollCrossDomainGovernor_ForwardDelegate:test_CallableByCrossDomainMessengerAddressOrL1Owner() (gas: 72836) +ScrollCrossDomainGovernor_ForwardDelegate:test_CallableByL2Owner() (gas: 72841) ScrollCrossDomainGovernor_ForwardDelegate:test_NotCallableByUnknownAddress() (gas: 16083) -ScrollCrossDomainGovernor_ForwardDelegate:test_RevertsBatchWhenOneCallFails() (gas: 76209) -ScrollCrossDomainGovernor_TransferL1Ownership:test_CallableByL1Owner() (gas: 48970) -ScrollCrossDomainGovernor_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 28786) +ScrollCrossDomainGovernor_ForwardDelegate:test_RevertsBatchWhenOneCallFails() (gas: 75744) +ScrollCrossDomainGovernor_TransferL1Ownership:test_CallableByL1Owner() (gas: 48874) +ScrollCrossDomainGovernor_TransferL1Ownership:test_CallableByL1OwnerOrZeroAddress() (gas: 28690) ScrollCrossDomainGovernor_TransferL1Ownership:test_NotCallableByL2Owner() (gas: 16456) ScrollCrossDomainGovernor_TransferL1Ownership:test_NotCallableByNonOwners() (gas: 11044) ScrollSequencerUptimeFeed_Constructor:test_Constructor_InitialState_WhenValidL2XDomainMessenger() (gas: 1511902) diff --git a/contracts/package.json b/contracts/package.json index d03a1c1d11..82f5c684b2 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -71,11 +71,11 @@ "dependencies": { "@arbitrum/nitro-contracts": "3.0.0", "@eth-optimism/contracts": "0.6.0", - "@openzeppelin/contracts-4.7.3": "npm:@openzeppelin/contracts@4.7.3", "@openzeppelin/contracts-4.8.3": "npm:@openzeppelin/contracts@4.8.3", "@openzeppelin/contracts-4.9.6": "npm:@openzeppelin/contracts@4.9.6", "@openzeppelin/contracts-5.0.2": "npm:@openzeppelin/contracts@5.0.2", "@openzeppelin/contracts-5.1.0": "npm:@openzeppelin/contracts@5.1.0", + "@openzeppelin/contracts-5.3.0": "npm:@openzeppelin/contracts@5.3.0", "@openzeppelin/contracts-upgradeable": "4.9.6", "@scroll-tech/contracts": "2.0.0", "@zksync/contracts": "github:matter-labs/era-contracts#446d391d34bdb48255d5f8fef8a8248925fc98b9" diff --git a/contracts/pnpm-lock.yaml b/contracts/pnpm-lock.yaml index 25f27257a9..454e0f1e1c 100644 --- a/contracts/pnpm-lock.yaml +++ b/contracts/pnpm-lock.yaml @@ -25,9 +25,6 @@ importers: '@eth-optimism/contracts': specifier: 0.6.0 version: 0.6.0(ethers@5.8.0) - '@openzeppelin/contracts-4.7.3': - specifier: npm:@openzeppelin/contracts@4.7.3 - version: '@openzeppelin/contracts@4.7.3' '@openzeppelin/contracts-4.8.3': specifier: npm:@openzeppelin/contracts@4.8.3 version: '@openzeppelin/contracts@4.8.3' @@ -40,6 +37,9 @@ importers: '@openzeppelin/contracts-5.1.0': specifier: npm:@openzeppelin/contracts@5.1.0 version: '@openzeppelin/contracts@5.1.0' + '@openzeppelin/contracts-5.3.0': + specifier: npm:@openzeppelin/contracts@5.3.0 + version: '@openzeppelin/contracts@5.3.0' '@openzeppelin/contracts-upgradeable': specifier: 4.9.6 version: 4.9.6 @@ -188,157 +188,157 @@ packages: resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} '@esbuild/aix-ppc64@0.27.0': - resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==} + resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==, tarball: https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.0.tgz} engines: {node: '>=18'} cpu: [ppc64] os: [aix] '@esbuild/android-arm64@0.27.0': - resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==} + resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.0.tgz} engines: {node: '>=18'} cpu: [arm64] os: [android] '@esbuild/android-arm@0.27.0': - resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==} + resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.0.tgz} engines: {node: '>=18'} cpu: [arm] os: [android] '@esbuild/android-x64@0.27.0': - resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==} + resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==, tarball: https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.0.tgz} engines: {node: '>=18'} cpu: [x64] os: [android] '@esbuild/darwin-arm64@0.27.0': - resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==} + resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==, tarball: https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.0.tgz} engines: {node: '>=18'} cpu: [arm64] os: [darwin] '@esbuild/darwin-x64@0.27.0': - resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==} + resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==, tarball: https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.0.tgz} engines: {node: '>=18'} cpu: [x64] os: [darwin] '@esbuild/freebsd-arm64@0.27.0': - resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==} + resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==, tarball: https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.0.tgz} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] '@esbuild/freebsd-x64@0.27.0': - resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==} + resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==, tarball: https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.0.tgz} engines: {node: '>=18'} cpu: [x64] os: [freebsd] '@esbuild/linux-arm64@0.27.0': - resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==} + resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.0.tgz} engines: {node: '>=18'} cpu: [arm64] os: [linux] '@esbuild/linux-arm@0.27.0': - resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==} + resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==, tarball: https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.0.tgz} engines: {node: '>=18'} cpu: [arm] os: [linux] '@esbuild/linux-ia32@0.27.0': - resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==} + resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==, tarball: https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.0.tgz} engines: {node: '>=18'} cpu: [ia32] os: [linux] '@esbuild/linux-loong64@0.27.0': - resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==} + resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.0.tgz} engines: {node: '>=18'} cpu: [loong64] os: [linux] '@esbuild/linux-mips64el@0.27.0': - resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==} + resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==, tarball: https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.0.tgz} engines: {node: '>=18'} cpu: [mips64el] os: [linux] '@esbuild/linux-ppc64@0.27.0': - resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==} + resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==, tarball: https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.0.tgz} engines: {node: '>=18'} cpu: [ppc64] os: [linux] '@esbuild/linux-riscv64@0.27.0': - resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==} + resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==, tarball: https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.0.tgz} engines: {node: '>=18'} cpu: [riscv64] os: [linux] '@esbuild/linux-s390x@0.27.0': - resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==} + resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==, tarball: https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.0.tgz} engines: {node: '>=18'} cpu: [s390x] os: [linux] '@esbuild/linux-x64@0.27.0': - resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==} + resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==, tarball: https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.0.tgz} engines: {node: '>=18'} cpu: [x64] os: [linux] '@esbuild/netbsd-arm64@0.27.0': - resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==} + resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==, tarball: https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.0.tgz} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] '@esbuild/netbsd-x64@0.27.0': - resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==} + resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==, tarball: https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.0.tgz} engines: {node: '>=18'} cpu: [x64] os: [netbsd] '@esbuild/openbsd-arm64@0.27.0': - resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==} + resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==, tarball: https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.0.tgz} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] '@esbuild/openbsd-x64@0.27.0': - resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==} + resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==, tarball: https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.0.tgz} engines: {node: '>=18'} cpu: [x64] os: [openbsd] '@esbuild/openharmony-arm64@0.27.0': - resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==} + resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==, tarball: https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.0.tgz} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] '@esbuild/sunos-x64@0.27.0': - resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==} + resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==, tarball: https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.0.tgz} engines: {node: '>=18'} cpu: [x64] os: [sunos] '@esbuild/win32-arm64@0.27.0': - resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==} + resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==, tarball: https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.0.tgz} engines: {node: '>=18'} cpu: [arm64] os: [win32] '@esbuild/win32-ia32@0.27.0': - resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==} + resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==, tarball: https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.0.tgz} engines: {node: '>=18'} cpu: [ia32] os: [win32] '@esbuild/win32-x64@0.27.0': - resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==} + resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==, tarball: https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.0.tgz} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -423,10 +423,10 @@ packages: resolution: {integrity: sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==} '@ethersproject/hdnode@5.8.0': - resolution: {integrity: sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==} + resolution: {integrity: sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA==, tarball: https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.8.0.tgz} '@ethersproject/json-wallets@5.8.0': - resolution: {integrity: sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==} + resolution: {integrity: sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w==, tarball: https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz} '@ethersproject/keccak256@5.8.0': resolution: {integrity: sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==} @@ -438,7 +438,7 @@ packages: resolution: {integrity: sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==} '@ethersproject/pbkdf2@5.8.0': - resolution: {integrity: sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==} + resolution: {integrity: sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg==, tarball: https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz} '@ethersproject/properties@5.8.0': resolution: {integrity: sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==} @@ -459,7 +459,7 @@ packages: resolution: {integrity: sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==} '@ethersproject/solidity@5.8.0': - resolution: {integrity: sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==} + resolution: {integrity: sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA==, tarball: https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.8.0.tgz} '@ethersproject/strings@5.8.0': resolution: {integrity: sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==} @@ -468,16 +468,16 @@ packages: resolution: {integrity: sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==} '@ethersproject/units@5.8.0': - resolution: {integrity: sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==} + resolution: {integrity: sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ==, tarball: https://registry.npmjs.org/@ethersproject/units/-/units-5.8.0.tgz} '@ethersproject/wallet@5.8.0': - resolution: {integrity: sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==} + resolution: {integrity: sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA==, tarball: https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.8.0.tgz} '@ethersproject/web@5.8.0': resolution: {integrity: sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==} '@ethersproject/wordlists@5.8.0': - resolution: {integrity: sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==} + resolution: {integrity: sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg==, tarball: https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.8.0.tgz} '@humanfs/core@0.19.1': resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} @@ -593,31 +593,31 @@ packages: zod: ^3.23.8 '@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2': - resolution: {integrity: sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==} + resolution: {integrity: sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==, tarball: https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz} engines: {node: '>= 12'} '@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2': - resolution: {integrity: sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==} + resolution: {integrity: sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==, tarball: https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz} engines: {node: '>= 12'} '@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2': - resolution: {integrity: sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==} + resolution: {integrity: sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==, tarball: https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz} engines: {node: '>= 12'} '@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2': - resolution: {integrity: sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==} + resolution: {integrity: sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==, tarball: https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz} engines: {node: '>= 12'} '@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2': - resolution: {integrity: sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==} + resolution: {integrity: sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==, tarball: https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz} engines: {node: '>= 12'} '@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2': - resolution: {integrity: sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==} + resolution: {integrity: sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==, tarball: https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz} engines: {node: '>= 12'} '@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2': - resolution: {integrity: sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==} + resolution: {integrity: sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==, tarball: https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz} engines: {node: '>= 12'} '@nomicfoundation/solidity-analyzer@0.1.2': @@ -630,9 +630,6 @@ packages: '@openzeppelin/contracts-upgradeable@4.9.6': resolution: {integrity: sha512-m4iHazOsOCv1DgM7eD7GupTJ+NFVujRZt1wzddDPSVGpWdKq1SKkla5htKG7+IS4d2XOCtzkUNwRZ7Vq5aEUMA==} - '@openzeppelin/contracts@4.7.3': - resolution: {integrity: sha512-dGRS0agJzu8ybo44pCIf3xBaPQN/65AIXNgK8+4gzKd5kbvlqyxryUYVLJv7fK98Seyd2hDZzVEHSWAh0Bt1Yw==} - '@openzeppelin/contracts@4.8.3': resolution: {integrity: sha512-bQHV8R9Me8IaJoJ2vPG4rXcL7seB7YVuskr4f+f5RyOStSZetwzkWtoqDMl5erkBJy0lDRUnIR2WIkPiC0GJlg==} @@ -645,6 +642,9 @@ packages: '@openzeppelin/contracts@5.1.0': resolution: {integrity: sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA==} + '@openzeppelin/contracts@5.3.0': + resolution: {integrity: sha512-zj/KGoW7zxWUE8qOI++rUM18v+VeLTTzKs/DJFkSzHpQFPD/jKKF0TrMxBfGLl3kpdELCNccvB3zmofSzm4nlA==, tarball: https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-5.3.0.tgz} + '@pkgr/core@0.2.9': resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -812,7 +812,7 @@ packages: engines: {node: '>=0.3.0'} aes-js@3.0.0: - resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==, tarball: https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz} ajv-errors@1.0.1: resolution: {integrity: sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==} @@ -1168,7 +1168,7 @@ packages: engines: {node: '>=10'} eslint-config-prettier@10.1.8: - resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} + resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==, tarball: https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz} hasBin: true peerDependencies: eslint: '>=7.0.0' @@ -1248,7 +1248,7 @@ packages: engines: {node: '>=10.0.0'} ethers@5.8.0: - resolution: {integrity: sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==} + resolution: {integrity: sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg==, tarball: https://registry.npmjs.org/ethers/-/ethers-5.8.0.tgz} ethjs-unit@0.1.6: resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} @@ -1349,7 +1349,7 @@ packages: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -1909,13 +1909,13 @@ packages: engines: {node: '>=6.0.0'} prettier-plugin-solidity@1.4.3: - resolution: {integrity: sha512-Mrr/iiR9f9IaeGRMZY2ApumXcn/C5Gs3S7B7hWB3gigBFML06C0yEyW86oLp0eqiA0qg+46FaChgLPJCj/pIlg==} + resolution: {integrity: sha512-Mrr/iiR9f9IaeGRMZY2ApumXcn/C5Gs3S7B7hWB3gigBFML06C0yEyW86oLp0eqiA0qg+46FaChgLPJCj/pIlg==, tarball: https://registry.npmjs.org/prettier-plugin-solidity/-/prettier-plugin-solidity-1.4.3.tgz} engines: {node: '>=18'} peerDependencies: prettier: '>=2.3.0' prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==, tarball: https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz} engines: {node: '>=10.13.0'} hasBin: true @@ -3037,8 +3037,6 @@ snapshots: '@openzeppelin/contracts-upgradeable@4.9.6': {} - '@openzeppelin/contracts@4.7.3': {} - '@openzeppelin/contracts@4.8.3': {} '@openzeppelin/contracts@4.9.6': {} @@ -3047,6 +3045,8 @@ snapshots: '@openzeppelin/contracts@5.1.0': {} + '@openzeppelin/contracts@5.3.0': {} + '@pkgr/core@0.2.9': {} '@pnpm/config.env-replace@1.1.0': {} diff --git a/contracts/remappings.txt b/contracts/remappings.txt index 041fdb5b0b..21ce88eaeb 100644 --- a/contracts/remappings.txt +++ b/contracts/remappings.txt @@ -1,10 +1,10 @@ forge-std/=src/v0.8/vendor/forge-std/src/ -@openzeppelin/contracts@4.7.3=node_modules/@openzeppelin/contracts-4.7.3 @openzeppelin/contracts@4.8.3=node_modules/@openzeppelin/contracts-4.8.3 @openzeppelin/contracts@4.9.6=node_modules/@openzeppelin/contracts-4.9.6 @openzeppelin/contracts@5.0.2=node_modules/@openzeppelin/contracts-5.0.2 @openzeppelin/contracts@5.1.0=node_modules/@openzeppelin/contracts-5.1.0 +@openzeppelin/contracts@5.3.0=node_modules/@openzeppelin/contracts-5.3.0 @openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/ diff --git a/contracts/scripts/native_solc_compile_all b/contracts/scripts/native_solc_compile_all index 87cc0d56d9..45128b3fb2 100755 --- a/contracts/scripts/native_solc_compile_all +++ b/contracts/scripts/native_solc_compile_all @@ -14,6 +14,6 @@ SCRIPTPATH="$( # For each product we have a native_solc_compile_all_$product script # These scripts can be run individually, or all together with this script. # To add new CL products, simply write a native_solc_compile_all_$product script and add it to the list below. -for product in automation functions llo-feeds operatorforwarder payments shared vrf data-feeds; do +for product in automation functions llo-feeds operatorforwarder payments shared vrf data-feeds l2ep; do $SCRIPTPATH/native_solc_compile_all_$product done diff --git a/contracts/scripts/native_solc_compile_all_l2ep b/contracts/scripts/native_solc_compile_all_l2ep index 9beab2bb78..33567f4bac 100755 --- a/contracts/scripts/native_solc_compile_all_l2ep +++ b/contracts/scripts/native_solc_compile_all_l2ep @@ -16,16 +16,24 @@ compileContract () { contract=$(basename "$1") echo "Compiling" "$contract" + dir=$CONTRACTS_DIR/solc/$PROJECT/$contract + local command command="forge build $CONTRACTS_DIR/src/v0.8/$PROJECT/"$1.sol" \ --root $CONTRACTS_DIR \ - --extra-output-files bin abi \ - -o $CONTRACTS_DIR/solc/$PROJECT/$contract" + --extra-output-files bin abi metadata \ + --build-info \ + --build-info-path $dir/build \ + -o $dir" + $command + mv $(find $dir/build -type f -name '*.json' ! -name 'build.json') $dir/build/build.json + + # Copy the generated abi files to a single folder mkdir -p "$CONTRACTS_DIR"/abi/v0.8/"$PROJECT" - cp "$CONTRACTS_DIR"/solc/$PROJECT/"$contract"/"$contract".sol/"$contract".abi.json "$CONTRACTS_DIR"/abi/v0.8/"$PROJECT"/"$contract".abi.json + cp "$dir"/"$contract".sol/"$contract".abi.json "$CONTRACTS_DIR"/abi/v0.8/"$PROJECT"/"$contract".abi.json } compileContract arbitrum/ArbitrumValidator diff --git a/contracts/src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainForwarder.sol b/contracts/src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainForwarder.sol index 0a4ca6ae12..6c9183e7aa 100644 --- a/contracts/src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainForwarder.sol +++ b/contracts/src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainForwarder.sol @@ -9,7 +9,7 @@ import {CrossDomainForwarder} from "../CrossDomainForwarder.sol"; import {CrossDomainOwnable} from "../CrossDomainOwnable.sol"; import {AddressAliasHelper} from "../../vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol"; -import {Address} from "@openzeppelin/contracts@4.7.3/utils/Address.sol"; +import {Address} from "@openzeppelin/contracts@5.3.0/utils/Address.sol"; /** * @title ArbitrumCrossDomainForwarder - L1 xDomain account representation @@ -37,7 +37,7 @@ contract ArbitrumCrossDomainForwarder is ITypeAndVersion, CrossDomainForwarder { * @inheritdoc ITypeAndVersion */ function typeAndVersion() external pure virtual override returns (string memory) { - return "ArbitrumCrossDomainForwarder 1.0.0"; + return "ArbitrumCrossDomainForwarder 1.1.0-dev"; } /** @@ -52,7 +52,7 @@ contract ArbitrumCrossDomainForwarder is ITypeAndVersion, CrossDomainForwarder { * @inheritdoc IForwarder */ function forward(address target, bytes memory data) external virtual override onlyL1Owner { - Address.functionCall(target, data, "Forwarder call reverted"); + Address.functionCall(target, data); } /** diff --git a/contracts/src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainGovernor.sol b/contracts/src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainGovernor.sol index 7ab19b26c1..cb95c71d26 100644 --- a/contracts/src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainGovernor.sol +++ b/contracts/src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainGovernor.sol @@ -9,7 +9,7 @@ import {IForwarder} from "../interfaces/IForwarder.sol"; import {ArbitrumCrossDomainForwarder} from "./ArbitrumCrossDomainForwarder.sol"; -import {Address} from "@openzeppelin/contracts@4.7.3/utils/Address.sol"; +import {Address} from "@openzeppelin/contracts@5.3.0/utils/Address.sol"; /** * @title ArbitrumCrossDomainGovernor - L1 xDomain account representation (with delegatecall support) for Arbitrum @@ -36,7 +36,7 @@ contract ArbitrumCrossDomainGovernor is IDelegateForwarder, ArbitrumCrossDomainF * @inheritdoc ITypeAndVersion */ function typeAndVersion() external pure virtual override returns (string memory) { - return "ArbitrumCrossDomainGovernor 1.0.0"; + return "ArbitrumCrossDomainGovernor 1.1.0-dev"; } /** @@ -44,7 +44,7 @@ contract ArbitrumCrossDomainGovernor is IDelegateForwarder, ArbitrumCrossDomainF * @inheritdoc IForwarder */ function forward(address target, bytes memory data) external override onlyLocalOrCrossDomainOwner { - Address.functionCall(target, data, "Governor call reverted"); + Address.functionCall(target, data); } /** @@ -52,7 +52,7 @@ contract ArbitrumCrossDomainGovernor is IDelegateForwarder, ArbitrumCrossDomainF * @inheritdoc IDelegateForwarder */ function forwardDelegate(address target, bytes memory data) external override onlyLocalOrCrossDomainOwner { - Address.functionDelegateCall(target, data, "Governor delegatecall reverted"); + Address.functionDelegateCall(target, data); } /** diff --git a/contracts/src/v0.8/l2ep/arbitrum/ArbitrumValidator.sol b/contracts/src/v0.8/l2ep/arbitrum/ArbitrumValidator.sol index fd75fd7227..caa2f26888 100644 --- a/contracts/src/v0.8/l2ep/arbitrum/ArbitrumValidator.sol +++ b/contracts/src/v0.8/l2ep/arbitrum/ArbitrumValidator.sol @@ -14,7 +14,7 @@ import {AddressAliasHelper} from "../../vendor/arb-bridge-eth/v0.8.0-custom/cont import {IArbitrumDelayedInbox} from "../interfaces/IArbitrumDelayedInbox.sol"; import {ISequencerUptimeFeed} from "../interfaces/ISequencerUptimeFeed.sol"; -import {Address} from "@openzeppelin/contracts@4.7.3/utils/Address.sol"; +import {Address} from "@openzeppelin/contracts@5.3.0/utils/Address.sol"; /** * @title ArbitrumValidator - makes xDomain L2 Flags contract call (using L2 xDomain Forwarder contract) @@ -134,7 +134,7 @@ contract ArbitrumValidator is ITypeAndVersion, AggregatorValidatorInterface, Sim * @inheritdoc ITypeAndVersion */ function typeAndVersion() external pure virtual override returns (string memory) { - return "ArbitrumValidator 2.0.0"; + return "ArbitrumValidator 2.1.0-dev"; } /// @return stored PaymentStrategy diff --git a/contracts/src/v0.8/l2ep/optimism/OptimismCrossDomainForwarder.sol b/contracts/src/v0.8/l2ep/optimism/OptimismCrossDomainForwarder.sol index 474d71becc..e597808998 100644 --- a/contracts/src/v0.8/l2ep/optimism/OptimismCrossDomainForwarder.sol +++ b/contracts/src/v0.8/l2ep/optimism/OptimismCrossDomainForwarder.sol @@ -11,7 +11,7 @@ import {CrossDomainOwnable} from "../CrossDomainOwnable.sol"; import {iOVM_CrossDomainMessenger} from "../../vendor/@eth-optimism/contracts/v0.4.7/contracts/optimistic-ethereum/iOVM/bridge/messaging/iOVM_CrossDomainMessenger.sol"; -import {Address} from "@openzeppelin/contracts@4.7.3/utils/Address.sol"; +import {Address} from "@openzeppelin/contracts@5.3.0/utils/Address.sol"; /** * @title OptimismCrossDomainForwarder - L1 xDomain account representation @@ -45,7 +45,7 @@ contract OptimismCrossDomainForwarder is ITypeAndVersion, CrossDomainForwarder { * @inheritdoc ITypeAndVersion */ function typeAndVersion() external pure virtual override returns (string memory) { - return "OptimismCrossDomainForwarder 1.0.0"; + return "OptimismCrossDomainForwarder 1.1.0-dev"; } /** @@ -53,7 +53,7 @@ contract OptimismCrossDomainForwarder is ITypeAndVersion, CrossDomainForwarder { * @inheritdoc IForwarder */ function forward(address target, bytes memory data) external virtual override onlyL1Owner { - Address.functionCall(target, data, "Forwarder call reverted"); + Address.functionCall(target, data); } /** diff --git a/contracts/src/v0.8/l2ep/optimism/OptimismCrossDomainGovernor.sol b/contracts/src/v0.8/l2ep/optimism/OptimismCrossDomainGovernor.sol index 2fa790aef8..17b87c1671 100644 --- a/contracts/src/v0.8/l2ep/optimism/OptimismCrossDomainGovernor.sol +++ b/contracts/src/v0.8/l2ep/optimism/OptimismCrossDomainGovernor.sol @@ -9,7 +9,7 @@ import {OptimismCrossDomainForwarder} from "./OptimismCrossDomainForwarder.sol"; import {iOVM_CrossDomainMessenger} from "../../vendor/@eth-optimism/contracts/v0.4.7/contracts/optimistic-ethereum/iOVM/bridge/messaging/iOVM_CrossDomainMessenger.sol"; -import {Address} from "@openzeppelin/contracts@4.7.3/utils/Address.sol"; +import {Address} from "@openzeppelin/contracts@5.3.0/utils/Address.sol"; /** * @title OptimismCrossDomainGovernor - L1 xDomain account representation (with delegatecall support) for Optimism @@ -36,7 +36,7 @@ contract OptimismCrossDomainGovernor is IDelegateForwarder, OptimismCrossDomainF * - OptimismCrossDomainForwarder 1.0.0: initial release */ function typeAndVersion() external pure virtual override returns (string memory) { - return "OptimismCrossDomainGovernor 1.0.0"; + return "OptimismCrossDomainGovernor 1.1.0-dev"; } /** @@ -44,7 +44,7 @@ contract OptimismCrossDomainGovernor is IDelegateForwarder, OptimismCrossDomainF * @inheritdoc IForwarder */ function forward(address target, bytes memory data) external override onlyLocalOrCrossDomainOwner { - Address.functionCall(target, data, "Governor call reverted"); + Address.functionCall(target, data); } /** @@ -52,7 +52,7 @@ contract OptimismCrossDomainGovernor is IDelegateForwarder, OptimismCrossDomainF * @inheritdoc IDelegateForwarder */ function forwardDelegate(address target, bytes memory data) external override onlyLocalOrCrossDomainOwner { - Address.functionDelegateCall(target, data, "Governor delegatecall reverted"); + Address.functionDelegateCall(target, data); } /** diff --git a/contracts/src/v0.8/l2ep/scroll/ScrollCrossDomainForwarder.sol b/contracts/src/v0.8/l2ep/scroll/ScrollCrossDomainForwarder.sol index 5349030765..7f529fe7c0 100644 --- a/contracts/src/v0.8/l2ep/scroll/ScrollCrossDomainForwarder.sol +++ b/contracts/src/v0.8/l2ep/scroll/ScrollCrossDomainForwarder.sol @@ -7,7 +7,7 @@ import {IForwarder} from "../interfaces/IForwarder.sol"; import {CrossDomainForwarder} from "../CrossDomainForwarder.sol"; import {CrossDomainOwnable} from "../CrossDomainOwnable.sol"; -import {Address} from "@openzeppelin/contracts@4.7.3/utils/Address.sol"; +import {Address} from "@openzeppelin/contracts@5.3.0/utils/Address.sol"; import {IScrollMessenger} from "@scroll-tech/contracts/libraries/IScrollMessenger.sol"; /// @title ScrollCrossDomainForwarder - L1 xDomain account representation @@ -16,7 +16,7 @@ import {IScrollMessenger} from "@scroll-tech/contracts/libraries/IScrollMessenge /// @dev Any other L2 contract which uses this contract's address as a privileged position, /// can be considered to be owned by the `l1Owner` contract ScrollCrossDomainForwarder is ITypeAndVersion, CrossDomainForwarder { - string public constant override typeAndVersion = "ScrollCrossDomainForwarder 1.0.0"; + string public constant override typeAndVersion = "ScrollCrossDomainForwarder 1.1.0-dev"; address internal immutable i_scrollCrossDomainMessenger; @@ -31,7 +31,7 @@ contract ScrollCrossDomainForwarder is ITypeAndVersion, CrossDomainForwarder { /// @dev forwarded only if L2 Messenger calls with `xDomainMessageSender` being the L1 owner address /// @inheritdoc IForwarder function forward(address target, bytes memory data) external override onlyL1Owner { - Address.functionCall(target, data, "Forwarder call reverted"); + Address.functionCall(target, data); } /// @notice This is always the address of the Scroll Cross Domain Messenger contract diff --git a/contracts/src/v0.8/l2ep/scroll/ScrollCrossDomainGovernor.sol b/contracts/src/v0.8/l2ep/scroll/ScrollCrossDomainGovernor.sol index 7022bd07a7..d311e32667 100644 --- a/contracts/src/v0.8/l2ep/scroll/ScrollCrossDomainGovernor.sol +++ b/contracts/src/v0.8/l2ep/scroll/ScrollCrossDomainGovernor.sol @@ -9,7 +9,7 @@ import {IForwarder} from "../interfaces/IForwarder.sol"; import {CrossDomainForwarder} from "../CrossDomainForwarder.sol"; import {CrossDomainOwnable} from "../CrossDomainOwnable.sol"; -import {Address} from "@openzeppelin/contracts@4.7.3/utils/Address.sol"; +import {Address} from "@openzeppelin/contracts@5.3.0/utils/Address.sol"; import {IScrollMessenger} from "@scroll-tech/contracts/libraries/IScrollMessenger.sol"; /// @title ScrollCrossDomainGovernor - L1 xDomain account representation (with delegatecall support) for Scroll @@ -18,7 +18,7 @@ import {IScrollMessenger} from "@scroll-tech/contracts/libraries/IScrollMessenge /// @dev Any other L2 contract which uses this contract's address as a privileged position, /// can be considered to be simultaneously owned by the `l1Owner` and L2 `owner` contract ScrollCrossDomainGovernor is IDelegateForwarder, ITypeAndVersion, CrossDomainForwarder { - string public constant override typeAndVersion = "ScrollCrossDomainGovernor 1.0.0"; + string public constant override typeAndVersion = "ScrollCrossDomainGovernor 1.1.0-dev"; address internal immutable i_scrollCrossDomainMessenger; @@ -33,13 +33,13 @@ contract ScrollCrossDomainGovernor is IDelegateForwarder, ITypeAndVersion, Cross /// @inheritdoc IForwarder /// @dev forwarded only if L2 Messenger calls with `msg.sender` being the L1 owner address, or called by the L2 owner function forward(address target, bytes memory data) external override onlyLocalOrCrossDomainOwner { - Address.functionCall(target, data, "Governor call reverted"); + Address.functionCall(target, data); } /// @inheritdoc IDelegateForwarder /// @dev forwarded only if L2 Messenger calls with `msg.sender` being the L1 owner address, or called by the L2 owner function forwardDelegate(address target, bytes memory data) external override onlyLocalOrCrossDomainOwner { - Address.functionDelegateCall(target, data, "Governor delegatecall reverted"); + Address.functionDelegateCall(target, data); } /// @notice The address of the Scroll Cross Domain Messenger contract diff --git a/contracts/src/v0.8/l2ep/test/mocks/optimism/MockOVMCrossDomainMessenger.sol b/contracts/src/v0.8/l2ep/test/mocks/optimism/MockOVMCrossDomainMessenger.sol index 2eea19a64b..a935778479 100644 --- a/contracts/src/v0.8/l2ep/test/mocks/optimism/MockOVMCrossDomainMessenger.sol +++ b/contracts/src/v0.8/l2ep/test/mocks/optimism/MockOVMCrossDomainMessenger.sol @@ -4,7 +4,7 @@ pragma solidity ^0.8.0; import {iOVM_CrossDomainMessenger} from "../../../../vendor/@eth-optimism/contracts/v0.4.7/contracts/optimistic-ethereum/iOVM/bridge/messaging/iOVM_CrossDomainMessenger.sol"; -import {Address} from "@openzeppelin/contracts@4.8.3/utils/Address.sol"; +import {Address} from "@openzeppelin/contracts@5.3.0/utils/Address.sol"; contract MockOVMCrossDomainMessenger is iOVM_CrossDomainMessenger { address internal s_mockMessageSender; @@ -31,6 +31,6 @@ contract MockOVMCrossDomainMessenger is iOVM_CrossDomainMessenger { * @param _message Message to send to the target. */ function sendMessage(address _target, bytes calldata _message, uint32) external override { - Address.functionCall(_target, _message, "sendMessage reverted"); + Address.functionCall(_target, _message); } } diff --git a/contracts/src/v0.8/l2ep/test/mocks/scroll/MockScrollCrossDomainMessenger.sol b/contracts/src/v0.8/l2ep/test/mocks/scroll/MockScrollCrossDomainMessenger.sol index e8c3297342..0d05e6380b 100644 --- a/contracts/src/v0.8/l2ep/test/mocks/scroll/MockScrollCrossDomainMessenger.sol +++ b/contracts/src/v0.8/l2ep/test/mocks/scroll/MockScrollCrossDomainMessenger.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.16; import {IScrollMessenger} from "@scroll-tech/contracts/libraries/IScrollMessenger.sol"; -import {Address} from "@openzeppelin/contracts@4.8.3/utils/Address.sol"; +import {Address} from "@openzeppelin/contracts@5.3.0/utils/Address.sol"; contract MockScrollCrossDomainMessenger is IScrollMessenger { address internal s_mockMessageSender; @@ -28,13 +28,13 @@ contract MockScrollCrossDomainMessenger is IScrollMessenger { /// @param _target The address of account who receive the message. /// @param _message The content of the message. function sendMessage(address _target, uint256, bytes calldata _message, uint256) external payable override { - Address.functionCall(_target, _message, "sendMessage reverted"); + Address.functionCall(_target, _message); } /// @notice Send cross chain message from L1 to L2 or L2 to L1. /// @param _target The address of account who receive the message. /// @param _message The content of the message. function sendMessage(address _target, uint256, bytes calldata _message, uint256, address) external payable override { - Address.functionCall(_target, _message, "sendMessage reverted"); + Address.functionCall(_target, _message); } } diff --git a/contracts/src/v0.8/l2ep/test/v1_0_0/arbitrum/ArbitrumCrossDomainForwarder.t.sol b/contracts/src/v0.8/l2ep/test/v1_0_0/arbitrum/ArbitrumCrossDomainForwarder.t.sol index 17727c83b4..f4ddf84e2b 100644 --- a/contracts/src/v0.8/l2ep/test/v1_0_0/arbitrum/ArbitrumCrossDomainForwarder.t.sol +++ b/contracts/src/v0.8/l2ep/test/v1_0_0/arbitrum/ArbitrumCrossDomainForwarder.t.sol @@ -41,7 +41,7 @@ contract ArbitrumCrossDomainForwarder_Constructor is ArbitrumCrossDomainForwarde assertEq(s_arbitrumCrossDomainForwarder.crossDomainMessenger(), s_crossDomainMessengerAddr); // it should set the typeAndVersion correctly - assertEq(s_arbitrumCrossDomainForwarder.typeAndVersion(), "ArbitrumCrossDomainForwarder 1.0.0"); + assertEq(s_arbitrumCrossDomainForwarder.typeAndVersion(), "ArbitrumCrossDomainForwarder 1.1.0-dev"); } } diff --git a/contracts/src/v0.8/l2ep/test/v1_0_0/arbitrum/ArbitrumCrossDomainGovernor.t.sol b/contracts/src/v0.8/l2ep/test/v1_0_0/arbitrum/ArbitrumCrossDomainGovernor.t.sol index 216d136e83..062a7d4407 100644 --- a/contracts/src/v0.8/l2ep/test/v1_0_0/arbitrum/ArbitrumCrossDomainGovernor.t.sol +++ b/contracts/src/v0.8/l2ep/test/v1_0_0/arbitrum/ArbitrumCrossDomainGovernor.t.sol @@ -6,6 +6,7 @@ import {Greeter} from "../../Greeter.sol"; import {L2EPTest} from "../L2EPTest.t.sol"; import {MultiSend} from "../../../../vendor/MultiSend.sol"; +import {Errors} from "@openzeppelin/contracts@5.3.0/utils/Errors.sol"; contract ArbitrumCrossDomainGovernorTest is L2EPTest { /// Helper variable(s) @@ -45,7 +46,7 @@ contract ArbitrumCrossDomainGovernor_Constructor is ArbitrumCrossDomainGovernorT assertEq(s_arbitrumCrossDomainGovernor.crossDomainMessenger(), s_crossDomainMessengerAddr); // it should set the typeAndVersion correctly - assertEq(s_arbitrumCrossDomainGovernor.typeAndVersion(), "ArbitrumCrossDomainGovernor 1.0.0"); + assertEq(s_arbitrumCrossDomainGovernor.typeAndVersion(), "ArbitrumCrossDomainGovernor 1.1.0-dev"); } } @@ -154,7 +155,7 @@ contract ArbitrumCrossDomainGovernor_ForwardDelegate is ArbitrumCrossDomainGover vm.startPrank(s_crossDomainMessengerAddr); // Sends an invalid message (empty transaction data is not allowed) - vm.expectRevert("Governor delegatecall reverted"); + vm.expectRevert(Errors.FailedCall.selector); s_arbitrumCrossDomainGovernor.forwardDelegate( address(s_multiSend), abi.encodeWithSelector( diff --git a/contracts/src/v0.8/l2ep/test/v1_0_0/optimism/OptimismCrossDomainForwarder.t.sol b/contracts/src/v0.8/l2ep/test/v1_0_0/optimism/OptimismCrossDomainForwarder.t.sol index 7a29f6dbf7..6c257004fb 100644 --- a/contracts/src/v0.8/l2ep/test/v1_0_0/optimism/OptimismCrossDomainForwarder.t.sol +++ b/contracts/src/v0.8/l2ep/test/v1_0_0/optimism/OptimismCrossDomainForwarder.t.sol @@ -41,7 +41,7 @@ contract OptimismCrossDomainForwarder_Constructor is OptimismCrossDomainForwarde assertEq(s_optimismCrossDomainForwarder.crossDomainMessenger(), address(s_mockOptimismCrossDomainMessenger)); // it should set the typeAndVersion correctly - assertEq(s_optimismCrossDomainForwarder.typeAndVersion(), "OptimismCrossDomainForwarder 1.0.0"); + assertEq(s_optimismCrossDomainForwarder.typeAndVersion(), "OptimismCrossDomainForwarder 1.1.0-dev"); } } diff --git a/contracts/src/v0.8/l2ep/test/v1_0_0/optimism/OptimismCrossDomainGovernor.t.sol b/contracts/src/v0.8/l2ep/test/v1_0_0/optimism/OptimismCrossDomainGovernor.t.sol index cf7332130b..cb5d31acdf 100644 --- a/contracts/src/v0.8/l2ep/test/v1_0_0/optimism/OptimismCrossDomainGovernor.t.sol +++ b/contracts/src/v0.8/l2ep/test/v1_0_0/optimism/OptimismCrossDomainGovernor.t.sol @@ -8,6 +8,7 @@ import {MockOVMCrossDomainMessenger} from "../../mocks/optimism/MockOVMCrossDoma import {L2EPTest} from "../L2EPTest.t.sol"; import {MultiSend} from "../../../../vendor/MultiSend.sol"; +import {Errors} from "@openzeppelin/contracts@5.3.0/utils/Errors.sol"; contract OptimismCrossDomainGovernorTest is L2EPTest { /// Contracts @@ -45,7 +46,7 @@ contract OptimismCrossDomainGovernor_Constructor is OptimismCrossDomainGovernorT assertEq(s_optimismCrossDomainGovernor.crossDomainMessenger(), address(s_mockOptimismCrossDomainMessenger)); // it should set the typeAndVersion correctly - assertEq(s_optimismCrossDomainGovernor.typeAndVersion(), "OptimismCrossDomainGovernor 1.0.0"); + assertEq(s_optimismCrossDomainGovernor.typeAndVersion(), "OptimismCrossDomainGovernor 1.1.0-dev"); } } @@ -162,7 +163,7 @@ contract OptimismCrossDomainGovernor_ForwardDelegate is OptimismCrossDomainGover vm.startPrank(s_strangerAddr); // Sends an invalid message (empty transaction data is not allowed) - vm.expectRevert("Governor delegatecall reverted"); + vm.expectRevert(Errors.FailedCall.selector); s_mockOptimismCrossDomainMessenger.sendMessage( address(s_optimismCrossDomainGovernor), // target encodeCrossDomainMultiSendMsg( diff --git a/contracts/src/v0.8/l2ep/test/v1_0_0/scroll/ScrollCrossDomainForwarder.t.sol b/contracts/src/v0.8/l2ep/test/v1_0_0/scroll/ScrollCrossDomainForwarder.t.sol index d6c236341c..25aecb1c12 100644 --- a/contracts/src/v0.8/l2ep/test/v1_0_0/scroll/ScrollCrossDomainForwarder.t.sol +++ b/contracts/src/v0.8/l2ep/test/v1_0_0/scroll/ScrollCrossDomainForwarder.t.sol @@ -40,7 +40,7 @@ contract ScrollCrossDomainForwarder_Constructor is ScrollCrossDomainForwarderTes assertEq(s_scrollCrossDomainForwarder.crossDomainMessenger(), address(s_mockScrollCrossDomainMessenger)); // it should set the typeAndVersion correctly - assertEq(s_scrollCrossDomainForwarder.typeAndVersion(), "ScrollCrossDomainForwarder 1.0.0"); + assertEq(s_scrollCrossDomainForwarder.typeAndVersion(), "ScrollCrossDomainForwarder 1.1.0-dev"); } } diff --git a/contracts/src/v0.8/l2ep/test/v1_0_0/scroll/ScrollCrossDomainGovernor.t.sol b/contracts/src/v0.8/l2ep/test/v1_0_0/scroll/ScrollCrossDomainGovernor.t.sol index 4d338f439e..0717edf25e 100644 --- a/contracts/src/v0.8/l2ep/test/v1_0_0/scroll/ScrollCrossDomainGovernor.t.sol +++ b/contracts/src/v0.8/l2ep/test/v1_0_0/scroll/ScrollCrossDomainGovernor.t.sol @@ -7,6 +7,7 @@ import {MockScrollCrossDomainMessenger} from "../../mocks/scroll/MockScrollCross import {L2EPTest} from "../L2EPTest.t.sol"; import {MultiSend} from "../../../../vendor/MultiSend.sol"; +import {Errors} from "@openzeppelin/contracts@5.3.0/utils/Errors.sol"; contract ScrollCrossDomainGovernorTest is L2EPTest { /// Contracts @@ -44,7 +45,7 @@ contract ScrollCrossDomainGovernor_Constructor is ScrollCrossDomainGovernorTest assertEq(s_scrollCrossDomainGovernor.crossDomainMessenger(), address(s_mockScrollCrossDomainMessenger)); // it should set the typeAndVersion correctly - assertEq(s_scrollCrossDomainGovernor.typeAndVersion(), "ScrollCrossDomainGovernor 1.0.0"); + assertEq(s_scrollCrossDomainGovernor.typeAndVersion(), "ScrollCrossDomainGovernor 1.1.0-dev"); } } @@ -159,7 +160,7 @@ contract ScrollCrossDomainGovernor_ForwardDelegate is ScrollCrossDomainGovernorT vm.startPrank(s_strangerAddr); // Sends an invalid message (empty transaction data is not allowed) - vm.expectRevert("Governor delegatecall reverted"); + vm.expectRevert(Errors.FailedCall.selector); s_mockScrollCrossDomainMessenger.sendMessage( address(s_scrollCrossDomainGovernor), // target 0, // value diff --git a/gethwrappers/go_generate.go b/gethwrappers/go_generate.go index d52ca0129e..36f842ca1b 100644 --- a/gethwrappers/go_generate.go +++ b/gethwrappers/go_generate.go @@ -14,3 +14,4 @@ package gethwrappers //go:generate go generate ./shared //go:generate go generate ./data-feeds //go:generate go generate ./payments +//go:generate go generate ./l2ep diff --git a/gethwrappers/l2ep/generated/latest/arbitrum_cross_domain_forwarder/arbitrum_cross_domain_forwarder.go b/gethwrappers/l2ep/generated/latest/arbitrum_cross_domain_forwarder/arbitrum_cross_domain_forwarder.go new file mode 100644 index 0000000000..93979efab8 --- /dev/null +++ b/gethwrappers/l2ep/generated/latest/arbitrum_cross_domain_forwarder/arbitrum_cross_domain_forwarder.go @@ -0,0 +1,928 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package arbitrum_cross_domain_forwarder + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ArbitrumCrossDomainForwarderMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"l1OwnerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptL1Ownership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"crossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forward\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferL1Ownership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"L1OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBalance\",\"inputs\":[{\"name\":\"balance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + Bin: "0x608060405234801561000f575f80fd5b50604051610dcb380380610dcb83398101604081905261002e916101d0565b8033805f816100845760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b3576100b3816100cc565b5050506100c58161017460201b60201c565b50506101fd565b336001600160a01b038216036101245760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007b565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600280546001600160a01b038381166001600160a01b03198084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f602082840312156101e0575f80fd5b81516001600160a01b03811681146101f6575f80fd5b9392505050565b610bc18061020a5f395ff3fe608060405234801561000f575f80fd5b506004361061009f575f3560e01c806396b8d7c011610072578063d2db637211610058578063d2db637214610137578063f2fde38b14610155578063f43b361314610168575f80fd5b806396b8d7c01461011c578063b2ec07871461012f575f80fd5b8063181f5a77146100a35780636fadcf72146100c157806379ba5097146100d65780638da5cb5b146100de575b5f80fd5b6100ab610170565b6040516100b891906109db565b60405180910390f35b6100d46100cf366004610a80565b610190565b005b6100d4610240565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b8565b6100d461012a366004610b5a565b61033c565b6100d46103e4565b60025473ffffffffffffffffffffffffffffffffffffffff166100f7565b6100d4610163366004610b5a565b6104d2565b6100f76104e3565b6060604051806060016040528060268152602001610b8f60269139905090565b6101986104e3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064015b60405180910390fd5b61023b8282610524565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610228565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6103446104e3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e67657200006044820152606401610228565b6103e181610538565b50565b60035461041a9073ffffffffffffffffffffffffffffffffffffffff167311110000000000000000000000000000000011110190565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d7573742062652070726f706f736564204c31206f776e6572000000000000006044820152606401610228565b6003546104d09073ffffffffffffffffffffffffffffffffffffffff1661062d565b565b6104da6106ae565b6103e18161072e565b5f61051f61050660025473ffffffffffffffffffffffffffffffffffffffff1690565b7311110000000000000000000000000000000011110190565b905090565b606061053183835f610822565b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff8216036105b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610228565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907f55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f905f90a350565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146104d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610228565b3373ffffffffffffffffffffffffffffffffffffffff8216036107ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610228565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b606081471015610867576040517fcf47918100000000000000000000000000000000000000000000000000000000815247600482015260248101839052604401610228565b5f808573ffffffffffffffffffffffffffffffffffffffff16848660405161088f9190610b73565b5f6040518083038185875af1925050503d805f81146108c9576040519150601f19603f3d011682016040523d82523d5f602084013e6108ce565b606091505b50915091506108de8683836108e8565b9695505050505050565b6060826108fd576108f882610977565b610531565b8151158015610921575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610970576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610228565b5080610531565b8051156109875780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b838110156109d35781810151838201526020016109bb565b50505f910152565b602081525f82518060208401526109f98160408501602087016109b9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610a4e575f80fd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610a91575f80fd5b610a9a83610a2b565b9150602083013567ffffffffffffffff80821115610ab6575f80fd5b818501915085601f830112610ac9575f80fd5b813581811115610adb57610adb610a53565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610b2157610b21610a53565b81604052828152886020848701011115610b39575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215610b6a575f80fd5b61053182610a2b565b5f8251610b848184602087016109b9565b919091019291505056fe417262697472756d43726f7373446f6d61696e466f7277617264657220312e312e302d646576a164736f6c6343000818000a", +} + +var ArbitrumCrossDomainForwarderABI = ArbitrumCrossDomainForwarderMetaData.ABI + +var ArbitrumCrossDomainForwarderBin = ArbitrumCrossDomainForwarderMetaData.Bin + +func DeployArbitrumCrossDomainForwarder(auth *bind.TransactOpts, backend bind.ContractBackend, l1OwnerAddr common.Address) (common.Address, *types.Transaction, *ArbitrumCrossDomainForwarder, error) { + parsed, err := ArbitrumCrossDomainForwarderMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ArbitrumCrossDomainForwarderBin), backend, l1OwnerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ArbitrumCrossDomainForwarder{address: address, abi: *parsed, ArbitrumCrossDomainForwarderCaller: ArbitrumCrossDomainForwarderCaller{contract: contract}, ArbitrumCrossDomainForwarderTransactor: ArbitrumCrossDomainForwarderTransactor{contract: contract}, ArbitrumCrossDomainForwarderFilterer: ArbitrumCrossDomainForwarderFilterer{contract: contract}}, nil +} + +type ArbitrumCrossDomainForwarder struct { + address common.Address + abi abi.ABI + ArbitrumCrossDomainForwarderCaller + ArbitrumCrossDomainForwarderTransactor + ArbitrumCrossDomainForwarderFilterer +} + +type ArbitrumCrossDomainForwarderCaller struct { + contract *bind.BoundContract +} + +type ArbitrumCrossDomainForwarderTransactor struct { + contract *bind.BoundContract +} + +type ArbitrumCrossDomainForwarderFilterer struct { + contract *bind.BoundContract +} + +type ArbitrumCrossDomainForwarderSession struct { + Contract *ArbitrumCrossDomainForwarder + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ArbitrumCrossDomainForwarderCallerSession struct { + Contract *ArbitrumCrossDomainForwarderCaller + CallOpts bind.CallOpts +} + +type ArbitrumCrossDomainForwarderTransactorSession struct { + Contract *ArbitrumCrossDomainForwarderTransactor + TransactOpts bind.TransactOpts +} + +type ArbitrumCrossDomainForwarderRaw struct { + Contract *ArbitrumCrossDomainForwarder +} + +type ArbitrumCrossDomainForwarderCallerRaw struct { + Contract *ArbitrumCrossDomainForwarderCaller +} + +type ArbitrumCrossDomainForwarderTransactorRaw struct { + Contract *ArbitrumCrossDomainForwarderTransactor +} + +func NewArbitrumCrossDomainForwarder(address common.Address, backend bind.ContractBackend) (*ArbitrumCrossDomainForwarder, error) { + abi, err := abi.JSON(strings.NewReader(ArbitrumCrossDomainForwarderABI)) + if err != nil { + return nil, err + } + contract, err := bindArbitrumCrossDomainForwarder(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarder{address: address, abi: abi, ArbitrumCrossDomainForwarderCaller: ArbitrumCrossDomainForwarderCaller{contract: contract}, ArbitrumCrossDomainForwarderTransactor: ArbitrumCrossDomainForwarderTransactor{contract: contract}, ArbitrumCrossDomainForwarderFilterer: ArbitrumCrossDomainForwarderFilterer{contract: contract}}, nil +} + +func NewArbitrumCrossDomainForwarderCaller(address common.Address, caller bind.ContractCaller) (*ArbitrumCrossDomainForwarderCaller, error) { + contract, err := bindArbitrumCrossDomainForwarder(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderCaller{contract: contract}, nil +} + +func NewArbitrumCrossDomainForwarderTransactor(address common.Address, transactor bind.ContractTransactor) (*ArbitrumCrossDomainForwarderTransactor, error) { + contract, err := bindArbitrumCrossDomainForwarder(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderTransactor{contract: contract}, nil +} + +func NewArbitrumCrossDomainForwarderFilterer(address common.Address, filterer bind.ContractFilterer) (*ArbitrumCrossDomainForwarderFilterer, error) { + contract, err := bindArbitrumCrossDomainForwarder(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderFilterer{contract: contract}, nil +} + +func bindArbitrumCrossDomainForwarder(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ArbitrumCrossDomainForwarderMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumCrossDomainForwarder.Contract.ArbitrumCrossDomainForwarderCaller.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.ArbitrumCrossDomainForwarderTransactor.contract.Transfer(opts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.ArbitrumCrossDomainForwarderTransactor.contract.Transact(opts, method, params...) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumCrossDomainForwarder.Contract.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.contract.Transfer(opts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.contract.Transact(opts, method, params...) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCaller) CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumCrossDomainForwarder.contract.Call(opts, &out, "crossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) CrossDomainMessenger() (common.Address, error) { + return _ArbitrumCrossDomainForwarder.Contract.CrossDomainMessenger(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCallerSession) CrossDomainMessenger() (common.Address, error) { + return _ArbitrumCrossDomainForwarder.Contract.CrossDomainMessenger(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCaller) L1Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumCrossDomainForwarder.contract.Call(opts, &out, "l1Owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) L1Owner() (common.Address, error) { + return _ArbitrumCrossDomainForwarder.Contract.L1Owner(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCallerSession) L1Owner() (common.Address, error) { + return _ArbitrumCrossDomainForwarder.Contract.L1Owner(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumCrossDomainForwarder.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) Owner() (common.Address, error) { + return _ArbitrumCrossDomainForwarder.Contract.Owner(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCallerSession) Owner() (common.Address, error) { + return _ArbitrumCrossDomainForwarder.Contract.Owner(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ArbitrumCrossDomainForwarder.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) TypeAndVersion() (string, error) { + return _ArbitrumCrossDomainForwarder.Contract.TypeAndVersion(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCallerSession) TypeAndVersion() (string, error) { + return _ArbitrumCrossDomainForwarder.Contract.TypeAndVersion(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactor) AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.contract.Transact(opts, "acceptL1Ownership") +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.AcceptL1Ownership(&_ArbitrumCrossDomainForwarder.TransactOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.AcceptL1Ownership(&_ArbitrumCrossDomainForwarder.TransactOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.contract.Transact(opts, "acceptOwnership") +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.AcceptOwnership(&_ArbitrumCrossDomainForwarder.TransactOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.AcceptOwnership(&_ArbitrumCrossDomainForwarder.TransactOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactor) Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.contract.Transact(opts, "forward", target, data) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.Forward(&_ArbitrumCrossDomainForwarder.TransactOpts, target, data) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.Forward(&_ArbitrumCrossDomainForwarder.TransactOpts, target, data) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactor) TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.contract.Transact(opts, "transferL1Ownership", to) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.TransferL1Ownership(&_ArbitrumCrossDomainForwarder.TransactOpts, to) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.TransferL1Ownership(&_ArbitrumCrossDomainForwarder.TransactOpts, to) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.contract.Transact(opts, "transferOwnership", to) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.TransferOwnership(&_ArbitrumCrossDomainForwarder.TransactOpts, to) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.TransferOwnership(&_ArbitrumCrossDomainForwarder.TransactOpts, to) +} + +type ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator struct { + Event *ArbitrumCrossDomainForwarderL1OwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainForwarderL1OwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.FilterLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator{contract: _ArbitrumCrossDomainForwarder.contract, event: "L1OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.WatchLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainForwarderL1OwnershipTransferRequested) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) ParseL1OwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainForwarderL1OwnershipTransferRequested, error) { + event := new(ArbitrumCrossDomainForwarderL1OwnershipTransferRequested) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator struct { + Event *ArbitrumCrossDomainForwarderL1OwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainForwarderL1OwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.FilterLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator{contract: _ArbitrumCrossDomainForwarder.contract, event: "L1OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.WatchLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainForwarderL1OwnershipTransferred) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) ParseL1OwnershipTransferred(log types.Log) (*ArbitrumCrossDomainForwarderL1OwnershipTransferred, error) { + event := new(ArbitrumCrossDomainForwarderL1OwnershipTransferred) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator struct { + Event *ArbitrumCrossDomainForwarderOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainForwarderOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator{contract: _ArbitrumCrossDomainForwarder.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainForwarderOwnershipTransferRequested) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) ParseOwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainForwarderOwnershipTransferRequested, error) { + event := new(ArbitrumCrossDomainForwarderOwnershipTransferRequested) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumCrossDomainForwarderOwnershipTransferredIterator struct { + Event *ArbitrumCrossDomainForwarderOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainForwarderOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainForwarderOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainForwarderOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainForwarderOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderOwnershipTransferredIterator{contract: _ArbitrumCrossDomainForwarder.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainForwarderOwnershipTransferred) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) ParseOwnershipTransferred(log types.Log) (*ArbitrumCrossDomainForwarderOwnershipTransferred, error) { + event := new(ArbitrumCrossDomainForwarderOwnershipTransferred) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (ArbitrumCrossDomainForwarderL1OwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0x55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f") +} + +func (ArbitrumCrossDomainForwarderL1OwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0xb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272") +} + +func (ArbitrumCrossDomainForwarderOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ArbitrumCrossDomainForwarderOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarder) Address() common.Address { + return _ArbitrumCrossDomainForwarder.address +} + +type ArbitrumCrossDomainForwarderInterface interface { + CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) + + L1Owner(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator, error) + + WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainForwarderL1OwnershipTransferRequested, error) + + FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator, error) + + WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferred(log types.Log) (*ArbitrumCrossDomainForwarderL1OwnershipTransferred, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainForwarderOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ArbitrumCrossDomainForwarderOwnershipTransferred, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/latest/arbitrum_cross_domain_governor/arbitrum_cross_domain_governor.go b/gethwrappers/l2ep/generated/latest/arbitrum_cross_domain_governor/arbitrum_cross_domain_governor.go new file mode 100644 index 0000000000..26a5fa5dca --- /dev/null +++ b/gethwrappers/l2ep/generated/latest/arbitrum_cross_domain_governor/arbitrum_cross_domain_governor.go @@ -0,0 +1,942 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package arbitrum_cross_domain_governor + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ArbitrumCrossDomainGovernorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"l1OwnerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptL1Ownership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"crossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forward\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forwardDelegate\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferL1Ownership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"L1OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBalance\",\"inputs\":[{\"name\":\"balance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + Bin: "0x608060405234801561000f575f80fd5b50604051610fac380380610fac83398101604081905261002e916101d2565b808033805f816100855760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b4576100b4816100ce565b5050506100c68161017660201b60201c565b5050506101ff565b336001600160a01b038216036101265760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007c565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600280546001600160a01b038381166001600160a01b03198084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f602082840312156101e2575f80fd5b81516001600160a01b03811681146101f8575f80fd5b9392505050565b610da08061020c5f395ff3fe608060405234801561000f575f80fd5b50600436106100b9575f3560e01c806396b8d7c011610072578063d2db637211610058578063d2db637214610164578063f2fde38b14610182578063f43b361314610195575f80fd5b806396b8d7c014610149578063b2ec07871461015c575f80fd5b80636fadcf72116100a25780636fadcf72146100f057806379ba5097146101035780638da5cb5b1461010b575f80fd5b8063181f5a77146100bd57806326929eb6146100db575b5f80fd5b6100c561019d565b6040516100d29190610bbb565b60405180910390f35b6100ee6100e9366004610c60565b6101bd565b005b6100ee6100fe366004610c60565b6102b4565b6100ee6103a1565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d2565b6100ee610157366004610d3a565b61049d565b6100ee610545565b60025473ffffffffffffffffffffffffffffffffffffffff16610124565b6100ee610190366004610d3a565b610633565b610124610644565b6060604051806060016040528060258152602001610d6f60259139905090565b6101c5610644565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061021457505f5473ffffffffffffffffffffffffffffffffffffffff1633145b6102a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572206f60448201527f72206f776e65720000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102af8282610685565b505050565b6102bc610644565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061030b57505f5473ffffffffffffffffffffffffffffffffffffffff1633145b610397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572206f60448201527f72206f776e657200000000000000000000000000000000000000000000000000606482015260840161029c565b6102af8282610704565b60015473ffffffffffffffffffffffffffffffffffffffff163314610422576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161029c565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6104a5610644565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e6765720000604482015260640161029c565b61054281610718565b50565b60035461057b9073ffffffffffffffffffffffffffffffffffffffff167311110000000000000000000000000000000011110190565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461060f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d7573742062652070726f706f736564204c31206f776e657200000000000000604482015260640161029c565b6003546106319073ffffffffffffffffffffffffffffffffffffffff1661080d565b565b61063b61088e565b6105428161090e565b5f61068061066760025473ffffffffffffffffffffffffffffffffffffffff1690565b7311110000000000000000000000000000000011110190565b905090565b60605f808473ffffffffffffffffffffffffffffffffffffffff16846040516106ae9190610d53565b5f60405180830381855af49150503d805f81146106e6576040519150601f19603f3d011682016040523d82523d5f602084013e6106eb565b606091505b50915091506106fb858383610a02565b95945050505050565b606061071183835f610a91565b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff821603610797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161029c565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907f55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f905f90a350565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161029c565b3373ffffffffffffffffffffffffffffffffffffffff82160361098d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161029c565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b606082610a1757610a1282610b57565b610711565b8151158015610a3b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610a8a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161029c565b5092915050565b606081471015610ad6576040517fcf4791810000000000000000000000000000000000000000000000000000000081524760048201526024810183905260440161029c565b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051610afe9190610d53565b5f6040518083038185875af1925050503d805f8114610b38576040519150601f19603f3d011682016040523d82523d5f602084013e610b3d565b606091505b5091509150610b4d868383610a02565b9695505050505050565b805115610b675780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b83811015610bb3578181015183820152602001610b9b565b50505f910152565b602081525f8251806020840152610bd9816040850160208701610b99565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c2e575f80fd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610c71575f80fd5b610c7a83610c0b565b9150602083013567ffffffffffffffff80821115610c96575f80fd5b818501915085601f830112610ca9575f80fd5b813581811115610cbb57610cbb610c33565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610d0157610d01610c33565b81604052828152886020848701011115610d19575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215610d4a575f80fd5b61071182610c0b565b5f8251610d64818460208701610b99565b919091019291505056fe417262697472756d43726f7373446f6d61696e476f7665726e6f7220312e312e302d646576a164736f6c6343000818000a", +} + +var ArbitrumCrossDomainGovernorABI = ArbitrumCrossDomainGovernorMetaData.ABI + +var ArbitrumCrossDomainGovernorBin = ArbitrumCrossDomainGovernorMetaData.Bin + +func DeployArbitrumCrossDomainGovernor(auth *bind.TransactOpts, backend bind.ContractBackend, l1OwnerAddr common.Address) (common.Address, *types.Transaction, *ArbitrumCrossDomainGovernor, error) { + parsed, err := ArbitrumCrossDomainGovernorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ArbitrumCrossDomainGovernorBin), backend, l1OwnerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ArbitrumCrossDomainGovernor{address: address, abi: *parsed, ArbitrumCrossDomainGovernorCaller: ArbitrumCrossDomainGovernorCaller{contract: contract}, ArbitrumCrossDomainGovernorTransactor: ArbitrumCrossDomainGovernorTransactor{contract: contract}, ArbitrumCrossDomainGovernorFilterer: ArbitrumCrossDomainGovernorFilterer{contract: contract}}, nil +} + +type ArbitrumCrossDomainGovernor struct { + address common.Address + abi abi.ABI + ArbitrumCrossDomainGovernorCaller + ArbitrumCrossDomainGovernorTransactor + ArbitrumCrossDomainGovernorFilterer +} + +type ArbitrumCrossDomainGovernorCaller struct { + contract *bind.BoundContract +} + +type ArbitrumCrossDomainGovernorTransactor struct { + contract *bind.BoundContract +} + +type ArbitrumCrossDomainGovernorFilterer struct { + contract *bind.BoundContract +} + +type ArbitrumCrossDomainGovernorSession struct { + Contract *ArbitrumCrossDomainGovernor + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ArbitrumCrossDomainGovernorCallerSession struct { + Contract *ArbitrumCrossDomainGovernorCaller + CallOpts bind.CallOpts +} + +type ArbitrumCrossDomainGovernorTransactorSession struct { + Contract *ArbitrumCrossDomainGovernorTransactor + TransactOpts bind.TransactOpts +} + +type ArbitrumCrossDomainGovernorRaw struct { + Contract *ArbitrumCrossDomainGovernor +} + +type ArbitrumCrossDomainGovernorCallerRaw struct { + Contract *ArbitrumCrossDomainGovernorCaller +} + +type ArbitrumCrossDomainGovernorTransactorRaw struct { + Contract *ArbitrumCrossDomainGovernorTransactor +} + +func NewArbitrumCrossDomainGovernor(address common.Address, backend bind.ContractBackend) (*ArbitrumCrossDomainGovernor, error) { + abi, err := abi.JSON(strings.NewReader(ArbitrumCrossDomainGovernorABI)) + if err != nil { + return nil, err + } + contract, err := bindArbitrumCrossDomainGovernor(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernor{address: address, abi: abi, ArbitrumCrossDomainGovernorCaller: ArbitrumCrossDomainGovernorCaller{contract: contract}, ArbitrumCrossDomainGovernorTransactor: ArbitrumCrossDomainGovernorTransactor{contract: contract}, ArbitrumCrossDomainGovernorFilterer: ArbitrumCrossDomainGovernorFilterer{contract: contract}}, nil +} + +func NewArbitrumCrossDomainGovernorCaller(address common.Address, caller bind.ContractCaller) (*ArbitrumCrossDomainGovernorCaller, error) { + contract, err := bindArbitrumCrossDomainGovernor(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorCaller{contract: contract}, nil +} + +func NewArbitrumCrossDomainGovernorTransactor(address common.Address, transactor bind.ContractTransactor) (*ArbitrumCrossDomainGovernorTransactor, error) { + contract, err := bindArbitrumCrossDomainGovernor(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorTransactor{contract: contract}, nil +} + +func NewArbitrumCrossDomainGovernorFilterer(address common.Address, filterer bind.ContractFilterer) (*ArbitrumCrossDomainGovernorFilterer, error) { + contract, err := bindArbitrumCrossDomainGovernor(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorFilterer{contract: contract}, nil +} + +func bindArbitrumCrossDomainGovernor(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ArbitrumCrossDomainGovernorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumCrossDomainGovernor.Contract.ArbitrumCrossDomainGovernorCaller.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.ArbitrumCrossDomainGovernorTransactor.contract.Transfer(opts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.ArbitrumCrossDomainGovernorTransactor.contract.Transact(opts, method, params...) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumCrossDomainGovernor.Contract.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.contract.Transfer(opts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.contract.Transact(opts, method, params...) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCaller) CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumCrossDomainGovernor.contract.Call(opts, &out, "crossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) CrossDomainMessenger() (common.Address, error) { + return _ArbitrumCrossDomainGovernor.Contract.CrossDomainMessenger(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCallerSession) CrossDomainMessenger() (common.Address, error) { + return _ArbitrumCrossDomainGovernor.Contract.CrossDomainMessenger(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCaller) L1Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumCrossDomainGovernor.contract.Call(opts, &out, "l1Owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) L1Owner() (common.Address, error) { + return _ArbitrumCrossDomainGovernor.Contract.L1Owner(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCallerSession) L1Owner() (common.Address, error) { + return _ArbitrumCrossDomainGovernor.Contract.L1Owner(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumCrossDomainGovernor.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) Owner() (common.Address, error) { + return _ArbitrumCrossDomainGovernor.Contract.Owner(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCallerSession) Owner() (common.Address, error) { + return _ArbitrumCrossDomainGovernor.Contract.Owner(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ArbitrumCrossDomainGovernor.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) TypeAndVersion() (string, error) { + return _ArbitrumCrossDomainGovernor.Contract.TypeAndVersion(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCallerSession) TypeAndVersion() (string, error) { + return _ArbitrumCrossDomainGovernor.Contract.TypeAndVersion(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactor) AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.contract.Transact(opts, "acceptL1Ownership") +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.AcceptL1Ownership(&_ArbitrumCrossDomainGovernor.TransactOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.AcceptL1Ownership(&_ArbitrumCrossDomainGovernor.TransactOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.contract.Transact(opts, "acceptOwnership") +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.AcceptOwnership(&_ArbitrumCrossDomainGovernor.TransactOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.AcceptOwnership(&_ArbitrumCrossDomainGovernor.TransactOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactor) Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.contract.Transact(opts, "forward", target, data) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.Forward(&_ArbitrumCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.Forward(&_ArbitrumCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactor) ForwardDelegate(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.contract.Transact(opts, "forwardDelegate", target, data) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) ForwardDelegate(target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.ForwardDelegate(&_ArbitrumCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorSession) ForwardDelegate(target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.ForwardDelegate(&_ArbitrumCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactor) TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.contract.Transact(opts, "transferL1Ownership", to) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.TransferL1Ownership(&_ArbitrumCrossDomainGovernor.TransactOpts, to) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.TransferL1Ownership(&_ArbitrumCrossDomainGovernor.TransactOpts, to) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.contract.Transact(opts, "transferOwnership", to) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.TransferOwnership(&_ArbitrumCrossDomainGovernor.TransactOpts, to) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.TransferOwnership(&_ArbitrumCrossDomainGovernor.TransactOpts, to) +} + +type ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator struct { + Event *ArbitrumCrossDomainGovernorL1OwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainGovernorL1OwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.FilterLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator{contract: _ArbitrumCrossDomainGovernor.contract, event: "L1OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.WatchLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainGovernorL1OwnershipTransferRequested) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) ParseL1OwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainGovernorL1OwnershipTransferRequested, error) { + event := new(ArbitrumCrossDomainGovernorL1OwnershipTransferRequested) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator struct { + Event *ArbitrumCrossDomainGovernorL1OwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainGovernorL1OwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.FilterLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator{contract: _ArbitrumCrossDomainGovernor.contract, event: "L1OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.WatchLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainGovernorL1OwnershipTransferred) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) ParseL1OwnershipTransferred(log types.Log) (*ArbitrumCrossDomainGovernorL1OwnershipTransferred, error) { + event := new(ArbitrumCrossDomainGovernorL1OwnershipTransferred) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator struct { + Event *ArbitrumCrossDomainGovernorOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainGovernorOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator{contract: _ArbitrumCrossDomainGovernor.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainGovernorOwnershipTransferRequested) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) ParseOwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainGovernorOwnershipTransferRequested, error) { + event := new(ArbitrumCrossDomainGovernorOwnershipTransferRequested) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumCrossDomainGovernorOwnershipTransferredIterator struct { + Event *ArbitrumCrossDomainGovernorOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainGovernorOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainGovernorOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainGovernorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainGovernorOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorOwnershipTransferredIterator{contract: _ArbitrumCrossDomainGovernor.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainGovernorOwnershipTransferred) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) ParseOwnershipTransferred(log types.Log) (*ArbitrumCrossDomainGovernorOwnershipTransferred, error) { + event := new(ArbitrumCrossDomainGovernorOwnershipTransferred) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (ArbitrumCrossDomainGovernorL1OwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0x55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f") +} + +func (ArbitrumCrossDomainGovernorL1OwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0xb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272") +} + +func (ArbitrumCrossDomainGovernorOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ArbitrumCrossDomainGovernorOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernor) Address() common.Address { + return _ArbitrumCrossDomainGovernor.address +} + +type ArbitrumCrossDomainGovernorInterface interface { + CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) + + L1Owner(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + ForwardDelegate(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator, error) + + WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainGovernorL1OwnershipTransferRequested, error) + + FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator, error) + + WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferred(log types.Log) (*ArbitrumCrossDomainGovernorL1OwnershipTransferred, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainGovernorOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ArbitrumCrossDomainGovernorOwnershipTransferred, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/latest/arbitrum_sequencer_uptime_feed/arbitrum_sequencer_uptime_feed.go b/gethwrappers/l2ep/generated/latest/arbitrum_sequencer_uptime_feed/arbitrum_sequencer_uptime_feed.go new file mode 100644 index 0000000000..e1a5367109 --- /dev/null +++ b/gethwrappers/l2ep/generated/latest/arbitrum_sequencer_uptime_feed/arbitrum_sequencer_uptime_feed.go @@ -0,0 +1,2271 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package arbitrum_sequencer_uptime_feed + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ArbitrumSequencerUptimeFeedMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"flagsAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1SenderAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"FLAGS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract IFlags\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FLAG_L2_SEQ_OFFLINE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"aliasedL1MessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"description\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAnswer\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoundData\",\"inputs\":[{\"name\":\"_roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"outputs\":[{\"name\":\"roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"},{\"name\":\"answer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"answeredInRound\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTimestamp\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_calldata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestAnswer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestRound\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestRoundData\",\"inputs\":[],\"outputs\":[{\"name\":\"roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"},{\"name\":\"answer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"answeredInRound\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferL1Sender\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"updateStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AddedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AnswerUpdated\",\"inputs\":[{\"name\":\"current\",\"type\":\"int256\",\"indexed\":true,\"internalType\":\"int256\"},{\"name\":\"roundId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1SenderTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewRound\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"startedBy\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemovedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdateIgnored\",\"inputs\":[{\"name\":\"latestStatus\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"latestTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"incomingStatus\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"incomingTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoDataPresent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Uninitialized\",\"inputs\":[]}]", + Bin: "0x6101006040525f60a081905260c081905260e052600480546001600160981b03191690553480156200002f575f80fd5b5060405162001f5638038062001f5683398101604081905262000052916200023d565b33805f81620000a85760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000da57620000da816200010e565b50506001805460ff60a01b1916600160a01b17905550620000fb81620001b8565b506001600160a01b031660805262000273565b336001600160a01b03821603620001685760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200009f565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6003546001600160a01b0390811690821681146200021d57600380546001600160a01b0319166001600160a01b0384811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18905f90a35b5050565b80516001600160a01b038116811462000238575f80fd5b919050565b5f80604083850312156200024f575f80fd5b6200025a8362000221565b91506200026a6020840162000221565b90509250929050565b608051611cb5620002a15f395f8181610317015281816109b8015281816117a9015261187a0152611cb55ff3fe608060405234801561000f575f80fd5b50600436106101b0575f3560e01c80638205bf6a116100f3578063b5ab58dc11610093578063dc7f01241161006e578063dc7f0124146103da578063ed8378f5146103ff578063f2fde38b14610412578063feaf968c14610425575f80fd5b8063b5ab58dc14610396578063b633620c146103a9578063b7558b7a146103bc575f80fd5b8063926aa9f6116100ce578063926aa9f61461030a5780639728538f146103125780639a6fc8f514610339578063a118f24914610383575f80fd5b80638205bf6a146102d25780638823da6c146102da5780638da5cb5b146102ed575f80fd5b806354fd4d501161015e5780637284e416116101395780637284e4161461027e57806379ba5097146102ba5780638038e4a1146102c25780638129fc1c146102ca575f80fd5b806354fd4d501461024b578063668a0f02146102535780636b14daf81461025b575f80fd5b8063284afc081161018e578063284afc0814610209578063313ce5671461021c57806350d25bcd14610235575f80fd5b80630a756983146101b4578063181f5a77146101be5780631e8d27dd146101dc575b5f80fd5b6101bc61042d565b005b6101c66104ab565b6040516101d391906119be565b60405180910390f35b6101e46104cb565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6101bc610217366004611a4b565b6104fc565b6102235f81565b60405160ff90911681526020016101d3565b61023d610510565b6040519081526020016101d3565b61023d600181565b61023d61062e565b61026e610269366004611a91565b610746565b60405190151581526020016101d3565b6101c66040518060400160405280601f81526020017f4c322053657175656e63657220557074696d652053746174757320466565640081525081565b6101bc61077a565b6101bc610876565b6101bc610909565b61023d610abc565b6101bc6102e8366004611a4b565b610bd5565b5f5473ffffffffffffffffffffffffffffffffffffffff166101e4565b6101e4610c8c565b6101e47f000000000000000000000000000000000000000000000000000000000000000081565b61034c610347366004611b6b565b610ccd565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101d3565b6101bc610391366004611a4b565b610e27565b61023d6103a4366004611b9b565b610ed9565b61023d6103b7366004611b9b565b610fd4565b60035473ffffffffffffffffffffffffffffffffffffffff166101e4565b60015461026e9074010000000000000000000000000000000000000000900460ff1681565b6101bc61040d366004611bbf565b6110cd565b6101bc610420366004611a4b565b611276565b61034c611287565b6104356113c4565b60015474010000000000000000000000000000000000000000900460ff16156104a957600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638905f90a15b565b6060604051806060016040528060218152602001611c8860219139905090565b6104f660017fa438451d6458044c3c8cd2f6f31c91ac882a6d917fa1d50c2bc3074c4524952d611c2f565b60601c81565b6105046113c4565b61050d81611444565b50565b5f610550335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b6105bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff16928201929092529061061b906114de565b6106288160200151611523565b91505090565b5f61066e335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b6106d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105b2565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff169282019290925290610734906114de565b5169ffffffffffffffffffff16905090565b5f6107518383611537565b80610771575073ffffffffffffffffffffffffffffffffffffffff831632145b90505b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146107fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016105b2565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61087e6113c4565b60015474010000000000000000000000000000000000000000900460ff166104a957600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480905f90a1565b6109116113c4565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff1692820192909252901561099f576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b425f73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663357e47fe610a0860017fa438451d6458044c3c8cd2f6f31c91ac882a6d917fa1d50c2bc3074c4524952d611c2f565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260609190911c6004820152602401602060405180830381865afa158015610a5d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a819190611c42565b9050610a8f6001828461158b565b6040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c8905f90a1505050565b5f610afc335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105b2565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff169282019290925290610bc2906114de565b6040015167ffffffffffffffff16905090565b610bdd6113c4565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff161561050d5773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d191015b60405180910390a150565b5f610cc8610caf60035473ffffffffffffffffffffffffffffffffffffffff1690565b7311110000000000000000000000000000000011110190565b905090565b5f805f805f610d11335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b610d77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105b2565b600454610d8f9069ffffffffffffffffffff166114de565b610da48669ffffffffffffffffffff16611756565b15610e125769ffffffffffffffffffff86165f9081526005602090815260409182902082518084019093525460ff8116151580845261010090910467ffffffffffffffff1691830191909152610df990611523565b9450806020015167ffffffffffffffff16935050610e19565b5f93505f92505b509394919350915081908490565b610e2f6113c4565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff1661050d5773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49101610c81565b5f610f19335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b610f7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105b2565b600454610f979069ffffffffffffffffffff166114de565b610fa082611756565b15610fcc5769ffffffffffffffffffff82165f908152600560205260409020546107749060ff16611523565b505f5b919050565b5f611014335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105b2565b6004546110929069ffffffffffffffffffff166114de565b61109b82611756565b15610fcc575069ffffffffffffffffffff165f90815260056020526040902054610100900467ffffffffffffffff1690565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff16928201929092529061112d906114de565b611135610c8c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611199576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8215158160200151151514806111c657508167ffffffffffffffff16816040015167ffffffffffffffff16115b1561123a577fe4a6e16301740042c17431042adb8f60454c18fb5934dd4c456269c0dc388fdf81602001518260400151858560405161122d9493929190931515845267ffffffffffffffff9283166020850152901515604084015216606082015260800190565b60405180910390a1505050565b6001815f0181815161124c9190611c5d565b69ffffffffffffffffffff16905250805161126890848461158b565b6112718361178c565b505050565b61127e6113c4565b61050d816118ca565b5f805f805f6112cb335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b611331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105b2565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff169282019290925290611391906114de565b805f015195506113a48160200151611523565b6040909101519596909567ffffffffffffffff1694508493508692509050565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146104a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016105b2565b60035473ffffffffffffffffffffffffffffffffffffffff90811690821681146114da57600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18905f90a35b5050565b8069ffffffffffffffffffff165f0361050d576040517f1c72fad400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8161152f575f610774565b600192915050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081205460ff168061077157505060015474010000000000000000000000000000000000000000900460ff161592915050565b60408051808201825283151580825267ffffffffffffffff8481166020808501828152865160608101885269ffffffffffffffffffff8b8116808352828501978852828a018681525f828152600587528b90208a51815496518a16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff911515919091167fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000009097169690961795909517909455825160048054995195519098166b010000000000000000000000027fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff9515156a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000909a1691909316179790971792909216919091179093559451908152929390923392917f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271910160405180910390a38469ffffffffffffffffffff1661171285611523565b60405167ffffffffffffffff861681527f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f9060200160405180910390a35050505050565b5f8082118015611770575069ffffffffffffffffffff8211155b801561077457505060045469ffffffffffffffffffff16101590565b80156118635773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663d74af2636117f960017fa438451d6458044c3c8cd2f6f31c91ac882a6d917fa1d50c2bc3074c4524952d611c2f565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260609190911c60048201526024015f604051808303815f87803b15801561184a575f80fd5b505af115801561185c573d5f803e3d5ffd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663e37a83666117f960017fa438451d6458044c3c8cd2f6f31c91ac882a6d917fa1d50c2bc3074c4524952d611c2f565b3373ffffffffffffffffffffffffffffffffffffffff821603611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016105b2565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f602080835283518060208501525f5b818110156119ea578581018301518582016040015282016119ce565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610fcf575f80fd5b5f60208284031215611a5b575f80fd5b61077182611a28565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215611aa2575f80fd5b611aab83611a28565b9150602083013567ffffffffffffffff80821115611ac7575f80fd5b818501915085601f830112611ada575f80fd5b813581811115611aec57611aec611a64565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611b3257611b32611a64565b81604052828152886020848701011115611b4a575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215611b7b575f80fd5b813569ffffffffffffffffffff81168114611b94575f80fd5b9392505050565b5f60208284031215611bab575f80fd5b5035919050565b801515811461050d575f80fd5b5f8060408385031215611bd0575f80fd5b8235611bdb81611bb2565b9150602083013567ffffffffffffffff81168114611bf7575f80fd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561077457610774611c02565b5f60208284031215611c52575f80fd5b8151611b9481611bb2565b69ffffffffffffffffffff818116838216019080821115611c8057611c80611c02565b509291505056fe417262697472756d53657175656e636572557074696d654665656420312e302e30a164736f6c6343000818000a", +} + +var ArbitrumSequencerUptimeFeedABI = ArbitrumSequencerUptimeFeedMetaData.ABI + +var ArbitrumSequencerUptimeFeedBin = ArbitrumSequencerUptimeFeedMetaData.Bin + +func DeployArbitrumSequencerUptimeFeed(auth *bind.TransactOpts, backend bind.ContractBackend, flagsAddress common.Address, l1SenderAddress common.Address) (common.Address, *types.Transaction, *ArbitrumSequencerUptimeFeed, error) { + parsed, err := ArbitrumSequencerUptimeFeedMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ArbitrumSequencerUptimeFeedBin), backend, flagsAddress, l1SenderAddress) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ArbitrumSequencerUptimeFeed{address: address, abi: *parsed, ArbitrumSequencerUptimeFeedCaller: ArbitrumSequencerUptimeFeedCaller{contract: contract}, ArbitrumSequencerUptimeFeedTransactor: ArbitrumSequencerUptimeFeedTransactor{contract: contract}, ArbitrumSequencerUptimeFeedFilterer: ArbitrumSequencerUptimeFeedFilterer{contract: contract}}, nil +} + +type ArbitrumSequencerUptimeFeed struct { + address common.Address + abi abi.ABI + ArbitrumSequencerUptimeFeedCaller + ArbitrumSequencerUptimeFeedTransactor + ArbitrumSequencerUptimeFeedFilterer +} + +type ArbitrumSequencerUptimeFeedCaller struct { + contract *bind.BoundContract +} + +type ArbitrumSequencerUptimeFeedTransactor struct { + contract *bind.BoundContract +} + +type ArbitrumSequencerUptimeFeedFilterer struct { + contract *bind.BoundContract +} + +type ArbitrumSequencerUptimeFeedSession struct { + Contract *ArbitrumSequencerUptimeFeed + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ArbitrumSequencerUptimeFeedCallerSession struct { + Contract *ArbitrumSequencerUptimeFeedCaller + CallOpts bind.CallOpts +} + +type ArbitrumSequencerUptimeFeedTransactorSession struct { + Contract *ArbitrumSequencerUptimeFeedTransactor + TransactOpts bind.TransactOpts +} + +type ArbitrumSequencerUptimeFeedRaw struct { + Contract *ArbitrumSequencerUptimeFeed +} + +type ArbitrumSequencerUptimeFeedCallerRaw struct { + Contract *ArbitrumSequencerUptimeFeedCaller +} + +type ArbitrumSequencerUptimeFeedTransactorRaw struct { + Contract *ArbitrumSequencerUptimeFeedTransactor +} + +func NewArbitrumSequencerUptimeFeed(address common.Address, backend bind.ContractBackend) (*ArbitrumSequencerUptimeFeed, error) { + abi, err := abi.JSON(strings.NewReader(ArbitrumSequencerUptimeFeedABI)) + if err != nil { + return nil, err + } + contract, err := bindArbitrumSequencerUptimeFeed(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeed{address: address, abi: abi, ArbitrumSequencerUptimeFeedCaller: ArbitrumSequencerUptimeFeedCaller{contract: contract}, ArbitrumSequencerUptimeFeedTransactor: ArbitrumSequencerUptimeFeedTransactor{contract: contract}, ArbitrumSequencerUptimeFeedFilterer: ArbitrumSequencerUptimeFeedFilterer{contract: contract}}, nil +} + +func NewArbitrumSequencerUptimeFeedCaller(address common.Address, caller bind.ContractCaller) (*ArbitrumSequencerUptimeFeedCaller, error) { + contract, err := bindArbitrumSequencerUptimeFeed(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedCaller{contract: contract}, nil +} + +func NewArbitrumSequencerUptimeFeedTransactor(address common.Address, transactor bind.ContractTransactor) (*ArbitrumSequencerUptimeFeedTransactor, error) { + contract, err := bindArbitrumSequencerUptimeFeed(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedTransactor{contract: contract}, nil +} + +func NewArbitrumSequencerUptimeFeedFilterer(address common.Address, filterer bind.ContractFilterer) (*ArbitrumSequencerUptimeFeedFilterer, error) { + contract, err := bindArbitrumSequencerUptimeFeed(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedFilterer{contract: contract}, nil +} + +func bindArbitrumSequencerUptimeFeed(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ArbitrumSequencerUptimeFeedMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumSequencerUptimeFeed.Contract.ArbitrumSequencerUptimeFeedCaller.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.ArbitrumSequencerUptimeFeedTransactor.contract.Transfer(opts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.ArbitrumSequencerUptimeFeedTransactor.contract.Transact(opts, method, params...) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumSequencerUptimeFeed.Contract.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.contract.Transfer(opts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.contract.Transact(opts, method, params...) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) FLAGS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "FLAGS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) FLAGS() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.FLAGS(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) FLAGS() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.FLAGS(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) FLAGL2SEQOFFLINE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "FLAG_L2_SEQ_OFFLINE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) FLAGL2SEQOFFLINE() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.FLAGL2SEQOFFLINE(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) FLAGL2SEQOFFLINE() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.FLAGL2SEQOFFLINE(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) AliasedL1MessageSender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "aliasedL1MessageSender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) AliasedL1MessageSender() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.AliasedL1MessageSender(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) AliasedL1MessageSender() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.AliasedL1MessageSender(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) CheckEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "checkEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) CheckEnabled() (bool, error) { + return _ArbitrumSequencerUptimeFeed.Contract.CheckEnabled(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) CheckEnabled() (bool, error) { + return _ArbitrumSequencerUptimeFeed.Contract.CheckEnabled(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) Decimals() (uint8, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Decimals(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) Decimals() (uint8, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Decimals(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) Description(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "description") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) Description() (string, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Description(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) Description() (string, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Description(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) GetAnswer(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "getAnswer", roundId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) GetAnswer(roundId *big.Int) (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.GetAnswer(&_ArbitrumSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) GetAnswer(roundId *big.Int) (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.GetAnswer(&_ArbitrumSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "getRoundData", _roundId) + + outstruct := new(GetRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _ArbitrumSequencerUptimeFeed.Contract.GetRoundData(&_ArbitrumSequencerUptimeFeed.CallOpts, _roundId) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _ArbitrumSequencerUptimeFeed.Contract.GetRoundData(&_ArbitrumSequencerUptimeFeed.CallOpts, _roundId) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) GetTimestamp(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "getTimestamp", roundId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) GetTimestamp(roundId *big.Int) (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.GetTimestamp(&_ArbitrumSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) GetTimestamp(roundId *big.Int) (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.GetTimestamp(&_ArbitrumSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) HasAccess(opts *bind.CallOpts, _user common.Address, _calldata []byte) (bool, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "hasAccess", _user, _calldata) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) HasAccess(_user common.Address, _calldata []byte) (bool, error) { + return _ArbitrumSequencerUptimeFeed.Contract.HasAccess(&_ArbitrumSequencerUptimeFeed.CallOpts, _user, _calldata) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) HasAccess(_user common.Address, _calldata []byte) (bool, error) { + return _ArbitrumSequencerUptimeFeed.Contract.HasAccess(&_ArbitrumSequencerUptimeFeed.CallOpts, _user, _calldata) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) L1Sender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "l1Sender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) L1Sender() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.L1Sender(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) L1Sender() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.L1Sender(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) LatestAnswer(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "latestAnswer") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) LatestAnswer() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestAnswer(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) LatestAnswer() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestAnswer(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) LatestRound(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "latestRound") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) LatestRound() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestRound(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) LatestRound() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestRound(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "latestRoundData") + + outstruct := new(LatestRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) LatestRoundData() (LatestRoundData, + + error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestRoundData(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) LatestRoundData() (LatestRoundData, + + error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestRoundData(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "latestTimestamp") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) LatestTimestamp() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestTimestamp(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) LatestTimestamp() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestTimestamp(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) Owner() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Owner(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) Owner() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Owner(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) TypeAndVersion() (string, error) { + return _ArbitrumSequencerUptimeFeed.Contract.TypeAndVersion(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) TypeAndVersion() (string, error) { + return _ArbitrumSequencerUptimeFeed.Contract.TypeAndVersion(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) Version(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "version") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) Version() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Version(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) Version() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Version(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "acceptOwnership") +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.AcceptOwnership(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.AcceptOwnership(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "addAccess", _user) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.AddAccess(&_ArbitrumSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.AddAccess(&_ArbitrumSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "disableAccessCheck") +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) DisableAccessCheck() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.DisableAccessCheck(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) DisableAccessCheck() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.DisableAccessCheck(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "enableAccessCheck") +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) EnableAccessCheck() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.EnableAccessCheck(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) EnableAccessCheck() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.EnableAccessCheck(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) Initialize(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "initialize") +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) Initialize() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Initialize(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) Initialize() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Initialize(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "removeAccess", _user) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.RemoveAccess(&_ArbitrumSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.RemoveAccess(&_ArbitrumSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) TransferL1Sender(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "transferL1Sender", to) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) TransferL1Sender(to common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.TransferL1Sender(&_ArbitrumSequencerUptimeFeed.TransactOpts, to) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) TransferL1Sender(to common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.TransferL1Sender(&_ArbitrumSequencerUptimeFeed.TransactOpts, to) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "transferOwnership", to) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.TransferOwnership(&_ArbitrumSequencerUptimeFeed.TransactOpts, to) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.TransferOwnership(&_ArbitrumSequencerUptimeFeed.TransactOpts, to) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) UpdateStatus(opts *bind.TransactOpts, status bool, timestamp uint64) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "updateStatus", status, timestamp) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) UpdateStatus(status bool, timestamp uint64) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.UpdateStatus(&_ArbitrumSequencerUptimeFeed.TransactOpts, status, timestamp) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) UpdateStatus(status bool, timestamp uint64) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.UpdateStatus(&_ArbitrumSequencerUptimeFeed.TransactOpts, status, timestamp) +} + +type ArbitrumSequencerUptimeFeedAddedAccessIterator struct { + Event *ArbitrumSequencerUptimeFeedAddedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedAddedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedAddedAccessIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedAddedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedAddedAccess struct { + User common.Address + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterAddedAccess(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedAddedAccessIterator, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedAddedAccessIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "AddedAccess", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedAddedAccess) (event.Subscription, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedAddedAccess) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseAddedAccess(log types.Log) (*ArbitrumSequencerUptimeFeedAddedAccess, error) { + event := new(ArbitrumSequencerUptimeFeedAddedAccess) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedAnswerUpdatedIterator struct { + Event *ArbitrumSequencerUptimeFeedAnswerUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedAnswerUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedAnswerUpdatedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedAnswerUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedAnswerUpdated struct { + Current *big.Int + RoundId *big.Int + UpdatedAt *big.Int + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*ArbitrumSequencerUptimeFeedAnswerUpdatedIterator, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedAnswerUpdatedIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "AnswerUpdated", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedAnswerUpdated) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "AnswerUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseAnswerUpdated(log types.Log) (*ArbitrumSequencerUptimeFeedAnswerUpdated, error) { + event := new(ArbitrumSequencerUptimeFeedAnswerUpdated) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "AnswerUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator struct { + Event *ArbitrumSequencerUptimeFeedCheckAccessDisabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedCheckAccessDisabled struct { + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "CheckAccessDisabled", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedCheckAccessDisabled) (event.Subscription, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedCheckAccessDisabled) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseCheckAccessDisabled(log types.Log) (*ArbitrumSequencerUptimeFeedCheckAccessDisabled, error) { + event := new(ArbitrumSequencerUptimeFeedCheckAccessDisabled) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator struct { + Event *ArbitrumSequencerUptimeFeedCheckAccessEnabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedCheckAccessEnabled struct { + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "CheckAccessEnabled", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedCheckAccessEnabled) (event.Subscription, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedCheckAccessEnabled) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseCheckAccessEnabled(log types.Log) (*ArbitrumSequencerUptimeFeedCheckAccessEnabled, error) { + event := new(ArbitrumSequencerUptimeFeedCheckAccessEnabled) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedInitializedIterator struct { + Event *ArbitrumSequencerUptimeFeedInitialized + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedInitializedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedInitializedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedInitialized struct { + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterInitialized(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedInitializedIterator, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedInitializedIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedInitialized) (event.Subscription, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedInitialized) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseInitialized(log types.Log) (*ArbitrumSequencerUptimeFeedInitialized, error) { + event := new(ArbitrumSequencerUptimeFeedInitialized) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedL1SenderTransferredIterator struct { + Event *ArbitrumSequencerUptimeFeedL1SenderTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedL1SenderTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedL1SenderTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedL1SenderTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedL1SenderTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedL1SenderTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedL1SenderTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterL1SenderTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumSequencerUptimeFeedL1SenderTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "L1SenderTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedL1SenderTransferredIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "L1SenderTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchL1SenderTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedL1SenderTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "L1SenderTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedL1SenderTransferred) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "L1SenderTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseL1SenderTransferred(log types.Log) (*ArbitrumSequencerUptimeFeedL1SenderTransferred, error) { + event := new(ArbitrumSequencerUptimeFeedL1SenderTransferred) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "L1SenderTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedNewRoundIterator struct { + Event *ArbitrumSequencerUptimeFeedNewRound + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedNewRoundIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedNewRoundIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedNewRoundIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedNewRound struct { + RoundId *big.Int + StartedBy common.Address + StartedAt *big.Int + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*ArbitrumSequencerUptimeFeedNewRoundIterator, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedNewRoundIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "NewRound", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchNewRound(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedNewRound) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "NewRound", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseNewRound(log types.Log) (*ArbitrumSequencerUptimeFeedNewRound, error) { + event := new(ArbitrumSequencerUptimeFeedNewRound) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "NewRound", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator struct { + Event *ArbitrumSequencerUptimeFeedOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedOwnershipTransferRequested) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseOwnershipTransferRequested(log types.Log) (*ArbitrumSequencerUptimeFeedOwnershipTransferRequested, error) { + event := new(ArbitrumSequencerUptimeFeedOwnershipTransferRequested) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedOwnershipTransferredIterator struct { + Event *ArbitrumSequencerUptimeFeedOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumSequencerUptimeFeedOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedOwnershipTransferredIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedOwnershipTransferred) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseOwnershipTransferred(log types.Log) (*ArbitrumSequencerUptimeFeedOwnershipTransferred, error) { + event := new(ArbitrumSequencerUptimeFeedOwnershipTransferred) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedRemovedAccessIterator struct { + Event *ArbitrumSequencerUptimeFeedRemovedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedRemovedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedRemovedAccessIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedRemovedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedRemovedAccess struct { + User common.Address + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterRemovedAccess(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedRemovedAccessIterator, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedRemovedAccessIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "RemovedAccess", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedRemovedAccess) (event.Subscription, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedRemovedAccess) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseRemovedAccess(log types.Log) (*ArbitrumSequencerUptimeFeedRemovedAccess, error) { + event := new(ArbitrumSequencerUptimeFeedRemovedAccess) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedUpdateIgnoredIterator struct { + Event *ArbitrumSequencerUptimeFeedUpdateIgnored + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedUpdateIgnoredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedUpdateIgnored) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedUpdateIgnored) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedUpdateIgnoredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedUpdateIgnoredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedUpdateIgnored struct { + LatestStatus bool + LatestTimestamp uint64 + IncomingStatus bool + IncomingTimestamp uint64 + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterUpdateIgnored(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedUpdateIgnoredIterator, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "UpdateIgnored") + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedUpdateIgnoredIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "UpdateIgnored", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchUpdateIgnored(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedUpdateIgnored) (event.Subscription, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "UpdateIgnored") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedUpdateIgnored) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "UpdateIgnored", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseUpdateIgnored(log types.Log) (*ArbitrumSequencerUptimeFeedUpdateIgnored, error) { + event := new(ArbitrumSequencerUptimeFeedUpdateIgnored) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "UpdateIgnored", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} +type LatestRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} + +func (ArbitrumSequencerUptimeFeedAddedAccess) Topic() common.Hash { + return common.HexToHash("0x87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db4") +} + +func (ArbitrumSequencerUptimeFeedAnswerUpdated) Topic() common.Hash { + return common.HexToHash("0x0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f") +} + +func (ArbitrumSequencerUptimeFeedCheckAccessDisabled) Topic() common.Hash { + return common.HexToHash("0x3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638") +} + +func (ArbitrumSequencerUptimeFeedCheckAccessEnabled) Topic() common.Hash { + return common.HexToHash("0xaebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480") +} + +func (ArbitrumSequencerUptimeFeedInitialized) Topic() common.Hash { + return common.HexToHash("0x5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c8") +} + +func (ArbitrumSequencerUptimeFeedL1SenderTransferred) Topic() common.Hash { + return common.HexToHash("0x8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18") +} + +func (ArbitrumSequencerUptimeFeedNewRound) Topic() common.Hash { + return common.HexToHash("0x0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271") +} + +func (ArbitrumSequencerUptimeFeedOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ArbitrumSequencerUptimeFeedOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (ArbitrumSequencerUptimeFeedRemovedAccess) Topic() common.Hash { + return common.HexToHash("0x3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d1") +} + +func (ArbitrumSequencerUptimeFeedUpdateIgnored) Topic() common.Hash { + return common.HexToHash("0xe4a6e16301740042c17431042adb8f60454c18fb5934dd4c456269c0dc388fdf") +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeed) Address() common.Address { + return _ArbitrumSequencerUptimeFeed.address +} + +type ArbitrumSequencerUptimeFeedInterface interface { + FLAGS(opts *bind.CallOpts) (common.Address, error) + + FLAGL2SEQOFFLINE(opts *bind.CallOpts) (common.Address, error) + + AliasedL1MessageSender(opts *bind.CallOpts) (common.Address, error) + + CheckEnabled(opts *bind.CallOpts) (bool, error) + + Decimals(opts *bind.CallOpts) (uint8, error) + + Description(opts *bind.CallOpts) (string, error) + + GetAnswer(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) + + GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) + + GetTimestamp(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) + + HasAccess(opts *bind.CallOpts, _user common.Address, _calldata []byte) (bool, error) + + L1Sender(opts *bind.CallOpts) (common.Address, error) + + LatestAnswer(opts *bind.CallOpts) (*big.Int, error) + + LatestRound(opts *bind.CallOpts) (*big.Int, error) + + LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) + + LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + Version(opts *bind.CallOpts) (*big.Int, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + Initialize(opts *bind.TransactOpts) (*types.Transaction, error) + + RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + TransferL1Sender(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + UpdateStatus(opts *bind.TransactOpts, status bool, timestamp uint64) (*types.Transaction, error) + + FilterAddedAccess(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedAddedAccessIterator, error) + + WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedAddedAccess) (event.Subscription, error) + + ParseAddedAccess(log types.Log) (*ArbitrumSequencerUptimeFeedAddedAccess, error) + + FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*ArbitrumSequencerUptimeFeedAnswerUpdatedIterator, error) + + WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) + + ParseAnswerUpdated(log types.Log) (*ArbitrumSequencerUptimeFeedAnswerUpdated, error) + + FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator, error) + + WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedCheckAccessDisabled) (event.Subscription, error) + + ParseCheckAccessDisabled(log types.Log) (*ArbitrumSequencerUptimeFeedCheckAccessDisabled, error) + + FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator, error) + + WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedCheckAccessEnabled) (event.Subscription, error) + + ParseCheckAccessEnabled(log types.Log) (*ArbitrumSequencerUptimeFeedCheckAccessEnabled, error) + + FilterInitialized(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedInitializedIterator, error) + + WatchInitialized(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedInitialized) (event.Subscription, error) + + ParseInitialized(log types.Log) (*ArbitrumSequencerUptimeFeedInitialized, error) + + FilterL1SenderTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumSequencerUptimeFeedL1SenderTransferredIterator, error) + + WatchL1SenderTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedL1SenderTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1SenderTransferred(log types.Log) (*ArbitrumSequencerUptimeFeedL1SenderTransferred, error) + + FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*ArbitrumSequencerUptimeFeedNewRoundIterator, error) + + WatchNewRound(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) + + ParseNewRound(log types.Log) (*ArbitrumSequencerUptimeFeedNewRound, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ArbitrumSequencerUptimeFeedOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumSequencerUptimeFeedOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ArbitrumSequencerUptimeFeedOwnershipTransferred, error) + + FilterRemovedAccess(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedRemovedAccessIterator, error) + + WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedRemovedAccess) (event.Subscription, error) + + ParseRemovedAccess(log types.Log) (*ArbitrumSequencerUptimeFeedRemovedAccess, error) + + FilterUpdateIgnored(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedUpdateIgnoredIterator, error) + + WatchUpdateIgnored(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedUpdateIgnored) (event.Subscription, error) + + ParseUpdateIgnored(log types.Log) (*ArbitrumSequencerUptimeFeedUpdateIgnored, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/latest/arbitrum_validator/arbitrum_validator.go b/gethwrappers/l2ep/generated/latest/arbitrum_validator/arbitrum_validator.go new file mode 100644 index 0000000000..de417106d5 --- /dev/null +++ b/gethwrappers/l2ep/generated/latest/arbitrum_validator/arbitrum_validator.go @@ -0,0 +1,2120 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package arbitrum_validator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ArbitrumValidatorGasConfig struct { + MaxGas *big.Int + GasPriceBid *big.Int + BaseFee *big.Int + GasPriceL1FeedAddr common.Address +} + +var ArbitrumValidatorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"crossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2ArbitrumSequencerUptimeFeedAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"configACAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPriceBid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"baseFee\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPriceL1FeedAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_paymentStrategy\",\"type\":\"uint8\",\"internalType\":\"enum ArbitrumValidator.PaymentStrategy\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"CROSS_DOMAIN_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_ALIAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_SEQ_STATUS_RECORDER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"configAC\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gasConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct ArbitrumValidator.GasConfig\",\"components\":[{\"name\":\"maxGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPriceBid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"baseFee\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPriceL1FeedAddr\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paymentStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enum ArbitrumValidator.PaymentStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConfigAC\",\"inputs\":[{\"name\":\"accessController\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"maxGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPriceBid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"baseFee\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPriceL1FeedAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPaymentStrategy\",\"inputs\":[{\"name\":\"_paymentStrategy\",\"type\":\"uint8\",\"internalType\":\"enum ArbitrumValidator.PaymentStrategy\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"validate\",\"inputs\":[{\"name\":\"previousRoundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"previousAnswer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"currentRoundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"currentAnswer\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawFunds\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawFundsFromL2\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"refundAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"id\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawFundsTo\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"addresspayable\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AddedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConfigACSet\",\"inputs\":[{\"name\":\"previous\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"current\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GasConfigSet\",\"inputs\":[{\"name\":\"maxGas\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasPriceBid\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasPriceL1FeedAddr\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L2WithdrawalRequested\",\"inputs\":[{\"name\":\"id\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"refundAddr\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PaymentStrategySet\",\"inputs\":[{\"name\":\"paymentStrategy\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enum ArbitrumValidator.PaymentStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemovedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatedStatus\",\"inputs\":[{\"name\":\"previousRoundId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"previousAnswer\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"currentRoundId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"currentAnswer\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"FailedCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBalance\",\"inputs\":[{\"name\":\"balance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + Bin: "0x60e060405273111100000000000000000000000000000000111130016001600160a01b031660c05234801562000033575f80fd5b50604051620021e3380380620021e3833981016040819052620000569162000532565b33805f81620000ac5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000de57620000de8162000219565b50506001805460ff60a01b1916600160a01b179055506001600160a01b038816620001565760405162461bcd60e51b815260206004820152602160248201527f496e76616c69642078446f6d61696e204d657373656e676572206164647265736044820152607360f81b6064820152608401620000a3565b6001600160a01b038716620001d45760405162461bcd60e51b815260206004820152603460248201527f496e76616c696420417262697472756d53657175656e636572557074696d654660448201527f65656420636f6e747261637420616464726573730000000000000000000000006064820152608401620000a3565b6001600160a01b03808916608052871660a052620001f286620002c3565b62000200858585856200032c565b6200020b81620004b0565b5050505050505050620005d4565b336001600160a01b03821603620002735760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620000a3565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6008546001600160a01b0390811690821681146200032857600880546001600160a01b0319166001600160a01b0384811691821790925560405190918316907f6b0ce63879b19fa36f93da30a36f44140d8c3c727b6c75a16165c2017037d2cc905f90a35b5050565b5f84116200036f5760405162461bcd60e51b815260206004820152600f60248201526e4d617820676173206973207a65726f60881b6044820152606401620000a3565b5f8311620003c05760405162461bcd60e51b815260206004820152601560248201527f47617320707269636520626964206973207a65726f00000000000000000000006044820152606401620000a3565b6001600160a01b038116620004245760405162461bcd60e51b8152602060048201526024808201527f4761732070726963652041676772656761746f72206973207a65726f206164646044820152637265737360e01b6064820152608401620000a3565b6040805160808101825285815260208082018690528183018590526001600160a01b0384166060909201829052600487905560058690556006859055600780546001600160a01b03191683179055825187815290810186905290917f35674f8e28e701bef8f072d1034d588998f6966a59806b4299f6749c86b269e3910160405180910390a250505050565b6003805482919060ff191660018381811115620004d157620004d1620005c0565b0217905550806001811115620004eb57620004eb620005c0565b6040517fcc19f6868f2a8f851b1b59973487a53f0ac827f88698345b1529ef7c77b22bb5905f90a250565b80516001600160a01b03811681146200052d575f80fd5b919050565b5f805f805f805f80610100898b0312156200054b575f80fd5b620005568962000516565b97506200056660208a0162000516565b96506200057660408a0162000516565b9550606089015194506080890151935060a089015192506200059b60c08a0162000516565b915060e089015160028110620005af575f80fd5b809150509295985092959890939650565b634e487b7160e01b5f52602160045260245ffd5b60805160a05160c051611bc1620006225f395f81816102b20152610f6401525f81816104c8015261100c01525f81816101cc015281816106a001528181610fcf015261130d0152611bc15ff3fe60806040526004361061017b575f3560e01c80636b14daf8116100d1578063a118f2491161007c578063bfb9d1ab11610057578063bfb9d1ab146104b7578063dc7f0124146104ea578063f2fde38b1461051b575f80fd5b8063a118f2491461045a578063a2e6e0eb14610479578063beed9b5114610498575f80fd5b80638823da6c116100ac5780638823da6c146103f35780638a67ad0f146104125780638da5cb5b14610431575f80fd5b80636b14daf81461039c57806379ba5097146103cb5780638038e4a1146103df575f80fd5b8063276bf08f11610131578063490a44321161010c578063490a4432146103015780635c178f371461035e5780635e521eca1461037d575f80fd5b8063276bf08f146102775780633e48f015146102a157806344c2fa0c146102d4575f80fd5b806316be836c1161016157806316be836c146101bb578063181f5a771461021857806324600fc314610263575f80fd5b806302163e6c146101865780630a756983146101a7575f80fd5b3661018257005b5f80fd5b348015610191575f80fd5b506101a56101a036600461179a565b61053a565b005b3480156101b2575f80fd5b506101a561054e565b3480156101c6575f80fd5b506101ee7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610223575f80fd5b50604080518082018252601b81527f417262697472756d56616c696461746f7220322e312e302d64657600000000006020820152905161020f9190611816565b34801561026e575f80fd5b506101a56105cc565b348015610282575f80fd5b5060085473ffffffffffffffffffffffffffffffffffffffff166101ee565b3480156102ac575f80fd5b506101ee7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102df575f80fd5b506102f36102ee366004611828565b6105e4565b60405190815260200161020f565b34801561030c575f80fd5b506103156107a7565b60405161020f919081518152602080830151908201526040808301519082015260609182015173ffffffffffffffffffffffffffffffffffffffff169181019190915260800190565b348015610369575f80fd5b506101a5610378366004611856565b610827565b348015610388575f80fd5b5060035460ff1660405161020f91906118c1565b3480156103a7575f80fd5b506103bb6103b636600461192d565b61097f565b604051901515815260200161020f565b3480156103d6575f80fd5b506101a56109d4565b3480156103ea575f80fd5b506101a5610ad0565b3480156103fe575f80fd5b506101a561040d36600461179a565b610b63565b34801561041d575f80fd5b506101a561042c366004611a09565b610c1a565b34801561043c575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166101ee565b348015610465575f80fd5b506101a561047436600461179a565b610d64565b348015610484575f80fd5b506101a561049336600461179a565b610e16565b3480156104a3575f80fd5b506103bb6104b2366004611a27565b610e29565b3480156104c2575f80fd5b506101ee7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f5575f80fd5b506001546103bb9074010000000000000000000000000000000000000000900460ff1681565b348015610526575f80fd5b506101a561053536600461179a565b6110f5565b610542611106565b61054b81611186565b50565b610556611106565b60015474010000000000000000000000000000000000000000900460ff16156105ca57600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638905f90a15b565b6105d4611106565b33476105e0828261121f565b5050565b5f6105ed611106565b60408051306024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f25e160630000000000000000000000000000000000000000000000000000000017905280515f90610662906112d1565b6005549091506201d4c0905f8060035460ff16600181111561068657610686611894565b14610691575f61069c565b61069c84848461138b565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631b871c8d8260648b888c8d8a8a8e6040518a63ffffffff1660e01b8152600401610707989796959493929190611a56565b60206040518083038185885af1158015610723573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906107489190611abe565b95508673ffffffffffffffffffffffffffffffffffffffff16867f06f76b16d832d9e442e96306c36f3f2a819b64bd28441aa14fef67308a95c7168a60405161079391815260200190565b60405180910390a350505050505b92915050565b6107e460405180608001604052805f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b5060408051608081018252600454815260055460208201526006549181019190915260075473ffffffffffffffffffffffffffffffffffffffff16606082015290565b5f5473ffffffffffffffffffffffffffffffffffffffff16331480610902575060085473ffffffffffffffffffffffffffffffffffffffff161580159061090257506008546040517f6b14daf800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690636b14daf8906108c39033905f903690600401611ad5565b602060405180830381865afa1580156108de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109029190611b3e565b61096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b610979848484846113a0565b50505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081205460ff16806109cd575060015474010000000000000000000000000000000000000000900460ff16155b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610a55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610964565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610ad8611106565b60015474010000000000000000000000000000000000000000900460ff166105ca57600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480905f90a1565b610b6b611106565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff161561054b5773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d191015b60405180910390a150565b5f5473ffffffffffffffffffffffffffffffffffffffff16331480610cf5575060085473ffffffffffffffffffffffffffffffffffffffff1615801590610cf557506008546040517f6b14daf800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690636b14daf890610cb69033905f903690600401611ad5565b602060405180830381865afa158015610cd1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf59190611b3e565b610d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f2061636365737300000000000000000000000000000000000000000000006044820152606401610964565b61054b816115c5565b610d6c611106565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff1661054b5773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49101610c0f565b610e1e611106565b476105e0828261121f565b5f610e69335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097f92505050565b610ecf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f2061636365737300000000000000000000000000000000000000000000006044820152606401610964565b818403610ede575060016110ed565b60408051600184146024820181905267ffffffffffffffff429081166044808501919091528451808503909101815260649093019093526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fed8378f50000000000000000000000000000000000000000000000000000000090811790915282517f0000000000000000000000000000000000000000000000000000000000000000949193905f90610f92906112d1565b600454600554919250905f8060035460ff166001811115610fb557610fb5611894565b14610fc0575f610fcb565b610fcb84848461138b565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631b871c8d827f00000000000000000000000000000000000000000000000000000000000000005f888e8f8a8a8e6040518a63ffffffff1660e01b8152600401611055989796959493929190611a56565b60206040518083038185885af1158015611071573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906110969190611abe565b50604080518f8152602081018f90529081018d9052606081018c90527fdf570e5bda6b7c0c0415ceeafd5f9321908b69023cae41e030a6df91cad90b039060800160405180910390a1600199505050505050505050505b949350505050565b6110fd611106565b61054b81611643565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146105ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610964565b60085473ffffffffffffffffffffffffffffffffffffffff90811690821681146105e057600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691821790925560405190918316907f6b0ce63879b19fa36f93da30a36f44140d8c3c727b6c75a16165c2017037d2cc905f90a35050565b80471015611262576040517fcf47918100000000000000000000000000000000000000000000000000000000815247600482015260248101829052604401610964565b5f808373ffffffffffffffffffffffffffffffffffffffff16836040515f6040518083038185875af1925050503d805f81146112b9576040519150601f19603f3d011682016040523d82523d5f602084013e6112be565b606091505b5091509150816109795761097981611737565b6006546040517fa66b327d0000000000000000000000000000000000000000000000000000000081526004810183905260248101919091525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a66b327d90604401602060405180830381865afa158015611367573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a19190611abe565b5f6113968284611b8a565b6110ed9085611ba1565b5f8411611409576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d617820676173206973207a65726f00000000000000000000000000000000006044820152606401610964565b5f8311611472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f47617320707269636520626964206973207a65726f00000000000000000000006044820152606401610964565b73ffffffffffffffffffffffffffffffffffffffff8116611514576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4761732070726963652041676772656761746f72206973207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610964565b60408051608081018252858152602080820186905281830185905273ffffffffffffffffffffffffffffffffffffffff84166060909201829052600487905560058690556006859055600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001683179055825187815290810186905290917f35674f8e28e701bef8f072d1034d588998f6966a59806b4299f6749c86b269e3910160405180910390a250505050565b600380548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001838181111561160157611601611894565b021790555080600181111561161857611618611894565b6040517fcc19f6868f2a8f851b1b59973487a53f0ac827f88698345b1529ef7c77b22bb5905f90a250565b3373ffffffffffffffffffffffffffffffffffffffff8216036116c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610964565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b8051156117475780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116811461054b575f80fd5b5f602082840312156117aa575f80fd5b81356109cd81611779565b5f81518084525f5b818110156117d9576020818501810151868301820152016117bd565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6109cd60208301846117b5565b5f8060408385031215611839575f80fd5b82359150602083013561184b81611779565b809150509250929050565b5f805f8060808587031215611869575f80fd5b843593506020850135925060408501359150606085013561188981611779565b939692955090935050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60208101600283106118fa577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f806040838503121561193e575f80fd5b823561194981611779565b9150602083013567ffffffffffffffff80821115611965575f80fd5b818501915085601f830112611978575f80fd5b81358181111561198a5761198a611900565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156119d0576119d0611900565b816040528281528860208487010111156119e8575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215611a19575f80fd5b8135600281106109cd575f80fd5b5f805f8060808587031215611a3a575f80fd5b5050823594602084013594506040840135936060013592509050565b5f61010073ffffffffffffffffffffffffffffffffffffffff808c1684528a602085015289604085015280891660608501528088166080850152508560a08401528460c08401528060e0840152611aaf818401856117b5565b9b9a5050505050505050505050565b5f60208284031215611ace575f80fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b5f60208284031215611b4e575f80fd5b815180151581146109cd575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820281158282048414176107a1576107a1611b5d565b808201808211156107a1576107a1611b5d56fea164736f6c6343000818000a", +} + +var ArbitrumValidatorABI = ArbitrumValidatorMetaData.ABI + +var ArbitrumValidatorBin = ArbitrumValidatorMetaData.Bin + +func DeployArbitrumValidator(auth *bind.TransactOpts, backend bind.ContractBackend, crossDomainMessengerAddr common.Address, l2ArbitrumSequencerUptimeFeedAddr common.Address, configACAddr common.Address, maxGas *big.Int, gasPriceBid *big.Int, baseFee *big.Int, gasPriceL1FeedAddr common.Address, _paymentStrategy uint8) (common.Address, *types.Transaction, *ArbitrumValidator, error) { + parsed, err := ArbitrumValidatorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ArbitrumValidatorBin), backend, crossDomainMessengerAddr, l2ArbitrumSequencerUptimeFeedAddr, configACAddr, maxGas, gasPriceBid, baseFee, gasPriceL1FeedAddr, _paymentStrategy) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ArbitrumValidator{address: address, abi: *parsed, ArbitrumValidatorCaller: ArbitrumValidatorCaller{contract: contract}, ArbitrumValidatorTransactor: ArbitrumValidatorTransactor{contract: contract}, ArbitrumValidatorFilterer: ArbitrumValidatorFilterer{contract: contract}}, nil +} + +type ArbitrumValidator struct { + address common.Address + abi abi.ABI + ArbitrumValidatorCaller + ArbitrumValidatorTransactor + ArbitrumValidatorFilterer +} + +type ArbitrumValidatorCaller struct { + contract *bind.BoundContract +} + +type ArbitrumValidatorTransactor struct { + contract *bind.BoundContract +} + +type ArbitrumValidatorFilterer struct { + contract *bind.BoundContract +} + +type ArbitrumValidatorSession struct { + Contract *ArbitrumValidator + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ArbitrumValidatorCallerSession struct { + Contract *ArbitrumValidatorCaller + CallOpts bind.CallOpts +} + +type ArbitrumValidatorTransactorSession struct { + Contract *ArbitrumValidatorTransactor + TransactOpts bind.TransactOpts +} + +type ArbitrumValidatorRaw struct { + Contract *ArbitrumValidator +} + +type ArbitrumValidatorCallerRaw struct { + Contract *ArbitrumValidatorCaller +} + +type ArbitrumValidatorTransactorRaw struct { + Contract *ArbitrumValidatorTransactor +} + +func NewArbitrumValidator(address common.Address, backend bind.ContractBackend) (*ArbitrumValidator, error) { + abi, err := abi.JSON(strings.NewReader(ArbitrumValidatorABI)) + if err != nil { + return nil, err + } + contract, err := bindArbitrumValidator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ArbitrumValidator{address: address, abi: abi, ArbitrumValidatorCaller: ArbitrumValidatorCaller{contract: contract}, ArbitrumValidatorTransactor: ArbitrumValidatorTransactor{contract: contract}, ArbitrumValidatorFilterer: ArbitrumValidatorFilterer{contract: contract}}, nil +} + +func NewArbitrumValidatorCaller(address common.Address, caller bind.ContractCaller) (*ArbitrumValidatorCaller, error) { + contract, err := bindArbitrumValidator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ArbitrumValidatorCaller{contract: contract}, nil +} + +func NewArbitrumValidatorTransactor(address common.Address, transactor bind.ContractTransactor) (*ArbitrumValidatorTransactor, error) { + contract, err := bindArbitrumValidator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ArbitrumValidatorTransactor{contract: contract}, nil +} + +func NewArbitrumValidatorFilterer(address common.Address, filterer bind.ContractFilterer) (*ArbitrumValidatorFilterer, error) { + contract, err := bindArbitrumValidator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ArbitrumValidatorFilterer{contract: contract}, nil +} + +func bindArbitrumValidator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ArbitrumValidatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumValidator.Contract.ArbitrumValidatorCaller.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumValidator *ArbitrumValidatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.ArbitrumValidatorTransactor.contract.Transfer(opts) +} + +func (_ArbitrumValidator *ArbitrumValidatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.ArbitrumValidatorTransactor.contract.Transact(opts, method, params...) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumValidator.Contract.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.contract.Transfer(opts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.contract.Transact(opts, method, params...) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) CROSSDOMAINMESSENGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "CROSS_DOMAIN_MESSENGER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) CROSSDOMAINMESSENGER() (common.Address, error) { + return _ArbitrumValidator.Contract.CROSSDOMAINMESSENGER(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) CROSSDOMAINMESSENGER() (common.Address, error) { + return _ArbitrumValidator.Contract.CROSSDOMAINMESSENGER(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) L2ALIAS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "L2_ALIAS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) L2ALIAS() (common.Address, error) { + return _ArbitrumValidator.Contract.L2ALIAS(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) L2ALIAS() (common.Address, error) { + return _ArbitrumValidator.Contract.L2ALIAS(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) L2SEQSTATUSRECORDER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "L2_SEQ_STATUS_RECORDER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) L2SEQSTATUSRECORDER() (common.Address, error) { + return _ArbitrumValidator.Contract.L2SEQSTATUSRECORDER(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) L2SEQSTATUSRECORDER() (common.Address, error) { + return _ArbitrumValidator.Contract.L2SEQSTATUSRECORDER(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) CheckEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "checkEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) CheckEnabled() (bool, error) { + return _ArbitrumValidator.Contract.CheckEnabled(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) CheckEnabled() (bool, error) { + return _ArbitrumValidator.Contract.CheckEnabled(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) ConfigAC(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "configAC") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) ConfigAC() (common.Address, error) { + return _ArbitrumValidator.Contract.ConfigAC(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) ConfigAC() (common.Address, error) { + return _ArbitrumValidator.Contract.ConfigAC(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) GasConfig(opts *bind.CallOpts) (ArbitrumValidatorGasConfig, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "gasConfig") + + if err != nil { + return *new(ArbitrumValidatorGasConfig), err + } + + out0 := *abi.ConvertType(out[0], new(ArbitrumValidatorGasConfig)).(*ArbitrumValidatorGasConfig) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) GasConfig() (ArbitrumValidatorGasConfig, error) { + return _ArbitrumValidator.Contract.GasConfig(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) GasConfig() (ArbitrumValidatorGasConfig, error) { + return _ArbitrumValidator.Contract.GasConfig(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) HasAccess(opts *bind.CallOpts, _user common.Address, arg1 []byte) (bool, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "hasAccess", _user, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) HasAccess(_user common.Address, arg1 []byte) (bool, error) { + return _ArbitrumValidator.Contract.HasAccess(&_ArbitrumValidator.CallOpts, _user, arg1) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) HasAccess(_user common.Address, arg1 []byte) (bool, error) { + return _ArbitrumValidator.Contract.HasAccess(&_ArbitrumValidator.CallOpts, _user, arg1) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) Owner() (common.Address, error) { + return _ArbitrumValidator.Contract.Owner(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) Owner() (common.Address, error) { + return _ArbitrumValidator.Contract.Owner(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) PaymentStrategy(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "paymentStrategy") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) PaymentStrategy() (uint8, error) { + return _ArbitrumValidator.Contract.PaymentStrategy(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) PaymentStrategy() (uint8, error) { + return _ArbitrumValidator.Contract.PaymentStrategy(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) TypeAndVersion() (string, error) { + return _ArbitrumValidator.Contract.TypeAndVersion(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) TypeAndVersion() (string, error) { + return _ArbitrumValidator.Contract.TypeAndVersion(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "acceptOwnership") +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.AcceptOwnership(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.AcceptOwnership(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "addAccess", _user) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.AddAccess(&_ArbitrumValidator.TransactOpts, _user) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.AddAccess(&_ArbitrumValidator.TransactOpts, _user) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "disableAccessCheck") +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) DisableAccessCheck() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.DisableAccessCheck(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) DisableAccessCheck() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.DisableAccessCheck(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "enableAccessCheck") +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) EnableAccessCheck() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.EnableAccessCheck(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) EnableAccessCheck() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.EnableAccessCheck(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "removeAccess", _user) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.RemoveAccess(&_ArbitrumValidator.TransactOpts, _user) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.RemoveAccess(&_ArbitrumValidator.TransactOpts, _user) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) SetConfigAC(opts *bind.TransactOpts, accessController common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "setConfigAC", accessController) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) SetConfigAC(accessController common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.SetConfigAC(&_ArbitrumValidator.TransactOpts, accessController) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) SetConfigAC(accessController common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.SetConfigAC(&_ArbitrumValidator.TransactOpts, accessController) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) SetGasConfig(opts *bind.TransactOpts, maxGas *big.Int, gasPriceBid *big.Int, baseFee *big.Int, gasPriceL1FeedAddr common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "setGasConfig", maxGas, gasPriceBid, baseFee, gasPriceL1FeedAddr) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) SetGasConfig(maxGas *big.Int, gasPriceBid *big.Int, baseFee *big.Int, gasPriceL1FeedAddr common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.SetGasConfig(&_ArbitrumValidator.TransactOpts, maxGas, gasPriceBid, baseFee, gasPriceL1FeedAddr) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) SetGasConfig(maxGas *big.Int, gasPriceBid *big.Int, baseFee *big.Int, gasPriceL1FeedAddr common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.SetGasConfig(&_ArbitrumValidator.TransactOpts, maxGas, gasPriceBid, baseFee, gasPriceL1FeedAddr) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) SetPaymentStrategy(opts *bind.TransactOpts, _paymentStrategy uint8) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "setPaymentStrategy", _paymentStrategy) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) SetPaymentStrategy(_paymentStrategy uint8) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.SetPaymentStrategy(&_ArbitrumValidator.TransactOpts, _paymentStrategy) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) SetPaymentStrategy(_paymentStrategy uint8) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.SetPaymentStrategy(&_ArbitrumValidator.TransactOpts, _paymentStrategy) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "transferOwnership", to) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.TransferOwnership(&_ArbitrumValidator.TransactOpts, to) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.TransferOwnership(&_ArbitrumValidator.TransactOpts, to) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) Validate(opts *bind.TransactOpts, previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "validate", previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) Validate(previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.Validate(&_ArbitrumValidator.TransactOpts, previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) Validate(previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.Validate(&_ArbitrumValidator.TransactOpts, previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) WithdrawFunds(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "withdrawFunds") +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) WithdrawFunds() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.WithdrawFunds(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) WithdrawFunds() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.WithdrawFunds(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) WithdrawFundsFromL2(opts *bind.TransactOpts, amount *big.Int, refundAddr common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "withdrawFundsFromL2", amount, refundAddr) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) WithdrawFundsFromL2(amount *big.Int, refundAddr common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.WithdrawFundsFromL2(&_ArbitrumValidator.TransactOpts, amount, refundAddr) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) WithdrawFundsFromL2(amount *big.Int, refundAddr common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.WithdrawFundsFromL2(&_ArbitrumValidator.TransactOpts, amount, refundAddr) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) WithdrawFundsTo(opts *bind.TransactOpts, recipient common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "withdrawFundsTo", recipient) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) WithdrawFundsTo(recipient common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.WithdrawFundsTo(&_ArbitrumValidator.TransactOpts, recipient) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) WithdrawFundsTo(recipient common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.WithdrawFundsTo(&_ArbitrumValidator.TransactOpts, recipient) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.contract.RawTransact(opts, nil) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) Receive() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.Receive(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) Receive() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.Receive(&_ArbitrumValidator.TransactOpts) +} + +type ArbitrumValidatorAddedAccessIterator struct { + Event *ArbitrumValidatorAddedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorAddedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorAddedAccessIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorAddedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorAddedAccess struct { + User common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterAddedAccess(opts *bind.FilterOpts) (*ArbitrumValidatorAddedAccessIterator, error) { + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return &ArbitrumValidatorAddedAccessIterator{contract: _ArbitrumValidator.contract, event: "AddedAccess", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorAddedAccess) (event.Subscription, error) { + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorAddedAccess) + if err := _ArbitrumValidator.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseAddedAccess(log types.Log) (*ArbitrumValidatorAddedAccess, error) { + event := new(ArbitrumValidatorAddedAccess) + if err := _ArbitrumValidator.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorCheckAccessDisabledIterator struct { + Event *ArbitrumValidatorCheckAccessDisabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorCheckAccessDisabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorCheckAccessDisabledIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorCheckAccessDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorCheckAccessDisabled struct { + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ArbitrumValidatorCheckAccessDisabledIterator, error) { + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return &ArbitrumValidatorCheckAccessDisabledIterator{contract: _ArbitrumValidator.contract, event: "CheckAccessDisabled", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorCheckAccessDisabled) (event.Subscription, error) { + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorCheckAccessDisabled) + if err := _ArbitrumValidator.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseCheckAccessDisabled(log types.Log) (*ArbitrumValidatorCheckAccessDisabled, error) { + event := new(ArbitrumValidatorCheckAccessDisabled) + if err := _ArbitrumValidator.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorCheckAccessEnabledIterator struct { + Event *ArbitrumValidatorCheckAccessEnabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorCheckAccessEnabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorCheckAccessEnabledIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorCheckAccessEnabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorCheckAccessEnabled struct { + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ArbitrumValidatorCheckAccessEnabledIterator, error) { + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return &ArbitrumValidatorCheckAccessEnabledIterator{contract: _ArbitrumValidator.contract, event: "CheckAccessEnabled", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorCheckAccessEnabled) (event.Subscription, error) { + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorCheckAccessEnabled) + if err := _ArbitrumValidator.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseCheckAccessEnabled(log types.Log) (*ArbitrumValidatorCheckAccessEnabled, error) { + event := new(ArbitrumValidatorCheckAccessEnabled) + if err := _ArbitrumValidator.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorConfigACSetIterator struct { + Event *ArbitrumValidatorConfigACSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorConfigACSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorConfigACSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorConfigACSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorConfigACSetIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorConfigACSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorConfigACSet struct { + Previous common.Address + Current common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterConfigACSet(opts *bind.FilterOpts, previous []common.Address, current []common.Address) (*ArbitrumValidatorConfigACSetIterator, error) { + + var previousRule []interface{} + for _, previousItem := range previous { + previousRule = append(previousRule, previousItem) + } + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "ConfigACSet", previousRule, currentRule) + if err != nil { + return nil, err + } + return &ArbitrumValidatorConfigACSetIterator{contract: _ArbitrumValidator.contract, event: "ConfigACSet", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchConfigACSet(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorConfigACSet, previous []common.Address, current []common.Address) (event.Subscription, error) { + + var previousRule []interface{} + for _, previousItem := range previous { + previousRule = append(previousRule, previousItem) + } + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "ConfigACSet", previousRule, currentRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorConfigACSet) + if err := _ArbitrumValidator.contract.UnpackLog(event, "ConfigACSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseConfigACSet(log types.Log) (*ArbitrumValidatorConfigACSet, error) { + event := new(ArbitrumValidatorConfigACSet) + if err := _ArbitrumValidator.contract.UnpackLog(event, "ConfigACSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorGasConfigSetIterator struct { + Event *ArbitrumValidatorGasConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorGasConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorGasConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorGasConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorGasConfigSetIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorGasConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorGasConfigSet struct { + MaxGas *big.Int + GasPriceBid *big.Int + GasPriceL1FeedAddr common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterGasConfigSet(opts *bind.FilterOpts, gasPriceL1FeedAddr []common.Address) (*ArbitrumValidatorGasConfigSetIterator, error) { + + var gasPriceL1FeedAddrRule []interface{} + for _, gasPriceL1FeedAddrItem := range gasPriceL1FeedAddr { + gasPriceL1FeedAddrRule = append(gasPriceL1FeedAddrRule, gasPriceL1FeedAddrItem) + } + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "GasConfigSet", gasPriceL1FeedAddrRule) + if err != nil { + return nil, err + } + return &ArbitrumValidatorGasConfigSetIterator{contract: _ArbitrumValidator.contract, event: "GasConfigSet", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchGasConfigSet(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorGasConfigSet, gasPriceL1FeedAddr []common.Address) (event.Subscription, error) { + + var gasPriceL1FeedAddrRule []interface{} + for _, gasPriceL1FeedAddrItem := range gasPriceL1FeedAddr { + gasPriceL1FeedAddrRule = append(gasPriceL1FeedAddrRule, gasPriceL1FeedAddrItem) + } + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "GasConfigSet", gasPriceL1FeedAddrRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorGasConfigSet) + if err := _ArbitrumValidator.contract.UnpackLog(event, "GasConfigSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseGasConfigSet(log types.Log) (*ArbitrumValidatorGasConfigSet, error) { + event := new(ArbitrumValidatorGasConfigSet) + if err := _ArbitrumValidator.contract.UnpackLog(event, "GasConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorL2WithdrawalRequestedIterator struct { + Event *ArbitrumValidatorL2WithdrawalRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorL2WithdrawalRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorL2WithdrawalRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorL2WithdrawalRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorL2WithdrawalRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorL2WithdrawalRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorL2WithdrawalRequested struct { + Id *big.Int + Amount *big.Int + RefundAddr common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterL2WithdrawalRequested(opts *bind.FilterOpts, id []*big.Int, refundAddr []common.Address) (*ArbitrumValidatorL2WithdrawalRequestedIterator, error) { + + var idRule []interface{} + for _, idItem := range id { + idRule = append(idRule, idItem) + } + + var refundAddrRule []interface{} + for _, refundAddrItem := range refundAddr { + refundAddrRule = append(refundAddrRule, refundAddrItem) + } + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "L2WithdrawalRequested", idRule, refundAddrRule) + if err != nil { + return nil, err + } + return &ArbitrumValidatorL2WithdrawalRequestedIterator{contract: _ArbitrumValidator.contract, event: "L2WithdrawalRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchL2WithdrawalRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorL2WithdrawalRequested, id []*big.Int, refundAddr []common.Address) (event.Subscription, error) { + + var idRule []interface{} + for _, idItem := range id { + idRule = append(idRule, idItem) + } + + var refundAddrRule []interface{} + for _, refundAddrItem := range refundAddr { + refundAddrRule = append(refundAddrRule, refundAddrItem) + } + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "L2WithdrawalRequested", idRule, refundAddrRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorL2WithdrawalRequested) + if err := _ArbitrumValidator.contract.UnpackLog(event, "L2WithdrawalRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseL2WithdrawalRequested(log types.Log) (*ArbitrumValidatorL2WithdrawalRequested, error) { + event := new(ArbitrumValidatorL2WithdrawalRequested) + if err := _ArbitrumValidator.contract.UnpackLog(event, "L2WithdrawalRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorOwnershipTransferRequestedIterator struct { + Event *ArbitrumValidatorOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumValidatorOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumValidatorOwnershipTransferRequestedIterator{contract: _ArbitrumValidator.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorOwnershipTransferRequested) + if err := _ArbitrumValidator.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseOwnershipTransferRequested(log types.Log) (*ArbitrumValidatorOwnershipTransferRequested, error) { + event := new(ArbitrumValidatorOwnershipTransferRequested) + if err := _ArbitrumValidator.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorOwnershipTransferredIterator struct { + Event *ArbitrumValidatorOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumValidatorOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumValidatorOwnershipTransferredIterator{contract: _ArbitrumValidator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorOwnershipTransferred) + if err := _ArbitrumValidator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseOwnershipTransferred(log types.Log) (*ArbitrumValidatorOwnershipTransferred, error) { + event := new(ArbitrumValidatorOwnershipTransferred) + if err := _ArbitrumValidator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorPaymentStrategySetIterator struct { + Event *ArbitrumValidatorPaymentStrategySet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorPaymentStrategySetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorPaymentStrategySet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorPaymentStrategySet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorPaymentStrategySetIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorPaymentStrategySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorPaymentStrategySet struct { + PaymentStrategy uint8 + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterPaymentStrategySet(opts *bind.FilterOpts, paymentStrategy []uint8) (*ArbitrumValidatorPaymentStrategySetIterator, error) { + + var paymentStrategyRule []interface{} + for _, paymentStrategyItem := range paymentStrategy { + paymentStrategyRule = append(paymentStrategyRule, paymentStrategyItem) + } + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "PaymentStrategySet", paymentStrategyRule) + if err != nil { + return nil, err + } + return &ArbitrumValidatorPaymentStrategySetIterator{contract: _ArbitrumValidator.contract, event: "PaymentStrategySet", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchPaymentStrategySet(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorPaymentStrategySet, paymentStrategy []uint8) (event.Subscription, error) { + + var paymentStrategyRule []interface{} + for _, paymentStrategyItem := range paymentStrategy { + paymentStrategyRule = append(paymentStrategyRule, paymentStrategyItem) + } + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "PaymentStrategySet", paymentStrategyRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorPaymentStrategySet) + if err := _ArbitrumValidator.contract.UnpackLog(event, "PaymentStrategySet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParsePaymentStrategySet(log types.Log) (*ArbitrumValidatorPaymentStrategySet, error) { + event := new(ArbitrumValidatorPaymentStrategySet) + if err := _ArbitrumValidator.contract.UnpackLog(event, "PaymentStrategySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorRemovedAccessIterator struct { + Event *ArbitrumValidatorRemovedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorRemovedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorRemovedAccessIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorRemovedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorRemovedAccess struct { + User common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterRemovedAccess(opts *bind.FilterOpts) (*ArbitrumValidatorRemovedAccessIterator, error) { + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return &ArbitrumValidatorRemovedAccessIterator{contract: _ArbitrumValidator.contract, event: "RemovedAccess", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorRemovedAccess) (event.Subscription, error) { + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorRemovedAccess) + if err := _ArbitrumValidator.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseRemovedAccess(log types.Log) (*ArbitrumValidatorRemovedAccess, error) { + event := new(ArbitrumValidatorRemovedAccess) + if err := _ArbitrumValidator.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorValidatedStatusIterator struct { + Event *ArbitrumValidatorValidatedStatus + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorValidatedStatusIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorValidatedStatus) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorValidatedStatus) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorValidatedStatusIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorValidatedStatusIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorValidatedStatus struct { + PreviousRoundId *big.Int + PreviousAnswer *big.Int + CurrentRoundId *big.Int + CurrentAnswer *big.Int + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterValidatedStatus(opts *bind.FilterOpts) (*ArbitrumValidatorValidatedStatusIterator, error) { + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "ValidatedStatus") + if err != nil { + return nil, err + } + return &ArbitrumValidatorValidatedStatusIterator{contract: _ArbitrumValidator.contract, event: "ValidatedStatus", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchValidatedStatus(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorValidatedStatus) (event.Subscription, error) { + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "ValidatedStatus") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorValidatedStatus) + if err := _ArbitrumValidator.contract.UnpackLog(event, "ValidatedStatus", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseValidatedStatus(log types.Log) (*ArbitrumValidatorValidatedStatus, error) { + event := new(ArbitrumValidatorValidatedStatus) + if err := _ArbitrumValidator.contract.UnpackLog(event, "ValidatedStatus", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (ArbitrumValidatorAddedAccess) Topic() common.Hash { + return common.HexToHash("0x87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db4") +} + +func (ArbitrumValidatorCheckAccessDisabled) Topic() common.Hash { + return common.HexToHash("0x3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638") +} + +func (ArbitrumValidatorCheckAccessEnabled) Topic() common.Hash { + return common.HexToHash("0xaebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480") +} + +func (ArbitrumValidatorConfigACSet) Topic() common.Hash { + return common.HexToHash("0x6b0ce63879b19fa36f93da30a36f44140d8c3c727b6c75a16165c2017037d2cc") +} + +func (ArbitrumValidatorGasConfigSet) Topic() common.Hash { + return common.HexToHash("0x35674f8e28e701bef8f072d1034d588998f6966a59806b4299f6749c86b269e3") +} + +func (ArbitrumValidatorL2WithdrawalRequested) Topic() common.Hash { + return common.HexToHash("0x06f76b16d832d9e442e96306c36f3f2a819b64bd28441aa14fef67308a95c716") +} + +func (ArbitrumValidatorOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ArbitrumValidatorOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (ArbitrumValidatorPaymentStrategySet) Topic() common.Hash { + return common.HexToHash("0xcc19f6868f2a8f851b1b59973487a53f0ac827f88698345b1529ef7c77b22bb5") +} + +func (ArbitrumValidatorRemovedAccess) Topic() common.Hash { + return common.HexToHash("0x3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d1") +} + +func (ArbitrumValidatorValidatedStatus) Topic() common.Hash { + return common.HexToHash("0xdf570e5bda6b7c0c0415ceeafd5f9321908b69023cae41e030a6df91cad90b03") +} + +func (_ArbitrumValidator *ArbitrumValidator) Address() common.Address { + return _ArbitrumValidator.address +} + +type ArbitrumValidatorInterface interface { + CROSSDOMAINMESSENGER(opts *bind.CallOpts) (common.Address, error) + + L2ALIAS(opts *bind.CallOpts) (common.Address, error) + + L2SEQSTATUSRECORDER(opts *bind.CallOpts) (common.Address, error) + + CheckEnabled(opts *bind.CallOpts) (bool, error) + + ConfigAC(opts *bind.CallOpts) (common.Address, error) + + GasConfig(opts *bind.CallOpts) (ArbitrumValidatorGasConfig, error) + + HasAccess(opts *bind.CallOpts, _user common.Address, arg1 []byte) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + PaymentStrategy(opts *bind.CallOpts) (uint8, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + SetConfigAC(opts *bind.TransactOpts, accessController common.Address) (*types.Transaction, error) + + SetGasConfig(opts *bind.TransactOpts, maxGas *big.Int, gasPriceBid *big.Int, baseFee *big.Int, gasPriceL1FeedAddr common.Address) (*types.Transaction, error) + + SetPaymentStrategy(opts *bind.TransactOpts, _paymentStrategy uint8) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + Validate(opts *bind.TransactOpts, previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) + + WithdrawFunds(opts *bind.TransactOpts) (*types.Transaction, error) + + WithdrawFundsFromL2(opts *bind.TransactOpts, amount *big.Int, refundAddr common.Address) (*types.Transaction, error) + + WithdrawFundsTo(opts *bind.TransactOpts, recipient common.Address) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterAddedAccess(opts *bind.FilterOpts) (*ArbitrumValidatorAddedAccessIterator, error) + + WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorAddedAccess) (event.Subscription, error) + + ParseAddedAccess(log types.Log) (*ArbitrumValidatorAddedAccess, error) + + FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ArbitrumValidatorCheckAccessDisabledIterator, error) + + WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorCheckAccessDisabled) (event.Subscription, error) + + ParseCheckAccessDisabled(log types.Log) (*ArbitrumValidatorCheckAccessDisabled, error) + + FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ArbitrumValidatorCheckAccessEnabledIterator, error) + + WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorCheckAccessEnabled) (event.Subscription, error) + + ParseCheckAccessEnabled(log types.Log) (*ArbitrumValidatorCheckAccessEnabled, error) + + FilterConfigACSet(opts *bind.FilterOpts, previous []common.Address, current []common.Address) (*ArbitrumValidatorConfigACSetIterator, error) + + WatchConfigACSet(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorConfigACSet, previous []common.Address, current []common.Address) (event.Subscription, error) + + ParseConfigACSet(log types.Log) (*ArbitrumValidatorConfigACSet, error) + + FilterGasConfigSet(opts *bind.FilterOpts, gasPriceL1FeedAddr []common.Address) (*ArbitrumValidatorGasConfigSetIterator, error) + + WatchGasConfigSet(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorGasConfigSet, gasPriceL1FeedAddr []common.Address) (event.Subscription, error) + + ParseGasConfigSet(log types.Log) (*ArbitrumValidatorGasConfigSet, error) + + FilterL2WithdrawalRequested(opts *bind.FilterOpts, id []*big.Int, refundAddr []common.Address) (*ArbitrumValidatorL2WithdrawalRequestedIterator, error) + + WatchL2WithdrawalRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorL2WithdrawalRequested, id []*big.Int, refundAddr []common.Address) (event.Subscription, error) + + ParseL2WithdrawalRequested(log types.Log) (*ArbitrumValidatorL2WithdrawalRequested, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumValidatorOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ArbitrumValidatorOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumValidatorOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ArbitrumValidatorOwnershipTransferred, error) + + FilterPaymentStrategySet(opts *bind.FilterOpts, paymentStrategy []uint8) (*ArbitrumValidatorPaymentStrategySetIterator, error) + + WatchPaymentStrategySet(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorPaymentStrategySet, paymentStrategy []uint8) (event.Subscription, error) + + ParsePaymentStrategySet(log types.Log) (*ArbitrumValidatorPaymentStrategySet, error) + + FilterRemovedAccess(opts *bind.FilterOpts) (*ArbitrumValidatorRemovedAccessIterator, error) + + WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorRemovedAccess) (event.Subscription, error) + + ParseRemovedAccess(log types.Log) (*ArbitrumValidatorRemovedAccess, error) + + FilterValidatedStatus(opts *bind.FilterOpts) (*ArbitrumValidatorValidatedStatusIterator, error) + + WatchValidatedStatus(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorValidatedStatus) (event.Subscription, error) + + ParseValidatedStatus(log types.Log) (*ArbitrumValidatorValidatedStatus, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/latest/optimism_cross_domain_forwarder/optimism_cross_domain_forwarder.go b/gethwrappers/l2ep/generated/latest/optimism_cross_domain_forwarder/optimism_cross_domain_forwarder.go new file mode 100644 index 0000000000..989620608d --- /dev/null +++ b/gethwrappers/l2ep/generated/latest/optimism_cross_domain_forwarder/optimism_cross_domain_forwarder.go @@ -0,0 +1,928 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package optimism_cross_domain_forwarder + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var OptimismCrossDomainForwarderMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"crossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"contractiOVM_CrossDomainMessenger\"},{\"name\":\"l1OwnerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptL1Ownership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"crossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forward\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferL1Ownership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"L1OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBalance\",\"inputs\":[{\"name\":\"balance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + Bin: "0x60a060405234801562000010575f80fd5b506040516200123e3803806200123e833981016040819052620000339162000264565b8033805f816200008a5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000bc57620000bc8162000146565b505050620000d081620001f060201b60201c565b506001600160a01b038216620001335760405162461bcd60e51b815260206004820152602160248201527f496e76616c69642078446f6d61696e204d657373656e676572206164647265736044820152607360f81b606482015260840162000081565b506001600160a01b0316608052620002a1565b336001600160a01b03821603620001a05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000081565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600280546001600160a01b038381166001600160a01b03198084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b6001600160a01b038116811462000261575f80fd5b50565b5f806040838503121562000276575f80fd5b825162000283816200024c565b602084015190925062000296816200024c565b809150509250929050565b608051610f61620002dd5f395f818161016a015281816101c601528181610283015281816104d40152818161058c01526106c80152610f615ff3fe608060405234801561000f575f80fd5b506004361061009f575f3560e01c806396b8d7c011610072578063d2db637211610058578063d2db637214610137578063f2fde38b14610155578063f43b361314610168575f80fd5b806396b8d7c01461011c578063b2ec07871461012f575f80fd5b8063181f5a77146100a35780636fadcf72146100c157806379ba5097146100d65780638da5cb5b146100de575b5f80fd5b6100ab61018e565b6040516100b89190610d63565b60405180910390f35b6100d46100cf366004610e01565b6101ae565b005b6100d46103c0565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b8565b6100d461012a366004610edd565b6104bc565b6100d46106c6565b60025473ffffffffffffffffffffffffffffffffffffffff166100f7565b6100d4610163366004610edd565b610899565b7f00000000000000000000000000000000000000000000000000000000000000006100f7565b6060604051806060016040528060268152602001610f2f60269139905090565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064015b60405180910390fd5b60025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030e9190610ef8565b73ffffffffffffffffffffffffffffffffffffffff16146103b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f65720000000000000000000000000000000000000000000000000000000000006064820152608401610249565b6103bb82826108aa565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610249565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461055b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e67657200006044820152606401610249565b60025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106179190610ef8565b73ffffffffffffffffffffffffffffffffffffffff16146106ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f65720000000000000000000000000000000000000000000000000000000000006064820152608401610249565b6106c3816108be565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff81163314610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e67657200006044820152606401610249565b600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff92831692841691636e296e459160048083019260209291908290030181865afa1580156107d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107fa9190610ef8565b73ffffffffffffffffffffffffffffffffffffffff1614610877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d7573742062652070726f706f736564204c31206f776e6572000000000000006044820152606401610249565b6003546106c39073ffffffffffffffffffffffffffffffffffffffff166109b3565b6108a1610a34565b6106c381610ab6565b60606108b783835f610baa565b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff82160361093d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610249565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907f55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f905f90a350565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610ab4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610249565b565b3373ffffffffffffffffffffffffffffffffffffffff821603610b35576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610249565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b606081471015610bef576040517fcf47918100000000000000000000000000000000000000000000000000000000815247600482015260248101839052604401610249565b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051610c179190610f13565b5f6040518083038185875af1925050503d805f8114610c51576040519150601f19603f3d011682016040523d82523d5f602084013e610c56565b606091505b5091509150610c66868383610c70565b9695505050505050565b606082610c8557610c8082610cff565b6108b7565b8151158015610ca9575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610cf8576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610249565b50806108b7565b805115610d0f5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b83811015610d5b578181015183820152602001610d43565b50505f910152565b602081525f8251806020840152610d81816040850160208701610d41565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff811681146106c3575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610e12575f80fd5b8235610e1d81610db3565b9150602083013567ffffffffffffffff80821115610e39575f80fd5b818501915085601f830112610e4c575f80fd5b813581811115610e5e57610e5e610dd4565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610ea457610ea4610dd4565b81604052828152886020848701011115610ebc575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215610eed575f80fd5b81356108b781610db3565b5f60208284031215610f08575f80fd5b81516108b781610db3565b5f8251610f24818460208701610d41565b919091019291505056fe4f7074696d69736d43726f7373446f6d61696e466f7277617264657220312e312e302d646576a164736f6c6343000818000a", +} + +var OptimismCrossDomainForwarderABI = OptimismCrossDomainForwarderMetaData.ABI + +var OptimismCrossDomainForwarderBin = OptimismCrossDomainForwarderMetaData.Bin + +func DeployOptimismCrossDomainForwarder(auth *bind.TransactOpts, backend bind.ContractBackend, crossDomainMessengerAddr common.Address, l1OwnerAddr common.Address) (common.Address, *types.Transaction, *OptimismCrossDomainForwarder, error) { + parsed, err := OptimismCrossDomainForwarderMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OptimismCrossDomainForwarderBin), backend, crossDomainMessengerAddr, l1OwnerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OptimismCrossDomainForwarder{address: address, abi: *parsed, OptimismCrossDomainForwarderCaller: OptimismCrossDomainForwarderCaller{contract: contract}, OptimismCrossDomainForwarderTransactor: OptimismCrossDomainForwarderTransactor{contract: contract}, OptimismCrossDomainForwarderFilterer: OptimismCrossDomainForwarderFilterer{contract: contract}}, nil +} + +type OptimismCrossDomainForwarder struct { + address common.Address + abi abi.ABI + OptimismCrossDomainForwarderCaller + OptimismCrossDomainForwarderTransactor + OptimismCrossDomainForwarderFilterer +} + +type OptimismCrossDomainForwarderCaller struct { + contract *bind.BoundContract +} + +type OptimismCrossDomainForwarderTransactor struct { + contract *bind.BoundContract +} + +type OptimismCrossDomainForwarderFilterer struct { + contract *bind.BoundContract +} + +type OptimismCrossDomainForwarderSession struct { + Contract *OptimismCrossDomainForwarder + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type OptimismCrossDomainForwarderCallerSession struct { + Contract *OptimismCrossDomainForwarderCaller + CallOpts bind.CallOpts +} + +type OptimismCrossDomainForwarderTransactorSession struct { + Contract *OptimismCrossDomainForwarderTransactor + TransactOpts bind.TransactOpts +} + +type OptimismCrossDomainForwarderRaw struct { + Contract *OptimismCrossDomainForwarder +} + +type OptimismCrossDomainForwarderCallerRaw struct { + Contract *OptimismCrossDomainForwarderCaller +} + +type OptimismCrossDomainForwarderTransactorRaw struct { + Contract *OptimismCrossDomainForwarderTransactor +} + +func NewOptimismCrossDomainForwarder(address common.Address, backend bind.ContractBackend) (*OptimismCrossDomainForwarder, error) { + abi, err := abi.JSON(strings.NewReader(OptimismCrossDomainForwarderABI)) + if err != nil { + return nil, err + } + contract, err := bindOptimismCrossDomainForwarder(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarder{address: address, abi: abi, OptimismCrossDomainForwarderCaller: OptimismCrossDomainForwarderCaller{contract: contract}, OptimismCrossDomainForwarderTransactor: OptimismCrossDomainForwarderTransactor{contract: contract}, OptimismCrossDomainForwarderFilterer: OptimismCrossDomainForwarderFilterer{contract: contract}}, nil +} + +func NewOptimismCrossDomainForwarderCaller(address common.Address, caller bind.ContractCaller) (*OptimismCrossDomainForwarderCaller, error) { + contract, err := bindOptimismCrossDomainForwarder(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderCaller{contract: contract}, nil +} + +func NewOptimismCrossDomainForwarderTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismCrossDomainForwarderTransactor, error) { + contract, err := bindOptimismCrossDomainForwarder(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderTransactor{contract: contract}, nil +} + +func NewOptimismCrossDomainForwarderFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismCrossDomainForwarderFilterer, error) { + contract, err := bindOptimismCrossDomainForwarder(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderFilterer{contract: contract}, nil +} + +func bindOptimismCrossDomainForwarder(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := OptimismCrossDomainForwarderMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismCrossDomainForwarder.Contract.OptimismCrossDomainForwarderCaller.contract.Call(opts, result, method, params...) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.OptimismCrossDomainForwarderTransactor.contract.Transfer(opts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.OptimismCrossDomainForwarderTransactor.contract.Transact(opts, method, params...) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismCrossDomainForwarder.Contract.contract.Call(opts, result, method, params...) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.contract.Transfer(opts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.contract.Transact(opts, method, params...) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCaller) CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismCrossDomainForwarder.contract.Call(opts, &out, "crossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) CrossDomainMessenger() (common.Address, error) { + return _OptimismCrossDomainForwarder.Contract.CrossDomainMessenger(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCallerSession) CrossDomainMessenger() (common.Address, error) { + return _OptimismCrossDomainForwarder.Contract.CrossDomainMessenger(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCaller) L1Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismCrossDomainForwarder.contract.Call(opts, &out, "l1Owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) L1Owner() (common.Address, error) { + return _OptimismCrossDomainForwarder.Contract.L1Owner(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCallerSession) L1Owner() (common.Address, error) { + return _OptimismCrossDomainForwarder.Contract.L1Owner(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismCrossDomainForwarder.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) Owner() (common.Address, error) { + return _OptimismCrossDomainForwarder.Contract.Owner(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCallerSession) Owner() (common.Address, error) { + return _OptimismCrossDomainForwarder.Contract.Owner(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismCrossDomainForwarder.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) TypeAndVersion() (string, error) { + return _OptimismCrossDomainForwarder.Contract.TypeAndVersion(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCallerSession) TypeAndVersion() (string, error) { + return _OptimismCrossDomainForwarder.Contract.TypeAndVersion(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactor) AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.contract.Transact(opts, "acceptL1Ownership") +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) AcceptL1Ownership() (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.AcceptL1Ownership(&_OptimismCrossDomainForwarder.TransactOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.AcceptL1Ownership(&_OptimismCrossDomainForwarder.TransactOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.contract.Transact(opts, "acceptOwnership") +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.AcceptOwnership(&_OptimismCrossDomainForwarder.TransactOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.AcceptOwnership(&_OptimismCrossDomainForwarder.TransactOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactor) Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.contract.Transact(opts, "forward", target, data) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.Forward(&_OptimismCrossDomainForwarder.TransactOpts, target, data) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.Forward(&_OptimismCrossDomainForwarder.TransactOpts, target, data) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactor) TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.contract.Transact(opts, "transferL1Ownership", to) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.TransferL1Ownership(&_OptimismCrossDomainForwarder.TransactOpts, to) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.TransferL1Ownership(&_OptimismCrossDomainForwarder.TransactOpts, to) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.contract.Transact(opts, "transferOwnership", to) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.TransferOwnership(&_OptimismCrossDomainForwarder.TransactOpts, to) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.TransferOwnership(&_OptimismCrossDomainForwarder.TransactOpts, to) +} + +type OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator struct { + Event *OptimismCrossDomainForwarderL1OwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainForwarderL1OwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.FilterLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator{contract: _OptimismCrossDomainForwarder.contract, event: "L1OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.WatchLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainForwarderL1OwnershipTransferRequested) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) ParseL1OwnershipTransferRequested(log types.Log) (*OptimismCrossDomainForwarderL1OwnershipTransferRequested, error) { + event := new(OptimismCrossDomainForwarderL1OwnershipTransferRequested) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismCrossDomainForwarderL1OwnershipTransferredIterator struct { + Event *OptimismCrossDomainForwarderL1OwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainForwarderL1OwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainForwarderL1OwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainForwarderL1OwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainForwarderL1OwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderL1OwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.FilterLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderL1OwnershipTransferredIterator{contract: _OptimismCrossDomainForwarder.contract, event: "L1OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.WatchLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainForwarderL1OwnershipTransferred) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) ParseL1OwnershipTransferred(log types.Log) (*OptimismCrossDomainForwarderL1OwnershipTransferred, error) { + event := new(OptimismCrossDomainForwarderL1OwnershipTransferred) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismCrossDomainForwarderOwnershipTransferRequestedIterator struct { + Event *OptimismCrossDomainForwarderOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainForwarderOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainForwarderOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainForwarderOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainForwarderOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderOwnershipTransferRequestedIterator{contract: _OptimismCrossDomainForwarder.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainForwarderOwnershipTransferRequested) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) ParseOwnershipTransferRequested(log types.Log) (*OptimismCrossDomainForwarderOwnershipTransferRequested, error) { + event := new(OptimismCrossDomainForwarderOwnershipTransferRequested) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismCrossDomainForwarderOwnershipTransferredIterator struct { + Event *OptimismCrossDomainForwarderOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainForwarderOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainForwarderOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainForwarderOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainForwarderOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderOwnershipTransferredIterator{contract: _OptimismCrossDomainForwarder.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainForwarderOwnershipTransferred) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) ParseOwnershipTransferred(log types.Log) (*OptimismCrossDomainForwarderOwnershipTransferred, error) { + event := new(OptimismCrossDomainForwarderOwnershipTransferred) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (OptimismCrossDomainForwarderL1OwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0x55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f") +} + +func (OptimismCrossDomainForwarderL1OwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0xb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272") +} + +func (OptimismCrossDomainForwarderOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (OptimismCrossDomainForwarderOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarder) Address() common.Address { + return _OptimismCrossDomainForwarder.address +} + +type OptimismCrossDomainForwarderInterface interface { + CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) + + L1Owner(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator, error) + + WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferRequested(log types.Log) (*OptimismCrossDomainForwarderL1OwnershipTransferRequested, error) + + FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderL1OwnershipTransferredIterator, error) + + WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferred(log types.Log) (*OptimismCrossDomainForwarderL1OwnershipTransferred, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*OptimismCrossDomainForwarderOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*OptimismCrossDomainForwarderOwnershipTransferred, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/latest/optimism_cross_domain_governor/optimism_cross_domain_governor.go b/gethwrappers/l2ep/generated/latest/optimism_cross_domain_governor/optimism_cross_domain_governor.go new file mode 100644 index 0000000000..5656470271 --- /dev/null +++ b/gethwrappers/l2ep/generated/latest/optimism_cross_domain_governor/optimism_cross_domain_governor.go @@ -0,0 +1,942 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package optimism_cross_domain_governor + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var OptimismCrossDomainGovernorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"crossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"contractiOVM_CrossDomainMessenger\"},{\"name\":\"l1OwnerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptL1Ownership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"crossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forward\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forwardDelegate\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferL1Ownership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"L1OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBalance\",\"inputs\":[{\"name\":\"balance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + Bin: "0x60a060405234801562000010575f80fd5b506040516200158138038062001581833981016040819052620000339162000269565b81818033805f816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be816200014b565b505050620000d281620001f560201b60201c565b506001600160a01b038216620001355760405162461bcd60e51b815260206004820152602160248201527f496e76616c69642078446f6d61696e204d657373656e676572206164647265736044820152607360f81b606482015260840162000083565b506001600160a01b031660805250620002a69050565b336001600160a01b03821603620001a55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600280546001600160a01b038381166001600160a01b03198084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b6001600160a01b038116811462000266575f80fd5b50565b5f80604083850312156200027b575f80fd5b8251620002888162000251565b60208401519092506200029b8162000251565b809150509250929050565b60805161129f620002e25f395f8181610197015281816101dd01528181610435015281816107940152818161084c0152610988015261129f5ff3fe608060405234801561000f575f80fd5b50600436106100b9575f3560e01c806396b8d7c011610072578063d2db637211610058578063d2db637214610164578063f2fde38b14610182578063f43b361314610195575f80fd5b806396b8d7c014610149578063b2ec07871461015c575f80fd5b80636fadcf72116100a25780636fadcf72146100f057806379ba5097146101035780638da5cb5b1461010b575f80fd5b8063181f5a77146100bd57806326929eb6146100db575b5f80fd5b6100c56101bb565b6040516100d291906110a2565b60405180910390f35b6100ee6100e9366004611140565b6101db565b005b6100ee6100fe366004611140565b610433565b6100ee610680565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d2565b6100ee61015736600461121c565b61077c565b6100ee610986565b60025473ffffffffffffffffffffffffffffffffffffffff16610124565b6100ee61019036600461121c565b610b59565b7f0000000000000000000000000000000000000000000000000000000000000000610124565b606060405180606001604052806025815260200161126e60259139905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff811633148061023657505f5473ffffffffffffffffffffffffffffffffffffffff1633145b6102c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572206f60448201527f72206f776e65720000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811633036104235760025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103809190611237565b73ffffffffffffffffffffffffffffffffffffffff1614610423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084016102be565b61042d8383610b6a565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff811633148061048e57505f5473ffffffffffffffffffffffffffffffffffffffff1633145b61051a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572206f60448201527f72206f776e65720000000000000000000000000000000000000000000000000060648201526084016102be565b73ffffffffffffffffffffffffffffffffffffffff811633036106765760025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105d39190611237565b73ffffffffffffffffffffffffffffffffffffffff1614610676576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084016102be565b61042d8383610be9565b60015473ffffffffffffffffffffffffffffffffffffffff163314610701576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016102be565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461081b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064016102be565b60025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d79190611237565b73ffffffffffffffffffffffffffffffffffffffff161461097a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084016102be565b61098381610bfd565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff81163314610a26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064016102be565b600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff92831692841691636e296e459160048083019260209291908290030181865afa158015610a96573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aba9190611237565b73ffffffffffffffffffffffffffffffffffffffff1614610b37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d7573742062652070726f706f736564204c31206f776e65720000000000000060448201526064016102be565b6003546109839073ffffffffffffffffffffffffffffffffffffffff16610cf2565b610b61610d73565b61098381610df5565b60605f808473ffffffffffffffffffffffffffffffffffffffff1684604051610b939190611252565b5f60405180830381855af49150503d805f8114610bcb576040519150601f19603f3d011682016040523d82523d5f602084013e610bd0565b606091505b5091509150610be0858383610ee9565b95945050505050565b6060610bf683835f610f78565b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff821603610c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016102be565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907f55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f905f90a350565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610df3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016102be565b565b3373ffffffffffffffffffffffffffffffffffffffff821603610e74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016102be565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b606082610efe57610ef98261103e565b610bf6565b8151158015610f22575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610f71576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016102be565b5092915050565b606081471015610fbd576040517fcf479181000000000000000000000000000000000000000000000000000000008152476004820152602481018390526044016102be565b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051610fe59190611252565b5f6040518083038185875af1925050503d805f811461101f576040519150601f19603f3d011682016040523d82523d5f602084013e611024565b606091505b5091509150611034868383610ee9565b9695505050505050565b80511561104e5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8381101561109a578181015183820152602001611082565b50505f910152565b602081525f82518060208401526110c0816040850160208701611080565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610983575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215611151575f80fd5b823561115c816110f2565b9150602083013567ffffffffffffffff80821115611178575f80fd5b818501915085601f83011261118b575f80fd5b81358181111561119d5761119d611113565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156111e3576111e3611113565b816040528281528860208487010111156111fb575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f6020828403121561122c575f80fd5b8135610bf6816110f2565b5f60208284031215611247575f80fd5b8151610bf6816110f2565b5f8251611263818460208701611080565b919091019291505056fe4f7074696d69736d43726f7373446f6d61696e476f7665726e6f7220312e312e302d646576a164736f6c6343000818000a", +} + +var OptimismCrossDomainGovernorABI = OptimismCrossDomainGovernorMetaData.ABI + +var OptimismCrossDomainGovernorBin = OptimismCrossDomainGovernorMetaData.Bin + +func DeployOptimismCrossDomainGovernor(auth *bind.TransactOpts, backend bind.ContractBackend, crossDomainMessengerAddr common.Address, l1OwnerAddr common.Address) (common.Address, *types.Transaction, *OptimismCrossDomainGovernor, error) { + parsed, err := OptimismCrossDomainGovernorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OptimismCrossDomainGovernorBin), backend, crossDomainMessengerAddr, l1OwnerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OptimismCrossDomainGovernor{address: address, abi: *parsed, OptimismCrossDomainGovernorCaller: OptimismCrossDomainGovernorCaller{contract: contract}, OptimismCrossDomainGovernorTransactor: OptimismCrossDomainGovernorTransactor{contract: contract}, OptimismCrossDomainGovernorFilterer: OptimismCrossDomainGovernorFilterer{contract: contract}}, nil +} + +type OptimismCrossDomainGovernor struct { + address common.Address + abi abi.ABI + OptimismCrossDomainGovernorCaller + OptimismCrossDomainGovernorTransactor + OptimismCrossDomainGovernorFilterer +} + +type OptimismCrossDomainGovernorCaller struct { + contract *bind.BoundContract +} + +type OptimismCrossDomainGovernorTransactor struct { + contract *bind.BoundContract +} + +type OptimismCrossDomainGovernorFilterer struct { + contract *bind.BoundContract +} + +type OptimismCrossDomainGovernorSession struct { + Contract *OptimismCrossDomainGovernor + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type OptimismCrossDomainGovernorCallerSession struct { + Contract *OptimismCrossDomainGovernorCaller + CallOpts bind.CallOpts +} + +type OptimismCrossDomainGovernorTransactorSession struct { + Contract *OptimismCrossDomainGovernorTransactor + TransactOpts bind.TransactOpts +} + +type OptimismCrossDomainGovernorRaw struct { + Contract *OptimismCrossDomainGovernor +} + +type OptimismCrossDomainGovernorCallerRaw struct { + Contract *OptimismCrossDomainGovernorCaller +} + +type OptimismCrossDomainGovernorTransactorRaw struct { + Contract *OptimismCrossDomainGovernorTransactor +} + +func NewOptimismCrossDomainGovernor(address common.Address, backend bind.ContractBackend) (*OptimismCrossDomainGovernor, error) { + abi, err := abi.JSON(strings.NewReader(OptimismCrossDomainGovernorABI)) + if err != nil { + return nil, err + } + contract, err := bindOptimismCrossDomainGovernor(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernor{address: address, abi: abi, OptimismCrossDomainGovernorCaller: OptimismCrossDomainGovernorCaller{contract: contract}, OptimismCrossDomainGovernorTransactor: OptimismCrossDomainGovernorTransactor{contract: contract}, OptimismCrossDomainGovernorFilterer: OptimismCrossDomainGovernorFilterer{contract: contract}}, nil +} + +func NewOptimismCrossDomainGovernorCaller(address common.Address, caller bind.ContractCaller) (*OptimismCrossDomainGovernorCaller, error) { + contract, err := bindOptimismCrossDomainGovernor(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorCaller{contract: contract}, nil +} + +func NewOptimismCrossDomainGovernorTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismCrossDomainGovernorTransactor, error) { + contract, err := bindOptimismCrossDomainGovernor(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorTransactor{contract: contract}, nil +} + +func NewOptimismCrossDomainGovernorFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismCrossDomainGovernorFilterer, error) { + contract, err := bindOptimismCrossDomainGovernor(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorFilterer{contract: contract}, nil +} + +func bindOptimismCrossDomainGovernor(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := OptimismCrossDomainGovernorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismCrossDomainGovernor.Contract.OptimismCrossDomainGovernorCaller.contract.Call(opts, result, method, params...) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.OptimismCrossDomainGovernorTransactor.contract.Transfer(opts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.OptimismCrossDomainGovernorTransactor.contract.Transact(opts, method, params...) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismCrossDomainGovernor.Contract.contract.Call(opts, result, method, params...) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.contract.Transfer(opts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.contract.Transact(opts, method, params...) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCaller) CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismCrossDomainGovernor.contract.Call(opts, &out, "crossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) CrossDomainMessenger() (common.Address, error) { + return _OptimismCrossDomainGovernor.Contract.CrossDomainMessenger(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCallerSession) CrossDomainMessenger() (common.Address, error) { + return _OptimismCrossDomainGovernor.Contract.CrossDomainMessenger(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCaller) L1Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismCrossDomainGovernor.contract.Call(opts, &out, "l1Owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) L1Owner() (common.Address, error) { + return _OptimismCrossDomainGovernor.Contract.L1Owner(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCallerSession) L1Owner() (common.Address, error) { + return _OptimismCrossDomainGovernor.Contract.L1Owner(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismCrossDomainGovernor.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) Owner() (common.Address, error) { + return _OptimismCrossDomainGovernor.Contract.Owner(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCallerSession) Owner() (common.Address, error) { + return _OptimismCrossDomainGovernor.Contract.Owner(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismCrossDomainGovernor.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) TypeAndVersion() (string, error) { + return _OptimismCrossDomainGovernor.Contract.TypeAndVersion(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCallerSession) TypeAndVersion() (string, error) { + return _OptimismCrossDomainGovernor.Contract.TypeAndVersion(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactor) AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.contract.Transact(opts, "acceptL1Ownership") +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.AcceptL1Ownership(&_OptimismCrossDomainGovernor.TransactOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.AcceptL1Ownership(&_OptimismCrossDomainGovernor.TransactOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.contract.Transact(opts, "acceptOwnership") +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.AcceptOwnership(&_OptimismCrossDomainGovernor.TransactOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.AcceptOwnership(&_OptimismCrossDomainGovernor.TransactOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactor) Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.contract.Transact(opts, "forward", target, data) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.Forward(&_OptimismCrossDomainGovernor.TransactOpts, target, data) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.Forward(&_OptimismCrossDomainGovernor.TransactOpts, target, data) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactor) ForwardDelegate(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.contract.Transact(opts, "forwardDelegate", target, data) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) ForwardDelegate(target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.ForwardDelegate(&_OptimismCrossDomainGovernor.TransactOpts, target, data) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorSession) ForwardDelegate(target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.ForwardDelegate(&_OptimismCrossDomainGovernor.TransactOpts, target, data) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactor) TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.contract.Transact(opts, "transferL1Ownership", to) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.TransferL1Ownership(&_OptimismCrossDomainGovernor.TransactOpts, to) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.TransferL1Ownership(&_OptimismCrossDomainGovernor.TransactOpts, to) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.contract.Transact(opts, "transferOwnership", to) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.TransferOwnership(&_OptimismCrossDomainGovernor.TransactOpts, to) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.TransferOwnership(&_OptimismCrossDomainGovernor.TransactOpts, to) +} + +type OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator struct { + Event *OptimismCrossDomainGovernorL1OwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainGovernorL1OwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.FilterLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator{contract: _OptimismCrossDomainGovernor.contract, event: "L1OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.WatchLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainGovernorL1OwnershipTransferRequested) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) ParseL1OwnershipTransferRequested(log types.Log) (*OptimismCrossDomainGovernorL1OwnershipTransferRequested, error) { + event := new(OptimismCrossDomainGovernorL1OwnershipTransferRequested) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismCrossDomainGovernorL1OwnershipTransferredIterator struct { + Event *OptimismCrossDomainGovernorL1OwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainGovernorL1OwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainGovernorL1OwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainGovernorL1OwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainGovernorL1OwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorL1OwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.FilterLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorL1OwnershipTransferredIterator{contract: _OptimismCrossDomainGovernor.contract, event: "L1OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.WatchLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainGovernorL1OwnershipTransferred) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) ParseL1OwnershipTransferred(log types.Log) (*OptimismCrossDomainGovernorL1OwnershipTransferred, error) { + event := new(OptimismCrossDomainGovernorL1OwnershipTransferred) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismCrossDomainGovernorOwnershipTransferRequestedIterator struct { + Event *OptimismCrossDomainGovernorOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainGovernorOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainGovernorOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainGovernorOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainGovernorOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorOwnershipTransferRequestedIterator{contract: _OptimismCrossDomainGovernor.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainGovernorOwnershipTransferRequested) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) ParseOwnershipTransferRequested(log types.Log) (*OptimismCrossDomainGovernorOwnershipTransferRequested, error) { + event := new(OptimismCrossDomainGovernorOwnershipTransferRequested) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismCrossDomainGovernorOwnershipTransferredIterator struct { + Event *OptimismCrossDomainGovernorOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainGovernorOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainGovernorOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainGovernorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainGovernorOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorOwnershipTransferredIterator{contract: _OptimismCrossDomainGovernor.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainGovernorOwnershipTransferred) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) ParseOwnershipTransferred(log types.Log) (*OptimismCrossDomainGovernorOwnershipTransferred, error) { + event := new(OptimismCrossDomainGovernorOwnershipTransferred) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (OptimismCrossDomainGovernorL1OwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0x55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f") +} + +func (OptimismCrossDomainGovernorL1OwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0xb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272") +} + +func (OptimismCrossDomainGovernorOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (OptimismCrossDomainGovernorOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernor) Address() common.Address { + return _OptimismCrossDomainGovernor.address +} + +type OptimismCrossDomainGovernorInterface interface { + CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) + + L1Owner(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + ForwardDelegate(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator, error) + + WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferRequested(log types.Log) (*OptimismCrossDomainGovernorL1OwnershipTransferRequested, error) + + FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorL1OwnershipTransferredIterator, error) + + WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferred(log types.Log) (*OptimismCrossDomainGovernorL1OwnershipTransferred, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*OptimismCrossDomainGovernorOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*OptimismCrossDomainGovernorOwnershipTransferred, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/latest/optimism_sequencer_uptime_feed/optimism_sequencer_uptime_feed.go b/gethwrappers/l2ep/generated/latest/optimism_sequencer_uptime_feed/optimism_sequencer_uptime_feed.go new file mode 100644 index 0000000000..106c5ce7d2 --- /dev/null +++ b/gethwrappers/l2ep/generated/latest/optimism_sequencer_uptime_feed/optimism_sequencer_uptime_feed.go @@ -0,0 +1,2187 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package optimism_sequencer_uptime_feed + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var OptimismSequencerUptimeFeedMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"l1SenderAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2CrossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStatus\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"description\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAnswer\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoundData\",\"inputs\":[{\"name\":\"_roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"outputs\":[{\"name\":\"roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"},{\"name\":\"answer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"answeredInRound\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTimestamp\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_calldata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestAnswer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestRound\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestRoundData\",\"inputs\":[],\"outputs\":[{\"name\":\"roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"},{\"name\":\"answer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"answeredInRound\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferL1Sender\",\"inputs\":[{\"name\":\"newSender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AddedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AnswerUpdated\",\"inputs\":[{\"name\":\"current\",\"type\":\"int256\",\"indexed\":true,\"internalType\":\"int256\"},{\"name\":\"roundId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1SenderTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewRound\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"startedBy\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemovedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoundUpdated\",\"inputs\":[{\"name\":\"status\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"updatedAt\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdateIgnored\",\"inputs\":[{\"name\":\"latestStatus\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"latestTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"incomingStatus\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"incomingTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoDataPresent\",\"inputs\":[]}]", + Bin: "0x6101206040525f60a081905260c081905260e081905261010052600480546001600160d81b031916905534801562000035575f80fd5b5060405162001ea138038062001ea18339810160408190526200005891620003eb565b828133805f81620000b05760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000e257620000e28162000127565b50506001805460ff60a01b1916600160a01b179055506200010382620001d1565b62000111600182426200023a565b5050506001600160a01b03166080525062000439565b336001600160a01b03821603620001815760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620000a7565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6003546001600160a01b0390811690821681146200023657600380546001600160a01b0319166001600160a01b0384811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18905f90a35b5050565b60408051606080820183526001600160401b0384811680845242821660208086018281528915158789018181526001600160501b038d165f818152600586528b902099518a54945192511515600160801b0260ff60801b19938a1668010000000000000000026001600160801b03199096169190991617939093171695909517909655865160808101885286815280820184905280880183905290940183905260048054600160d01b90940260ff60d01b19600160901b90930292909216600160901b600160d81b03196a010000000000000000000085026001600160901b0319909616881795909517949094169390931717909155925192835233927f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271910160405180910390a36001600160501b0383166200037783620003b8565b6040516001600160401b03841681527f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f9060200160405180910390a3505050565b5f81620003c6575f620003c9565b60015b92915050565b80516001600160a01b0381168114620003e6575f80fd5b919050565b5f805f60608486031215620003fe575f80fd5b6200040984620003cf565b92506200041960208501620003cf565b9150604084015180151581146200042e575f80fd5b809150509250925092565b608051611a48620004595f395f818161124601526112870152611a485ff3fe608060405234801561000f575f80fd5b5060043610610184575f3560e01c80638205bf6a116100dd578063b633620c11610088578063ed8378f511610063578063ed8378f514610390578063f2fde38b146103a3578063feaf968c146103b6575f80fd5b8063b633620c1461033a578063b7558b7a1461034d578063dc7f01241461036b575f80fd5b80639a6fc8f5116100b85780639a6fc8f5146102ca578063a118f24914610314578063b5ab58dc14610327575f80fd5b80638205bf6a146102715780638823da6c146102795780638da5cb5b1461028c575f80fd5b806354fd4d501161013d5780637284e416116101185780637284e4161461022557806379ba5097146102615780638038e4a114610269575f80fd5b806354fd4d50146101f2578063668a0f02146101fa5780636b14daf814610202575f80fd5b8063284afc081161016d578063284afc08146101b0578063313ce567146101c357806350d25bcd146101dc575f80fd5b80630a75698314610188578063181f5a7714610192575b5f80fd5b6101906103be565b005b61019a61043c565b6040516101a79190611776565b60405180910390f35b6101906101be366004611801565b610458565b6101ca5f81565b60405160ff90911681526020016101a7565b6101e461046c565b6040519081526020016101a7565b6101e4600181565b6101e4610549565b610215610210366004611849565b610602565b60405190151581526020016101a7565b61019a6040518060400160405280601f81526020017f4c322053657175656e63657220557074696d652053746174757320466565640081525081565b610190610634565b610190610730565b6101e46107c3565b610190610287366004611801565b610888565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a7565b6102dd6102d8366004611925565b61093f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a7565b610190610322366004611801565b610a9f565b6101e461033536600461194e565b610b51565b6101e461034836600461194e565b610c77565b60035473ffffffffffffffffffffffffffffffffffffffff166102a5565b6001546102159074010000000000000000000000000000000000000000900460ff1681565b61019061039e366004611965565b610d84565b6101906103b1366004611801565b610f32565b6102dd610f43565b6103c6611076565b60015474010000000000000000000000000000000000000000900460ff161561043a57600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638905f90a15b565b604051806060016040528060258152602001611a176025913981565b610460611076565b610469816110f6565b50565b5f6104ac335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600454610544907a010000000000000000000000000000000000000000000000000000900460ff16611190565b905090565b5f610589335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b6105ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b5060045469ffffffffffffffffffff1690565b5f61060d83836111a4565b8061062d575073ffffffffffffffffffffffffffffffffffffffff831632145b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161050e565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610738611076565b60015474010000000000000000000000000000000000000000900460ff1661043a57600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480905f90a1565b5f610803335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b506004546a0100000000000000000000900467ffffffffffffffff1690565b610890611076565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff16156104695773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d191015b60405180910390a150565b5f805f805f610983335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b6109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b6109fe8669ffffffffffffffffffff166111f8565b610a34576040517fbb25870000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b69ffffffffffffffffffff86165f90815260056020526040902080548790610a7290700100000000000000000000000000000000900460ff16611190565b91549098919767ffffffffffffffff80831698506801000000000000000090920490911695509350915050565b610aa7611076565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff166104695773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49101610934565b5f610b91335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b610c00826111f8565b610c36576040517fbb25870000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b69ffffffffffffffffffff82165f90815260056020526040902054610c7190700100000000000000000000000000000000900460ff16611190565b92915050565b5f610cb7335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b610d26826111f8565b610d5c576040517fbb25870000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5069ffffffffffffffffffff165f9081526005602052604090205467ffffffffffffffff1690565b600354610da69073ffffffffffffffffffffffffffffffffffffffff1661122e565b5f610e53604080516080810182525f808252602082018190529181018290526060810191909152506040805160808101825260045469ffffffffffffffffffff811682526a0100000000000000000000810467ffffffffffffffff90811660208401527201000000000000000000000000000000000000820416928201929092527a01000000000000000000000000000000000000000000000000000090910460ff161515606082015290565b90508167ffffffffffffffff16816020015167ffffffffffffffff161115610ee4577fe4a6e16301740042c17431042adb8f60454c18fb5934dd4c456269c0dc388fdf816060015182602001518585604051610ed79493929190931515845267ffffffffffffffff9283166020850152901515604084015216606082015260800190565b60405180910390a1505050565b8215158160600151151503610f04578051610eff9084611362565b505050565b6001815f01818151610f1691906119ac565b69ffffffffffffffffffff169052508051610eff908484611450565b610f3a611076565b61046981611682565b5f805f805f610f87335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610fed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b6004805469ffffffffffffffffffff811690611029907a010000000000000000000000000000000000000000000000000000900460ff16611190565b9154909791965067ffffffffffffffff6a01000000000000000000008204811696507201000000000000000000000000000000000000820416945069ffffffffffffffffffff1692509050565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461043a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161050e565b60035473ffffffffffffffffffffffffffffffffffffffff908116908216811461118c57600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18905f90a35b5050565b5f8161119c575f610c71565b600192915050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081205460ff168061062d57505060015474010000000000000000000000000000000000000000900460ff161592915050565b5f8082118015611212575069ffffffffffffffffffff8211155b8015610c7157505060045469ffffffffffffffffffff16101590565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614158061132b57508073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131291906119fb565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610469576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b69ffffffffffffffffffff82165f90815260056020526040902080547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff1690810291909117909155600480547fffffffffffff0000000000000000ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000009092029190911790557f297642343ed2faefb1a411b39fc449eae700e54223d5d0499a9421eb6f68f66a61142c82611190565b6040805191825267ffffffffffffffff421660208301520160405180910390a15050565b604080516060808201835267ffffffffffffffff848116808452428216602080860182815289151587890181815269ffffffffffffffffffff8d165f818152600586528b902099518a54945192511515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff938a1668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090961691909916179390931716959095179096558651608081018852868152808201849052808801839052909401839052600480547a0100000000000000000000000000000000000000000000000000009094027fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff7201000000000000000000000000000000000000909302929092167fffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff6a010000000000000000000085027fffffffffffffffffffffffffffff000000000000000000000000000000000000909616881795909517949094169390931717909155925192835233927f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271910160405180910390a38269ffffffffffffffffffff1661164083611190565b60405167ffffffffffffffff841681527f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f9060200160405180910390a3505050565b3373ffffffffffffffffffffffffffffffffffffffff821603611701576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161050e565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f602080835283518060208501525f5b818110156117a257858101830151858201604001528201611786565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610469575f80fd5b5f60208284031215611811575f80fd5b813561062d816117e0565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f806040838503121561185a575f80fd5b8235611865816117e0565b9150602083013567ffffffffffffffff80821115611881575f80fd5b818501915085601f830112611894575f80fd5b8135818111156118a6576118a661181c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156118ec576118ec61181c565b81604052828152886020848701011115611904575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215611935575f80fd5b813569ffffffffffffffffffff8116811461062d575f80fd5b5f6020828403121561195e575f80fd5b5035919050565b5f8060408385031215611976575f80fd5b82358015158114611985575f80fd5b9150602083013567ffffffffffffffff811681146119a1575f80fd5b809150509250929050565b69ffffffffffffffffffff8181168382160190808211156119f4577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5092915050565b5f60208284031215611a0b575f80fd5b815161062d816117e056fe4f7074696d69736d53657175656e636572557074696d654665656420312e312e302d646576a164736f6c6343000818000a", +} + +var OptimismSequencerUptimeFeedABI = OptimismSequencerUptimeFeedMetaData.ABI + +var OptimismSequencerUptimeFeedBin = OptimismSequencerUptimeFeedMetaData.Bin + +func DeployOptimismSequencerUptimeFeed(auth *bind.TransactOpts, backend bind.ContractBackend, l1SenderAddress common.Address, l2CrossDomainMessengerAddr common.Address, initialStatus bool) (common.Address, *types.Transaction, *OptimismSequencerUptimeFeed, error) { + parsed, err := OptimismSequencerUptimeFeedMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OptimismSequencerUptimeFeedBin), backend, l1SenderAddress, l2CrossDomainMessengerAddr, initialStatus) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OptimismSequencerUptimeFeed{address: address, abi: *parsed, OptimismSequencerUptimeFeedCaller: OptimismSequencerUptimeFeedCaller{contract: contract}, OptimismSequencerUptimeFeedTransactor: OptimismSequencerUptimeFeedTransactor{contract: contract}, OptimismSequencerUptimeFeedFilterer: OptimismSequencerUptimeFeedFilterer{contract: contract}}, nil +} + +type OptimismSequencerUptimeFeed struct { + address common.Address + abi abi.ABI + OptimismSequencerUptimeFeedCaller + OptimismSequencerUptimeFeedTransactor + OptimismSequencerUptimeFeedFilterer +} + +type OptimismSequencerUptimeFeedCaller struct { + contract *bind.BoundContract +} + +type OptimismSequencerUptimeFeedTransactor struct { + contract *bind.BoundContract +} + +type OptimismSequencerUptimeFeedFilterer struct { + contract *bind.BoundContract +} + +type OptimismSequencerUptimeFeedSession struct { + Contract *OptimismSequencerUptimeFeed + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type OptimismSequencerUptimeFeedCallerSession struct { + Contract *OptimismSequencerUptimeFeedCaller + CallOpts bind.CallOpts +} + +type OptimismSequencerUptimeFeedTransactorSession struct { + Contract *OptimismSequencerUptimeFeedTransactor + TransactOpts bind.TransactOpts +} + +type OptimismSequencerUptimeFeedRaw struct { + Contract *OptimismSequencerUptimeFeed +} + +type OptimismSequencerUptimeFeedCallerRaw struct { + Contract *OptimismSequencerUptimeFeedCaller +} + +type OptimismSequencerUptimeFeedTransactorRaw struct { + Contract *OptimismSequencerUptimeFeedTransactor +} + +func NewOptimismSequencerUptimeFeed(address common.Address, backend bind.ContractBackend) (*OptimismSequencerUptimeFeed, error) { + abi, err := abi.JSON(strings.NewReader(OptimismSequencerUptimeFeedABI)) + if err != nil { + return nil, err + } + contract, err := bindOptimismSequencerUptimeFeed(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeed{address: address, abi: abi, OptimismSequencerUptimeFeedCaller: OptimismSequencerUptimeFeedCaller{contract: contract}, OptimismSequencerUptimeFeedTransactor: OptimismSequencerUptimeFeedTransactor{contract: contract}, OptimismSequencerUptimeFeedFilterer: OptimismSequencerUptimeFeedFilterer{contract: contract}}, nil +} + +func NewOptimismSequencerUptimeFeedCaller(address common.Address, caller bind.ContractCaller) (*OptimismSequencerUptimeFeedCaller, error) { + contract, err := bindOptimismSequencerUptimeFeed(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedCaller{contract: contract}, nil +} + +func NewOptimismSequencerUptimeFeedTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismSequencerUptimeFeedTransactor, error) { + contract, err := bindOptimismSequencerUptimeFeed(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedTransactor{contract: contract}, nil +} + +func NewOptimismSequencerUptimeFeedFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismSequencerUptimeFeedFilterer, error) { + contract, err := bindOptimismSequencerUptimeFeed(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedFilterer{contract: contract}, nil +} + +func bindOptimismSequencerUptimeFeed(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := OptimismSequencerUptimeFeedMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismSequencerUptimeFeed.Contract.OptimismSequencerUptimeFeedCaller.contract.Call(opts, result, method, params...) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.OptimismSequencerUptimeFeedTransactor.contract.Transfer(opts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.OptimismSequencerUptimeFeedTransactor.contract.Transact(opts, method, params...) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismSequencerUptimeFeed.Contract.contract.Call(opts, result, method, params...) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.contract.Transfer(opts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.contract.Transact(opts, method, params...) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) CheckEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "checkEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) CheckEnabled() (bool, error) { + return _OptimismSequencerUptimeFeed.Contract.CheckEnabled(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) CheckEnabled() (bool, error) { + return _OptimismSequencerUptimeFeed.Contract.CheckEnabled(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) Decimals() (uint8, error) { + return _OptimismSequencerUptimeFeed.Contract.Decimals(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) Decimals() (uint8, error) { + return _OptimismSequencerUptimeFeed.Contract.Decimals(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) Description(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "description") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) Description() (string, error) { + return _OptimismSequencerUptimeFeed.Contract.Description(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) Description() (string, error) { + return _OptimismSequencerUptimeFeed.Contract.Description(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) GetAnswer(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "getAnswer", roundId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) GetAnswer(roundId *big.Int) (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.GetAnswer(&_OptimismSequencerUptimeFeed.CallOpts, roundId) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) GetAnswer(roundId *big.Int) (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.GetAnswer(&_OptimismSequencerUptimeFeed.CallOpts, roundId) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "getRoundData", _roundId) + + outstruct := new(GetRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _OptimismSequencerUptimeFeed.Contract.GetRoundData(&_OptimismSequencerUptimeFeed.CallOpts, _roundId) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _OptimismSequencerUptimeFeed.Contract.GetRoundData(&_OptimismSequencerUptimeFeed.CallOpts, _roundId) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) GetTimestamp(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "getTimestamp", roundId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) GetTimestamp(roundId *big.Int) (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.GetTimestamp(&_OptimismSequencerUptimeFeed.CallOpts, roundId) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) GetTimestamp(roundId *big.Int) (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.GetTimestamp(&_OptimismSequencerUptimeFeed.CallOpts, roundId) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) HasAccess(opts *bind.CallOpts, _user common.Address, _calldata []byte) (bool, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "hasAccess", _user, _calldata) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) HasAccess(_user common.Address, _calldata []byte) (bool, error) { + return _OptimismSequencerUptimeFeed.Contract.HasAccess(&_OptimismSequencerUptimeFeed.CallOpts, _user, _calldata) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) HasAccess(_user common.Address, _calldata []byte) (bool, error) { + return _OptimismSequencerUptimeFeed.Contract.HasAccess(&_OptimismSequencerUptimeFeed.CallOpts, _user, _calldata) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) L1Sender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "l1Sender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) L1Sender() (common.Address, error) { + return _OptimismSequencerUptimeFeed.Contract.L1Sender(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) L1Sender() (common.Address, error) { + return _OptimismSequencerUptimeFeed.Contract.L1Sender(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) LatestAnswer(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "latestAnswer") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) LatestAnswer() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.LatestAnswer(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) LatestAnswer() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.LatestAnswer(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) LatestRound(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "latestRound") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) LatestRound() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.LatestRound(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) LatestRound() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.LatestRound(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "latestRoundData") + + outstruct := new(LatestRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) LatestRoundData() (LatestRoundData, + + error) { + return _OptimismSequencerUptimeFeed.Contract.LatestRoundData(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) LatestRoundData() (LatestRoundData, + + error) { + return _OptimismSequencerUptimeFeed.Contract.LatestRoundData(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "latestTimestamp") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) LatestTimestamp() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.LatestTimestamp(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) LatestTimestamp() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.LatestTimestamp(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) Owner() (common.Address, error) { + return _OptimismSequencerUptimeFeed.Contract.Owner(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) Owner() (common.Address, error) { + return _OptimismSequencerUptimeFeed.Contract.Owner(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) TypeAndVersion() (string, error) { + return _OptimismSequencerUptimeFeed.Contract.TypeAndVersion(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) TypeAndVersion() (string, error) { + return _OptimismSequencerUptimeFeed.Contract.TypeAndVersion(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) Version(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "version") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) Version() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.Version(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) Version() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.Version(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "acceptOwnership") +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.AcceptOwnership(&_OptimismSequencerUptimeFeed.TransactOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.AcceptOwnership(&_OptimismSequencerUptimeFeed.TransactOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "addAccess", _user) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.AddAccess(&_OptimismSequencerUptimeFeed.TransactOpts, _user) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.AddAccess(&_OptimismSequencerUptimeFeed.TransactOpts, _user) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "disableAccessCheck") +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) DisableAccessCheck() (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.DisableAccessCheck(&_OptimismSequencerUptimeFeed.TransactOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) DisableAccessCheck() (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.DisableAccessCheck(&_OptimismSequencerUptimeFeed.TransactOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "enableAccessCheck") +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) EnableAccessCheck() (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.EnableAccessCheck(&_OptimismSequencerUptimeFeed.TransactOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) EnableAccessCheck() (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.EnableAccessCheck(&_OptimismSequencerUptimeFeed.TransactOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "removeAccess", _user) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.RemoveAccess(&_OptimismSequencerUptimeFeed.TransactOpts, _user) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.RemoveAccess(&_OptimismSequencerUptimeFeed.TransactOpts, _user) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) TransferL1Sender(opts *bind.TransactOpts, newSender common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "transferL1Sender", newSender) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) TransferL1Sender(newSender common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.TransferL1Sender(&_OptimismSequencerUptimeFeed.TransactOpts, newSender) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) TransferL1Sender(newSender common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.TransferL1Sender(&_OptimismSequencerUptimeFeed.TransactOpts, newSender) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "transferOwnership", to) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.TransferOwnership(&_OptimismSequencerUptimeFeed.TransactOpts, to) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.TransferOwnership(&_OptimismSequencerUptimeFeed.TransactOpts, to) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) UpdateStatus(opts *bind.TransactOpts, status bool, timestamp uint64) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "updateStatus", status, timestamp) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) UpdateStatus(status bool, timestamp uint64) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.UpdateStatus(&_OptimismSequencerUptimeFeed.TransactOpts, status, timestamp) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) UpdateStatus(status bool, timestamp uint64) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.UpdateStatus(&_OptimismSequencerUptimeFeed.TransactOpts, status, timestamp) +} + +type OptimismSequencerUptimeFeedAddedAccessIterator struct { + Event *OptimismSequencerUptimeFeedAddedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedAddedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedAddedAccessIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedAddedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedAddedAccess struct { + User common.Address + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterAddedAccess(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedAddedAccessIterator, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedAddedAccessIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "AddedAccess", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedAddedAccess) (event.Subscription, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedAddedAccess) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseAddedAccess(log types.Log) (*OptimismSequencerUptimeFeedAddedAccess, error) { + event := new(OptimismSequencerUptimeFeedAddedAccess) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedAnswerUpdatedIterator struct { + Event *OptimismSequencerUptimeFeedAnswerUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedAnswerUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedAnswerUpdatedIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedAnswerUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedAnswerUpdated struct { + Current *big.Int + RoundId *big.Int + UpdatedAt *big.Int + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*OptimismSequencerUptimeFeedAnswerUpdatedIterator, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedAnswerUpdatedIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "AnswerUpdated", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedAnswerUpdated) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "AnswerUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseAnswerUpdated(log types.Log) (*OptimismSequencerUptimeFeedAnswerUpdated, error) { + event := new(OptimismSequencerUptimeFeedAnswerUpdated) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "AnswerUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedCheckAccessDisabledIterator struct { + Event *OptimismSequencerUptimeFeedCheckAccessDisabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedCheckAccessDisabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedCheckAccessDisabledIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedCheckAccessDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedCheckAccessDisabled struct { + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterCheckAccessDisabled(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedCheckAccessDisabledIterator, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedCheckAccessDisabledIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "CheckAccessDisabled", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedCheckAccessDisabled) (event.Subscription, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedCheckAccessDisabled) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseCheckAccessDisabled(log types.Log) (*OptimismSequencerUptimeFeedCheckAccessDisabled, error) { + event := new(OptimismSequencerUptimeFeedCheckAccessDisabled) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedCheckAccessEnabledIterator struct { + Event *OptimismSequencerUptimeFeedCheckAccessEnabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedCheckAccessEnabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedCheckAccessEnabledIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedCheckAccessEnabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedCheckAccessEnabled struct { + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterCheckAccessEnabled(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedCheckAccessEnabledIterator, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedCheckAccessEnabledIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "CheckAccessEnabled", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedCheckAccessEnabled) (event.Subscription, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedCheckAccessEnabled) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseCheckAccessEnabled(log types.Log) (*OptimismSequencerUptimeFeedCheckAccessEnabled, error) { + event := new(OptimismSequencerUptimeFeedCheckAccessEnabled) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedL1SenderTransferredIterator struct { + Event *OptimismSequencerUptimeFeedL1SenderTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedL1SenderTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedL1SenderTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedL1SenderTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedL1SenderTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedL1SenderTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedL1SenderTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterL1SenderTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismSequencerUptimeFeedL1SenderTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "L1SenderTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedL1SenderTransferredIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "L1SenderTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchL1SenderTransferred(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedL1SenderTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "L1SenderTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedL1SenderTransferred) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "L1SenderTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseL1SenderTransferred(log types.Log) (*OptimismSequencerUptimeFeedL1SenderTransferred, error) { + event := new(OptimismSequencerUptimeFeedL1SenderTransferred) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "L1SenderTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedNewRoundIterator struct { + Event *OptimismSequencerUptimeFeedNewRound + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedNewRoundIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedNewRoundIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedNewRoundIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedNewRound struct { + RoundId *big.Int + StartedBy common.Address + StartedAt *big.Int + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*OptimismSequencerUptimeFeedNewRoundIterator, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedNewRoundIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "NewRound", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchNewRound(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedNewRound) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "NewRound", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseNewRound(log types.Log) (*OptimismSequencerUptimeFeedNewRound, error) { + event := new(OptimismSequencerUptimeFeedNewRound) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "NewRound", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator struct { + Event *OptimismSequencerUptimeFeedOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedOwnershipTransferRequested) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseOwnershipTransferRequested(log types.Log) (*OptimismSequencerUptimeFeedOwnershipTransferRequested, error) { + event := new(OptimismSequencerUptimeFeedOwnershipTransferRequested) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedOwnershipTransferredIterator struct { + Event *OptimismSequencerUptimeFeedOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismSequencerUptimeFeedOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedOwnershipTransferredIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedOwnershipTransferred) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseOwnershipTransferred(log types.Log) (*OptimismSequencerUptimeFeedOwnershipTransferred, error) { + event := new(OptimismSequencerUptimeFeedOwnershipTransferred) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedRemovedAccessIterator struct { + Event *OptimismSequencerUptimeFeedRemovedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedRemovedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedRemovedAccessIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedRemovedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedRemovedAccess struct { + User common.Address + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterRemovedAccess(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedRemovedAccessIterator, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedRemovedAccessIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "RemovedAccess", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedRemovedAccess) (event.Subscription, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedRemovedAccess) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseRemovedAccess(log types.Log) (*OptimismSequencerUptimeFeedRemovedAccess, error) { + event := new(OptimismSequencerUptimeFeedRemovedAccess) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedRoundUpdatedIterator struct { + Event *OptimismSequencerUptimeFeedRoundUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedRoundUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedRoundUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedRoundUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedRoundUpdatedIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedRoundUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedRoundUpdated struct { + Status *big.Int + UpdatedAt uint64 + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterRoundUpdated(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedRoundUpdatedIterator, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "RoundUpdated") + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedRoundUpdatedIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "RoundUpdated", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchRoundUpdated(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedRoundUpdated) (event.Subscription, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "RoundUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedRoundUpdated) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "RoundUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseRoundUpdated(log types.Log) (*OptimismSequencerUptimeFeedRoundUpdated, error) { + event := new(OptimismSequencerUptimeFeedRoundUpdated) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "RoundUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedUpdateIgnoredIterator struct { + Event *OptimismSequencerUptimeFeedUpdateIgnored + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedUpdateIgnoredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedUpdateIgnored) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedUpdateIgnored) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedUpdateIgnoredIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedUpdateIgnoredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedUpdateIgnored struct { + LatestStatus bool + LatestTimestamp uint64 + IncomingStatus bool + IncomingTimestamp uint64 + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterUpdateIgnored(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedUpdateIgnoredIterator, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "UpdateIgnored") + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedUpdateIgnoredIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "UpdateIgnored", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchUpdateIgnored(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedUpdateIgnored) (event.Subscription, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "UpdateIgnored") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedUpdateIgnored) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "UpdateIgnored", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseUpdateIgnored(log types.Log) (*OptimismSequencerUptimeFeedUpdateIgnored, error) { + event := new(OptimismSequencerUptimeFeedUpdateIgnored) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "UpdateIgnored", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} +type LatestRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} + +func (OptimismSequencerUptimeFeedAddedAccess) Topic() common.Hash { + return common.HexToHash("0x87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db4") +} + +func (OptimismSequencerUptimeFeedAnswerUpdated) Topic() common.Hash { + return common.HexToHash("0x0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f") +} + +func (OptimismSequencerUptimeFeedCheckAccessDisabled) Topic() common.Hash { + return common.HexToHash("0x3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638") +} + +func (OptimismSequencerUptimeFeedCheckAccessEnabled) Topic() common.Hash { + return common.HexToHash("0xaebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480") +} + +func (OptimismSequencerUptimeFeedL1SenderTransferred) Topic() common.Hash { + return common.HexToHash("0x8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18") +} + +func (OptimismSequencerUptimeFeedNewRound) Topic() common.Hash { + return common.HexToHash("0x0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271") +} + +func (OptimismSequencerUptimeFeedOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (OptimismSequencerUptimeFeedOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (OptimismSequencerUptimeFeedRemovedAccess) Topic() common.Hash { + return common.HexToHash("0x3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d1") +} + +func (OptimismSequencerUptimeFeedRoundUpdated) Topic() common.Hash { + return common.HexToHash("0x297642343ed2faefb1a411b39fc449eae700e54223d5d0499a9421eb6f68f66a") +} + +func (OptimismSequencerUptimeFeedUpdateIgnored) Topic() common.Hash { + return common.HexToHash("0xe4a6e16301740042c17431042adb8f60454c18fb5934dd4c456269c0dc388fdf") +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeed) Address() common.Address { + return _OptimismSequencerUptimeFeed.address +} + +type OptimismSequencerUptimeFeedInterface interface { + CheckEnabled(opts *bind.CallOpts) (bool, error) + + Decimals(opts *bind.CallOpts) (uint8, error) + + Description(opts *bind.CallOpts) (string, error) + + GetAnswer(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) + + GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) + + GetTimestamp(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) + + HasAccess(opts *bind.CallOpts, _user common.Address, _calldata []byte) (bool, error) + + L1Sender(opts *bind.CallOpts) (common.Address, error) + + LatestAnswer(opts *bind.CallOpts) (*big.Int, error) + + LatestRound(opts *bind.CallOpts) (*big.Int, error) + + LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) + + LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + Version(opts *bind.CallOpts) (*big.Int, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + TransferL1Sender(opts *bind.TransactOpts, newSender common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + UpdateStatus(opts *bind.TransactOpts, status bool, timestamp uint64) (*types.Transaction, error) + + FilterAddedAccess(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedAddedAccessIterator, error) + + WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedAddedAccess) (event.Subscription, error) + + ParseAddedAccess(log types.Log) (*OptimismSequencerUptimeFeedAddedAccess, error) + + FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*OptimismSequencerUptimeFeedAnswerUpdatedIterator, error) + + WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) + + ParseAnswerUpdated(log types.Log) (*OptimismSequencerUptimeFeedAnswerUpdated, error) + + FilterCheckAccessDisabled(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedCheckAccessDisabledIterator, error) + + WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedCheckAccessDisabled) (event.Subscription, error) + + ParseCheckAccessDisabled(log types.Log) (*OptimismSequencerUptimeFeedCheckAccessDisabled, error) + + FilterCheckAccessEnabled(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedCheckAccessEnabledIterator, error) + + WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedCheckAccessEnabled) (event.Subscription, error) + + ParseCheckAccessEnabled(log types.Log) (*OptimismSequencerUptimeFeedCheckAccessEnabled, error) + + FilterL1SenderTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismSequencerUptimeFeedL1SenderTransferredIterator, error) + + WatchL1SenderTransferred(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedL1SenderTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1SenderTransferred(log types.Log) (*OptimismSequencerUptimeFeedL1SenderTransferred, error) + + FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*OptimismSequencerUptimeFeedNewRoundIterator, error) + + WatchNewRound(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) + + ParseNewRound(log types.Log) (*OptimismSequencerUptimeFeedNewRound, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*OptimismSequencerUptimeFeedOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismSequencerUptimeFeedOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*OptimismSequencerUptimeFeedOwnershipTransferred, error) + + FilterRemovedAccess(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedRemovedAccessIterator, error) + + WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedRemovedAccess) (event.Subscription, error) + + ParseRemovedAccess(log types.Log) (*OptimismSequencerUptimeFeedRemovedAccess, error) + + FilterRoundUpdated(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedRoundUpdatedIterator, error) + + WatchRoundUpdated(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedRoundUpdated) (event.Subscription, error) + + ParseRoundUpdated(log types.Log) (*OptimismSequencerUptimeFeedRoundUpdated, error) + + FilterUpdateIgnored(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedUpdateIgnoredIterator, error) + + WatchUpdateIgnored(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedUpdateIgnored) (event.Subscription, error) + + ParseUpdateIgnored(log types.Log) (*OptimismSequencerUptimeFeedUpdateIgnored, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/latest/optimism_validator/optimism_validator.go b/gethwrappers/l2ep/generated/latest/optimism_validator/optimism_validator.go new file mode 100644 index 0000000000..ba4a45cbeb --- /dev/null +++ b/gethwrappers/l2ep/generated/latest/optimism_validator/optimism_validator.go @@ -0,0 +1,1656 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package optimism_validator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var OptimismValidatorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"l1CrossDomainMessengerAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2UptimeFeedAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_UPTIME_FEED_ADDR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validate\",\"inputs\":[{\"name\":\"previousRoundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"previousAnswer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"currentRoundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"currentAnswer\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AddedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConfigUpdated\",\"inputs\":[{\"name\":\"l1CrossDomainMessengerAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"l2UptimeFeedAddr\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GasLimitUpdated\",\"inputs\":[{\"name\":\"gasLimit\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemovedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatedStatus\",\"inputs\":[{\"name\":\"previousRoundId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"previousAnswer\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"currentRoundId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"currentAnswer\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"L1CrossDomainMessengerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2UptimeFeedAddrZero\",\"inputs\":[]}]", + Bin: "0x60c060405234801562000010575f80fd5b50604051620010f6380380620010f6833981016040819052620000339162000266565b82828233805f816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620001a0565b50506001805460ff60a01b1916600160a01b179055506001600160a01b038316620000fc57604051639c9087c160e01b815260040160405180910390fd5b6001600160a01b0382166200012457604051632ef8090560e01b815260040160405180910390fd5b6001600160a01b03838116608081905290831660a08190526003805463ffffffff191663ffffffff8516908117909155604080519384526020840192909252908201527f50ac1a0ab48727faf611b51ad202bb80d8cc334ca8e64154c3d430fbb23040cb9060600160405180910390a1505050505050620002b8565b336001600160a01b03821603620001fa5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b038116811462000261575f80fd5b919050565b5f805f6060848603121562000279575f80fd5b62000284846200024a565b925062000294602085016200024a565b9150604084015163ffffffff81168114620002ad575f80fd5b809150509250925092565b60805160a051610e0e620002e85f395f8181610119015261097501525f818161031c01526109480152610e0e5ff3fe6080604052600436106100e7575f3560e01c80638038e4a111610087578063beed9b5111610057578063beed9b51146102bb578063dc7f0124146102da578063eda066f71461030b578063f2fde38b1461033e575f80fd5b80638038e4a1146102405780638823da6c146102545780638da5cb5b14610273578063a118f2491461029c575f80fd5b80631a93d1c3116100c25780631a93d1c3146101ba57806352d84c62146101de5780636b14daf8146101fd57806379ba50971461022c575f80fd5b80630a756983146100f2578063122555ff14610108578063181f5a7714610165575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5061010661035d565b005b348015610113575f80fd5b5061013b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610170575f80fd5b506101ad6040518060400160405280601b81526020017f4f7074696d69736d56616c696461746f7220312e312e302d646576000000000081525081565b60405161015c9190610c11565b3480156101c5575f80fd5b5060035460405163ffffffff909116815260200161015c565b3480156101e9575f80fd5b506101066101f8366004610c23565b6103db565b348015610208575f80fd5b5061021c610217366004610c9b565b61044d565b604051901515815260200161015c565b348015610237575f80fd5b506101066104a2565b34801561024b575f80fd5b506101066105a3565b34801561025f575f80fd5b5061010661026e366004610d75565b610636565b34801561027e575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661013b565b3480156102a7575f80fd5b506101066102b6366004610d75565b6106e9565b3480156102c6575f80fd5b5061021c6102d5366004610d8e565b61079b565b3480156102e5575f80fd5b5060015461021c9074010000000000000000000000000000000000000000900460ff1681565b348015610316575f80fd5b5061013b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610349575f80fd5b50610106610358366004610d75565b610a2b565b610365610a3c565b60015474010000000000000000000000000000000000000000900460ff16156103d957600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638905f90a15b565b6103e3610a3c565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff83169081179091556040519081527f501c51f34bf3d8589156f7fd37055e69375b40034d9f99365cb3290b5d983c91906020015b60405180910390a150565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081205460ff168061049b575060015474010000000000000000000000000000000000000000900460ff16155b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6105ab610a3c565b60015474010000000000000000000000000000000000000000900460ff166103d957600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480905f90a1565b61063e610a3c565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff16156106e65773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d19101610442565b50565b6106f1610a3c565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff166106e65773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49101610442565b5f6107db335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061044d92505050565b610841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161051f565b60405160018314602482018190524267ffffffffffffffff811660448401527fed8378f500000000000000000000000000000000000000000000000000000000925f908490606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260035491517f3dbb202b00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691633dbb202b916109a6917f000000000000000000000000000000000000000000000000000000000000000091869163ffffffff1690600401610dbd565b5f604051808303815f87803b1580156109bd575f80fd5b505af11580156109cf573d5f803e3d5ffd5b5050604080518c8152602081018c90529081018a9052606081018990527fdf570e5bda6b7c0c0415ceeafd5f9321908b69023cae41e030a6df91cad90b039250608001905060405180910390a150600198975050505050505050565b610a33610a3c565b6106e681610abc565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146103d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161051f565b3373ffffffffffffffffffffffffffffffffffffffff821603610b3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161051f565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f81518084525f5b81811015610bd457602081850181015186830182015201610bb8565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61049b6020830184610bb0565b5f60208284031215610c33575f80fd5b813563ffffffff8116811461049b575f80fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610c69575f80fd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610cac575f80fd5b610cb583610c46565b9150602083013567ffffffffffffffff80821115610cd1575f80fd5b818501915085601f830112610ce4575f80fd5b813581811115610cf657610cf6610c6e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610d3c57610d3c610c6e565b81604052828152886020848701011115610d54575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215610d85575f80fd5b61049b82610c46565b5f805f8060808587031215610da1575f80fd5b5050823594602084013594506040840135936060013592509050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f610deb6060830185610bb0565b905063ffffffff8316604083015294935050505056fea164736f6c6343000818000a", +} + +var OptimismValidatorABI = OptimismValidatorMetaData.ABI + +var OptimismValidatorBin = OptimismValidatorMetaData.Bin + +func DeployOptimismValidator(auth *bind.TransactOpts, backend bind.ContractBackend, l1CrossDomainMessengerAddress common.Address, l2UptimeFeedAddr common.Address, gasLimit uint32) (common.Address, *types.Transaction, *OptimismValidator, error) { + parsed, err := OptimismValidatorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OptimismValidatorBin), backend, l1CrossDomainMessengerAddress, l2UptimeFeedAddr, gasLimit) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OptimismValidator{address: address, abi: *parsed, OptimismValidatorCaller: OptimismValidatorCaller{contract: contract}, OptimismValidatorTransactor: OptimismValidatorTransactor{contract: contract}, OptimismValidatorFilterer: OptimismValidatorFilterer{contract: contract}}, nil +} + +type OptimismValidator struct { + address common.Address + abi abi.ABI + OptimismValidatorCaller + OptimismValidatorTransactor + OptimismValidatorFilterer +} + +type OptimismValidatorCaller struct { + contract *bind.BoundContract +} + +type OptimismValidatorTransactor struct { + contract *bind.BoundContract +} + +type OptimismValidatorFilterer struct { + contract *bind.BoundContract +} + +type OptimismValidatorSession struct { + Contract *OptimismValidator + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type OptimismValidatorCallerSession struct { + Contract *OptimismValidatorCaller + CallOpts bind.CallOpts +} + +type OptimismValidatorTransactorSession struct { + Contract *OptimismValidatorTransactor + TransactOpts bind.TransactOpts +} + +type OptimismValidatorRaw struct { + Contract *OptimismValidator +} + +type OptimismValidatorCallerRaw struct { + Contract *OptimismValidatorCaller +} + +type OptimismValidatorTransactorRaw struct { + Contract *OptimismValidatorTransactor +} + +func NewOptimismValidator(address common.Address, backend bind.ContractBackend) (*OptimismValidator, error) { + abi, err := abi.JSON(strings.NewReader(OptimismValidatorABI)) + if err != nil { + return nil, err + } + contract, err := bindOptimismValidator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OptimismValidator{address: address, abi: abi, OptimismValidatorCaller: OptimismValidatorCaller{contract: contract}, OptimismValidatorTransactor: OptimismValidatorTransactor{contract: contract}, OptimismValidatorFilterer: OptimismValidatorFilterer{contract: contract}}, nil +} + +func NewOptimismValidatorCaller(address common.Address, caller bind.ContractCaller) (*OptimismValidatorCaller, error) { + contract, err := bindOptimismValidator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OptimismValidatorCaller{contract: contract}, nil +} + +func NewOptimismValidatorTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismValidatorTransactor, error) { + contract, err := bindOptimismValidator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OptimismValidatorTransactor{contract: contract}, nil +} + +func NewOptimismValidatorFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismValidatorFilterer, error) { + contract, err := bindOptimismValidator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OptimismValidatorFilterer{contract: contract}, nil +} + +func bindOptimismValidator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := OptimismValidatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_OptimismValidator *OptimismValidatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismValidator.Contract.OptimismValidatorCaller.contract.Call(opts, result, method, params...) +} + +func (_OptimismValidator *OptimismValidatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismValidator.Contract.OptimismValidatorTransactor.contract.Transfer(opts) +} + +func (_OptimismValidator *OptimismValidatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismValidator.Contract.OptimismValidatorTransactor.contract.Transact(opts, method, params...) +} + +func (_OptimismValidator *OptimismValidatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismValidator.Contract.contract.Call(opts, result, method, params...) +} + +func (_OptimismValidator *OptimismValidatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismValidator.Contract.contract.Transfer(opts) +} + +func (_OptimismValidator *OptimismValidatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismValidator.Contract.contract.Transact(opts, method, params...) +} + +func (_OptimismValidator *OptimismValidatorCaller) L1CROSSDOMAINMESSENGERADDRESS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "L1_CROSS_DOMAIN_MESSENGER_ADDRESS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) L1CROSSDOMAINMESSENGERADDRESS() (common.Address, error) { + return _OptimismValidator.Contract.L1CROSSDOMAINMESSENGERADDRESS(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) L1CROSSDOMAINMESSENGERADDRESS() (common.Address, error) { + return _OptimismValidator.Contract.L1CROSSDOMAINMESSENGERADDRESS(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCaller) L2UPTIMEFEEDADDR(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "L2_UPTIME_FEED_ADDR") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) L2UPTIMEFEEDADDR() (common.Address, error) { + return _OptimismValidator.Contract.L2UPTIMEFEEDADDR(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) L2UPTIMEFEEDADDR() (common.Address, error) { + return _OptimismValidator.Contract.L2UPTIMEFEEDADDR(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCaller) CheckEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "checkEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) CheckEnabled() (bool, error) { + return _OptimismValidator.Contract.CheckEnabled(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) CheckEnabled() (bool, error) { + return _OptimismValidator.Contract.CheckEnabled(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCaller) GetGasLimit(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "getGasLimit") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) GetGasLimit() (uint32, error) { + return _OptimismValidator.Contract.GetGasLimit(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) GetGasLimit() (uint32, error) { + return _OptimismValidator.Contract.GetGasLimit(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCaller) HasAccess(opts *bind.CallOpts, _user common.Address, arg1 []byte) (bool, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "hasAccess", _user, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) HasAccess(_user common.Address, arg1 []byte) (bool, error) { + return _OptimismValidator.Contract.HasAccess(&_OptimismValidator.CallOpts, _user, arg1) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) HasAccess(_user common.Address, arg1 []byte) (bool, error) { + return _OptimismValidator.Contract.HasAccess(&_OptimismValidator.CallOpts, _user, arg1) +} + +func (_OptimismValidator *OptimismValidatorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) Owner() (common.Address, error) { + return _OptimismValidator.Contract.Owner(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) Owner() (common.Address, error) { + return _OptimismValidator.Contract.Owner(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) TypeAndVersion() (string, error) { + return _OptimismValidator.Contract.TypeAndVersion(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) TypeAndVersion() (string, error) { + return _OptimismValidator.Contract.TypeAndVersion(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "acceptOwnership") +} + +func (_OptimismValidator *OptimismValidatorSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismValidator.Contract.AcceptOwnership(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismValidator.Contract.AcceptOwnership(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactor) AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "addAccess", _user) +} + +func (_OptimismValidator *OptimismValidatorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismValidator.Contract.AddAccess(&_OptimismValidator.TransactOpts, _user) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismValidator.Contract.AddAccess(&_OptimismValidator.TransactOpts, _user) +} + +func (_OptimismValidator *OptimismValidatorTransactor) DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "disableAccessCheck") +} + +func (_OptimismValidator *OptimismValidatorSession) DisableAccessCheck() (*types.Transaction, error) { + return _OptimismValidator.Contract.DisableAccessCheck(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) DisableAccessCheck() (*types.Transaction, error) { + return _OptimismValidator.Contract.DisableAccessCheck(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactor) EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "enableAccessCheck") +} + +func (_OptimismValidator *OptimismValidatorSession) EnableAccessCheck() (*types.Transaction, error) { + return _OptimismValidator.Contract.EnableAccessCheck(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) EnableAccessCheck() (*types.Transaction, error) { + return _OptimismValidator.Contract.EnableAccessCheck(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactor) RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "removeAccess", _user) +} + +func (_OptimismValidator *OptimismValidatorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismValidator.Contract.RemoveAccess(&_OptimismValidator.TransactOpts, _user) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismValidator.Contract.RemoveAccess(&_OptimismValidator.TransactOpts, _user) +} + +func (_OptimismValidator *OptimismValidatorTransactor) SetGasLimit(opts *bind.TransactOpts, gasLimit uint32) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "setGasLimit", gasLimit) +} + +func (_OptimismValidator *OptimismValidatorSession) SetGasLimit(gasLimit uint32) (*types.Transaction, error) { + return _OptimismValidator.Contract.SetGasLimit(&_OptimismValidator.TransactOpts, gasLimit) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) SetGasLimit(gasLimit uint32) (*types.Transaction, error) { + return _OptimismValidator.Contract.SetGasLimit(&_OptimismValidator.TransactOpts, gasLimit) +} + +func (_OptimismValidator *OptimismValidatorTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "transferOwnership", to) +} + +func (_OptimismValidator *OptimismValidatorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismValidator.Contract.TransferOwnership(&_OptimismValidator.TransactOpts, to) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismValidator.Contract.TransferOwnership(&_OptimismValidator.TransactOpts, to) +} + +func (_OptimismValidator *OptimismValidatorTransactor) Validate(opts *bind.TransactOpts, previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "validate", previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_OptimismValidator *OptimismValidatorSession) Validate(previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _OptimismValidator.Contract.Validate(&_OptimismValidator.TransactOpts, previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) Validate(previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _OptimismValidator.Contract.Validate(&_OptimismValidator.TransactOpts, previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_OptimismValidator *OptimismValidatorTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismValidator.contract.RawTransact(opts, nil) +} + +func (_OptimismValidator *OptimismValidatorSession) Receive() (*types.Transaction, error) { + return _OptimismValidator.Contract.Receive(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) Receive() (*types.Transaction, error) { + return _OptimismValidator.Contract.Receive(&_OptimismValidator.TransactOpts) +} + +type OptimismValidatorAddedAccessIterator struct { + Event *OptimismValidatorAddedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorAddedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorAddedAccessIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorAddedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorAddedAccess struct { + User common.Address + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterAddedAccess(opts *bind.FilterOpts) (*OptimismValidatorAddedAccessIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return &OptimismValidatorAddedAccessIterator{contract: _OptimismValidator.contract, event: "AddedAccess", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *OptimismValidatorAddedAccess) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorAddedAccess) + if err := _OptimismValidator.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseAddedAccess(log types.Log) (*OptimismValidatorAddedAccess, error) { + event := new(OptimismValidatorAddedAccess) + if err := _OptimismValidator.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorCheckAccessDisabledIterator struct { + Event *OptimismValidatorCheckAccessDisabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorCheckAccessDisabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorCheckAccessDisabledIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorCheckAccessDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorCheckAccessDisabled struct { + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterCheckAccessDisabled(opts *bind.FilterOpts) (*OptimismValidatorCheckAccessDisabledIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return &OptimismValidatorCheckAccessDisabledIterator{contract: _OptimismValidator.contract, event: "CheckAccessDisabled", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *OptimismValidatorCheckAccessDisabled) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorCheckAccessDisabled) + if err := _OptimismValidator.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseCheckAccessDisabled(log types.Log) (*OptimismValidatorCheckAccessDisabled, error) { + event := new(OptimismValidatorCheckAccessDisabled) + if err := _OptimismValidator.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorCheckAccessEnabledIterator struct { + Event *OptimismValidatorCheckAccessEnabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorCheckAccessEnabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorCheckAccessEnabledIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorCheckAccessEnabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorCheckAccessEnabled struct { + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterCheckAccessEnabled(opts *bind.FilterOpts) (*OptimismValidatorCheckAccessEnabledIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return &OptimismValidatorCheckAccessEnabledIterator{contract: _OptimismValidator.contract, event: "CheckAccessEnabled", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *OptimismValidatorCheckAccessEnabled) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorCheckAccessEnabled) + if err := _OptimismValidator.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseCheckAccessEnabled(log types.Log) (*OptimismValidatorCheckAccessEnabled, error) { + event := new(OptimismValidatorCheckAccessEnabled) + if err := _OptimismValidator.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorConfigUpdatedIterator struct { + Event *OptimismValidatorConfigUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorConfigUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorConfigUpdatedIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorConfigUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorConfigUpdated struct { + L1CrossDomainMessengerAddress common.Address + L2UptimeFeedAddr common.Address + GasLimit uint32 + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterConfigUpdated(opts *bind.FilterOpts) (*OptimismValidatorConfigUpdatedIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "ConfigUpdated") + if err != nil { + return nil, err + } + return &OptimismValidatorConfigUpdatedIterator{contract: _OptimismValidator.contract, event: "ConfigUpdated", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchConfigUpdated(opts *bind.WatchOpts, sink chan<- *OptimismValidatorConfigUpdated) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "ConfigUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorConfigUpdated) + if err := _OptimismValidator.contract.UnpackLog(event, "ConfigUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseConfigUpdated(log types.Log) (*OptimismValidatorConfigUpdated, error) { + event := new(OptimismValidatorConfigUpdated) + if err := _OptimismValidator.contract.UnpackLog(event, "ConfigUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorGasLimitUpdatedIterator struct { + Event *OptimismValidatorGasLimitUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorGasLimitUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorGasLimitUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorGasLimitUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorGasLimitUpdatedIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorGasLimitUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorGasLimitUpdated struct { + GasLimit uint32 + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterGasLimitUpdated(opts *bind.FilterOpts) (*OptimismValidatorGasLimitUpdatedIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "GasLimitUpdated") + if err != nil { + return nil, err + } + return &OptimismValidatorGasLimitUpdatedIterator{contract: _OptimismValidator.contract, event: "GasLimitUpdated", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchGasLimitUpdated(opts *bind.WatchOpts, sink chan<- *OptimismValidatorGasLimitUpdated) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "GasLimitUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorGasLimitUpdated) + if err := _OptimismValidator.contract.UnpackLog(event, "GasLimitUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseGasLimitUpdated(log types.Log) (*OptimismValidatorGasLimitUpdated, error) { + event := new(OptimismValidatorGasLimitUpdated) + if err := _OptimismValidator.contract.UnpackLog(event, "GasLimitUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorOwnershipTransferRequestedIterator struct { + Event *OptimismValidatorOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismValidatorOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismValidatorOwnershipTransferRequestedIterator{contract: _OptimismValidator.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismValidatorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorOwnershipTransferRequested) + if err := _OptimismValidator.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseOwnershipTransferRequested(log types.Log) (*OptimismValidatorOwnershipTransferRequested, error) { + event := new(OptimismValidatorOwnershipTransferRequested) + if err := _OptimismValidator.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorOwnershipTransferredIterator struct { + Event *OptimismValidatorOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismValidatorOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismValidatorOwnershipTransferredIterator{contract: _OptimismValidator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismValidatorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorOwnershipTransferred) + if err := _OptimismValidator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseOwnershipTransferred(log types.Log) (*OptimismValidatorOwnershipTransferred, error) { + event := new(OptimismValidatorOwnershipTransferred) + if err := _OptimismValidator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorRemovedAccessIterator struct { + Event *OptimismValidatorRemovedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorRemovedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorRemovedAccessIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorRemovedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorRemovedAccess struct { + User common.Address + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterRemovedAccess(opts *bind.FilterOpts) (*OptimismValidatorRemovedAccessIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return &OptimismValidatorRemovedAccessIterator{contract: _OptimismValidator.contract, event: "RemovedAccess", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *OptimismValidatorRemovedAccess) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorRemovedAccess) + if err := _OptimismValidator.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseRemovedAccess(log types.Log) (*OptimismValidatorRemovedAccess, error) { + event := new(OptimismValidatorRemovedAccess) + if err := _OptimismValidator.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorValidatedStatusIterator struct { + Event *OptimismValidatorValidatedStatus + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorValidatedStatusIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorValidatedStatus) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorValidatedStatus) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorValidatedStatusIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorValidatedStatusIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorValidatedStatus struct { + PreviousRoundId *big.Int + PreviousAnswer *big.Int + CurrentRoundId *big.Int + CurrentAnswer *big.Int + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterValidatedStatus(opts *bind.FilterOpts) (*OptimismValidatorValidatedStatusIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "ValidatedStatus") + if err != nil { + return nil, err + } + return &OptimismValidatorValidatedStatusIterator{contract: _OptimismValidator.contract, event: "ValidatedStatus", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchValidatedStatus(opts *bind.WatchOpts, sink chan<- *OptimismValidatorValidatedStatus) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "ValidatedStatus") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorValidatedStatus) + if err := _OptimismValidator.contract.UnpackLog(event, "ValidatedStatus", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseValidatedStatus(log types.Log) (*OptimismValidatorValidatedStatus, error) { + event := new(OptimismValidatorValidatedStatus) + if err := _OptimismValidator.contract.UnpackLog(event, "ValidatedStatus", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (OptimismValidatorAddedAccess) Topic() common.Hash { + return common.HexToHash("0x87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db4") +} + +func (OptimismValidatorCheckAccessDisabled) Topic() common.Hash { + return common.HexToHash("0x3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638") +} + +func (OptimismValidatorCheckAccessEnabled) Topic() common.Hash { + return common.HexToHash("0xaebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480") +} + +func (OptimismValidatorConfigUpdated) Topic() common.Hash { + return common.HexToHash("0x50ac1a0ab48727faf611b51ad202bb80d8cc334ca8e64154c3d430fbb23040cb") +} + +func (OptimismValidatorGasLimitUpdated) Topic() common.Hash { + return common.HexToHash("0x501c51f34bf3d8589156f7fd37055e69375b40034d9f99365cb3290b5d983c91") +} + +func (OptimismValidatorOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (OptimismValidatorOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (OptimismValidatorRemovedAccess) Topic() common.Hash { + return common.HexToHash("0x3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d1") +} + +func (OptimismValidatorValidatedStatus) Topic() common.Hash { + return common.HexToHash("0xdf570e5bda6b7c0c0415ceeafd5f9321908b69023cae41e030a6df91cad90b03") +} + +func (_OptimismValidator *OptimismValidator) Address() common.Address { + return _OptimismValidator.address +} + +type OptimismValidatorInterface interface { + L1CROSSDOMAINMESSENGERADDRESS(opts *bind.CallOpts) (common.Address, error) + + L2UPTIMEFEEDADDR(opts *bind.CallOpts) (common.Address, error) + + CheckEnabled(opts *bind.CallOpts) (bool, error) + + GetGasLimit(opts *bind.CallOpts) (uint32, error) + + HasAccess(opts *bind.CallOpts, _user common.Address, arg1 []byte) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + SetGasLimit(opts *bind.TransactOpts, gasLimit uint32) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + Validate(opts *bind.TransactOpts, previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterAddedAccess(opts *bind.FilterOpts) (*OptimismValidatorAddedAccessIterator, error) + + WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *OptimismValidatorAddedAccess) (event.Subscription, error) + + ParseAddedAccess(log types.Log) (*OptimismValidatorAddedAccess, error) + + FilterCheckAccessDisabled(opts *bind.FilterOpts) (*OptimismValidatorCheckAccessDisabledIterator, error) + + WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *OptimismValidatorCheckAccessDisabled) (event.Subscription, error) + + ParseCheckAccessDisabled(log types.Log) (*OptimismValidatorCheckAccessDisabled, error) + + FilterCheckAccessEnabled(opts *bind.FilterOpts) (*OptimismValidatorCheckAccessEnabledIterator, error) + + WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *OptimismValidatorCheckAccessEnabled) (event.Subscription, error) + + ParseCheckAccessEnabled(log types.Log) (*OptimismValidatorCheckAccessEnabled, error) + + FilterConfigUpdated(opts *bind.FilterOpts) (*OptimismValidatorConfigUpdatedIterator, error) + + WatchConfigUpdated(opts *bind.WatchOpts, sink chan<- *OptimismValidatorConfigUpdated) (event.Subscription, error) + + ParseConfigUpdated(log types.Log) (*OptimismValidatorConfigUpdated, error) + + FilterGasLimitUpdated(opts *bind.FilterOpts) (*OptimismValidatorGasLimitUpdatedIterator, error) + + WatchGasLimitUpdated(opts *bind.WatchOpts, sink chan<- *OptimismValidatorGasLimitUpdated) (event.Subscription, error) + + ParseGasLimitUpdated(log types.Log) (*OptimismValidatorGasLimitUpdated, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismValidatorOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismValidatorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*OptimismValidatorOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismValidatorOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismValidatorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*OptimismValidatorOwnershipTransferred, error) + + FilterRemovedAccess(opts *bind.FilterOpts) (*OptimismValidatorRemovedAccessIterator, error) + + WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *OptimismValidatorRemovedAccess) (event.Subscription, error) + + ParseRemovedAccess(log types.Log) (*OptimismValidatorRemovedAccess, error) + + FilterValidatedStatus(opts *bind.FilterOpts) (*OptimismValidatorValidatedStatusIterator, error) + + WatchValidatedStatus(opts *bind.WatchOpts, sink chan<- *OptimismValidatorValidatedStatus) (event.Subscription, error) + + ParseValidatedStatus(log types.Log) (*OptimismValidatorValidatedStatus, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/latest/scroll_cross_domain_forwarder/scroll_cross_domain_forwarder.go b/gethwrappers/l2ep/generated/latest/scroll_cross_domain_forwarder/scroll_cross_domain_forwarder.go new file mode 100644 index 0000000000..0e1112b78a --- /dev/null +++ b/gethwrappers/l2ep/generated/latest/scroll_cross_domain_forwarder/scroll_cross_domain_forwarder.go @@ -0,0 +1,928 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package scroll_cross_domain_forwarder + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ScrollCrossDomainForwarderMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"crossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"contract IScrollMessenger\"},{\"name\":\"l1OwnerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptL1Ownership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"crossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forward\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferL1Ownership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"L1OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBalance\",\"inputs\":[{\"name\":\"balance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + Bin: "0x60a060405234801562000010575f80fd5b506040516200125e3803806200125e833981016040819052620000339162000264565b8033805f816200008a5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000bc57620000bc8162000146565b505050620000d081620001f060201b60201c565b506001600160a01b038216620001335760405162461bcd60e51b815260206004820152602160248201527f496e76616c69642078446f6d61696e204d657373656e676572206164647265736044820152607360f81b606482015260840162000081565b506001600160a01b0316608052620002a1565b336001600160a01b03821603620001a05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000081565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600280546001600160a01b038381166001600160a01b03198084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b6001600160a01b038116811462000261575f80fd5b50565b5f806040838503121562000276575f80fd5b825162000283816200024c565b602084015190925062000296816200024c565b809150509250929050565b608051610f7a620002e45f395f818161016a015281816101c20152818161027f015281816104d001528181610588015281816106da01526107a80152610f7a5ff3fe608060405234801561000f575f80fd5b506004361061009f575f3560e01c806396b8d7c011610072578063d2db637211610058578063d2db637214610137578063f2fde38b14610155578063f43b361314610168575f80fd5b806396b8d7c01461011c578063b2ec07871461012f575f80fd5b8063181f5a77146100a35780636fadcf72146100c157806379ba5097146100d65780638da5cb5b146100de575b5f80fd5b6100ab61018e565b6040516100b89190610d7e565b60405180910390f35b6100d46100cf366004610e1c565b6101aa565b005b6100d46103bc565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b8565b6100d461012a366004610ef8565b6104b8565b6100d46106c2565b60025473ffffffffffffffffffffffffffffffffffffffff166100f7565b6100d4610163366004610ef8565b6108b6565b7f00000000000000000000000000000000000000000000000000000000000000006100f7565b604051806060016040528060248152602001610f4a6024913981565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461024e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064015b60405180910390fd5b60025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030a9190610f13565b73ffffffffffffffffffffffffffffffffffffffff16146103ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f65720000000000000000000000000000000000000000000000000000000000006064820152608401610245565b6103b782826108c7565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461043d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610245565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610557576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e67657200006044820152606401610245565b60025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106139190610f13565b73ffffffffffffffffffffffffffffffffffffffff16146106b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f65720000000000000000000000000000000000000000000000000000000000006064820152608401610245565b6106bf816108db565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e67657200006044820152606401610245565b600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff928316927f00000000000000000000000000000000000000000000000000000000000000001691636e296e459160048083019260209291908290030181865afa1580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108159190610f13565b73ffffffffffffffffffffffffffffffffffffffff1614610892576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d7573742062652070726f706f736564204c31206f776e6572000000000000006044820152606401610245565b6003546108b49073ffffffffffffffffffffffffffffffffffffffff166109d0565b565b6108be610a51565b6106bf81610ad1565b60606108d483835f610bc5565b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff82160361095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610245565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907f55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f905f90a350565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146108b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610245565b3373ffffffffffffffffffffffffffffffffffffffff821603610b50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610245565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b606081471015610c0a576040517fcf47918100000000000000000000000000000000000000000000000000000000815247600482015260248101839052604401610245565b5f808573ffffffffffffffffffffffffffffffffffffffff168486604051610c329190610f2e565b5f6040518083038185875af1925050503d805f8114610c6c576040519150601f19603f3d011682016040523d82523d5f602084013e610c71565b606091505b5091509150610c81868383610c8b565b9695505050505050565b606082610ca057610c9b82610d1a565b6108d4565b8151158015610cc4575073ffffffffffffffffffffffffffffffffffffffff84163b155b15610d13576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610245565b50806108d4565b805115610d2a5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b83811015610d76578181015183820152602001610d5e565b50505f910152565b602081525f8251806020840152610d9c816040850160208701610d5c565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff811681146106bf575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610e2d575f80fd5b8235610e3881610dce565b9150602083013567ffffffffffffffff80821115610e54575f80fd5b818501915085601f830112610e67575f80fd5b813581811115610e7957610e79610def565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610ebf57610ebf610def565b81604052828152886020848701011115610ed7575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215610f08575f80fd5b81356108d481610dce565b5f60208284031215610f23575f80fd5b81516108d481610dce565b5f8251610f3f818460208701610d5c565b919091019291505056fe5363726f6c6c43726f7373446f6d61696e466f7277617264657220312e312e302d646576a164736f6c6343000818000a", +} + +var ScrollCrossDomainForwarderABI = ScrollCrossDomainForwarderMetaData.ABI + +var ScrollCrossDomainForwarderBin = ScrollCrossDomainForwarderMetaData.Bin + +func DeployScrollCrossDomainForwarder(auth *bind.TransactOpts, backend bind.ContractBackend, crossDomainMessengerAddr common.Address, l1OwnerAddr common.Address) (common.Address, *types.Transaction, *ScrollCrossDomainForwarder, error) { + parsed, err := ScrollCrossDomainForwarderMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ScrollCrossDomainForwarderBin), backend, crossDomainMessengerAddr, l1OwnerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ScrollCrossDomainForwarder{address: address, abi: *parsed, ScrollCrossDomainForwarderCaller: ScrollCrossDomainForwarderCaller{contract: contract}, ScrollCrossDomainForwarderTransactor: ScrollCrossDomainForwarderTransactor{contract: contract}, ScrollCrossDomainForwarderFilterer: ScrollCrossDomainForwarderFilterer{contract: contract}}, nil +} + +type ScrollCrossDomainForwarder struct { + address common.Address + abi abi.ABI + ScrollCrossDomainForwarderCaller + ScrollCrossDomainForwarderTransactor + ScrollCrossDomainForwarderFilterer +} + +type ScrollCrossDomainForwarderCaller struct { + contract *bind.BoundContract +} + +type ScrollCrossDomainForwarderTransactor struct { + contract *bind.BoundContract +} + +type ScrollCrossDomainForwarderFilterer struct { + contract *bind.BoundContract +} + +type ScrollCrossDomainForwarderSession struct { + Contract *ScrollCrossDomainForwarder + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ScrollCrossDomainForwarderCallerSession struct { + Contract *ScrollCrossDomainForwarderCaller + CallOpts bind.CallOpts +} + +type ScrollCrossDomainForwarderTransactorSession struct { + Contract *ScrollCrossDomainForwarderTransactor + TransactOpts bind.TransactOpts +} + +type ScrollCrossDomainForwarderRaw struct { + Contract *ScrollCrossDomainForwarder +} + +type ScrollCrossDomainForwarderCallerRaw struct { + Contract *ScrollCrossDomainForwarderCaller +} + +type ScrollCrossDomainForwarderTransactorRaw struct { + Contract *ScrollCrossDomainForwarderTransactor +} + +func NewScrollCrossDomainForwarder(address common.Address, backend bind.ContractBackend) (*ScrollCrossDomainForwarder, error) { + abi, err := abi.JSON(strings.NewReader(ScrollCrossDomainForwarderABI)) + if err != nil { + return nil, err + } + contract, err := bindScrollCrossDomainForwarder(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarder{address: address, abi: abi, ScrollCrossDomainForwarderCaller: ScrollCrossDomainForwarderCaller{contract: contract}, ScrollCrossDomainForwarderTransactor: ScrollCrossDomainForwarderTransactor{contract: contract}, ScrollCrossDomainForwarderFilterer: ScrollCrossDomainForwarderFilterer{contract: contract}}, nil +} + +func NewScrollCrossDomainForwarderCaller(address common.Address, caller bind.ContractCaller) (*ScrollCrossDomainForwarderCaller, error) { + contract, err := bindScrollCrossDomainForwarder(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderCaller{contract: contract}, nil +} + +func NewScrollCrossDomainForwarderTransactor(address common.Address, transactor bind.ContractTransactor) (*ScrollCrossDomainForwarderTransactor, error) { + contract, err := bindScrollCrossDomainForwarder(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderTransactor{contract: contract}, nil +} + +func NewScrollCrossDomainForwarderFilterer(address common.Address, filterer bind.ContractFilterer) (*ScrollCrossDomainForwarderFilterer, error) { + contract, err := bindScrollCrossDomainForwarder(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderFilterer{contract: contract}, nil +} + +func bindScrollCrossDomainForwarder(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ScrollCrossDomainForwarderMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollCrossDomainForwarder.Contract.ScrollCrossDomainForwarderCaller.contract.Call(opts, result, method, params...) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.ScrollCrossDomainForwarderTransactor.contract.Transfer(opts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.ScrollCrossDomainForwarderTransactor.contract.Transact(opts, method, params...) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollCrossDomainForwarder.Contract.contract.Call(opts, result, method, params...) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.contract.Transfer(opts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.contract.Transact(opts, method, params...) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCaller) CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollCrossDomainForwarder.contract.Call(opts, &out, "crossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) CrossDomainMessenger() (common.Address, error) { + return _ScrollCrossDomainForwarder.Contract.CrossDomainMessenger(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCallerSession) CrossDomainMessenger() (common.Address, error) { + return _ScrollCrossDomainForwarder.Contract.CrossDomainMessenger(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCaller) L1Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollCrossDomainForwarder.contract.Call(opts, &out, "l1Owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) L1Owner() (common.Address, error) { + return _ScrollCrossDomainForwarder.Contract.L1Owner(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCallerSession) L1Owner() (common.Address, error) { + return _ScrollCrossDomainForwarder.Contract.L1Owner(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollCrossDomainForwarder.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) Owner() (common.Address, error) { + return _ScrollCrossDomainForwarder.Contract.Owner(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCallerSession) Owner() (common.Address, error) { + return _ScrollCrossDomainForwarder.Contract.Owner(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ScrollCrossDomainForwarder.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) TypeAndVersion() (string, error) { + return _ScrollCrossDomainForwarder.Contract.TypeAndVersion(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCallerSession) TypeAndVersion() (string, error) { + return _ScrollCrossDomainForwarder.Contract.TypeAndVersion(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactor) AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.contract.Transact(opts, "acceptL1Ownership") +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.AcceptL1Ownership(&_ScrollCrossDomainForwarder.TransactOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.AcceptL1Ownership(&_ScrollCrossDomainForwarder.TransactOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.contract.Transact(opts, "acceptOwnership") +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.AcceptOwnership(&_ScrollCrossDomainForwarder.TransactOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.AcceptOwnership(&_ScrollCrossDomainForwarder.TransactOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactor) Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.contract.Transact(opts, "forward", target, data) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.Forward(&_ScrollCrossDomainForwarder.TransactOpts, target, data) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.Forward(&_ScrollCrossDomainForwarder.TransactOpts, target, data) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactor) TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.contract.Transact(opts, "transferL1Ownership", to) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.TransferL1Ownership(&_ScrollCrossDomainForwarder.TransactOpts, to) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.TransferL1Ownership(&_ScrollCrossDomainForwarder.TransactOpts, to) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.contract.Transact(opts, "transferOwnership", to) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.TransferOwnership(&_ScrollCrossDomainForwarder.TransactOpts, to) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.TransferOwnership(&_ScrollCrossDomainForwarder.TransactOpts, to) +} + +type ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator struct { + Event *ScrollCrossDomainForwarderL1OwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainForwarderL1OwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.FilterLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator{contract: _ScrollCrossDomainForwarder.contract, event: "L1OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.WatchLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainForwarderL1OwnershipTransferRequested) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) ParseL1OwnershipTransferRequested(log types.Log) (*ScrollCrossDomainForwarderL1OwnershipTransferRequested, error) { + event := new(ScrollCrossDomainForwarderL1OwnershipTransferRequested) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollCrossDomainForwarderL1OwnershipTransferredIterator struct { + Event *ScrollCrossDomainForwarderL1OwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainForwarderL1OwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainForwarderL1OwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainForwarderL1OwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainForwarderL1OwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderL1OwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.FilterLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderL1OwnershipTransferredIterator{contract: _ScrollCrossDomainForwarder.contract, event: "L1OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.WatchLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainForwarderL1OwnershipTransferred) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) ParseL1OwnershipTransferred(log types.Log) (*ScrollCrossDomainForwarderL1OwnershipTransferred, error) { + event := new(ScrollCrossDomainForwarderL1OwnershipTransferred) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollCrossDomainForwarderOwnershipTransferRequestedIterator struct { + Event *ScrollCrossDomainForwarderOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainForwarderOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainForwarderOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainForwarderOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainForwarderOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderOwnershipTransferRequestedIterator{contract: _ScrollCrossDomainForwarder.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainForwarderOwnershipTransferRequested) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) ParseOwnershipTransferRequested(log types.Log) (*ScrollCrossDomainForwarderOwnershipTransferRequested, error) { + event := new(ScrollCrossDomainForwarderOwnershipTransferRequested) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollCrossDomainForwarderOwnershipTransferredIterator struct { + Event *ScrollCrossDomainForwarderOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainForwarderOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainForwarderOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainForwarderOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainForwarderOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderOwnershipTransferredIterator{contract: _ScrollCrossDomainForwarder.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainForwarderOwnershipTransferred) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) ParseOwnershipTransferred(log types.Log) (*ScrollCrossDomainForwarderOwnershipTransferred, error) { + event := new(ScrollCrossDomainForwarderOwnershipTransferred) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (ScrollCrossDomainForwarderL1OwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0x55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f") +} + +func (ScrollCrossDomainForwarderL1OwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0xb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272") +} + +func (ScrollCrossDomainForwarderOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ScrollCrossDomainForwarderOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarder) Address() common.Address { + return _ScrollCrossDomainForwarder.address +} + +type ScrollCrossDomainForwarderInterface interface { + CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) + + L1Owner(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator, error) + + WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferRequested(log types.Log) (*ScrollCrossDomainForwarderL1OwnershipTransferRequested, error) + + FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderL1OwnershipTransferredIterator, error) + + WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferred(log types.Log) (*ScrollCrossDomainForwarderL1OwnershipTransferred, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ScrollCrossDomainForwarderOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ScrollCrossDomainForwarderOwnershipTransferred, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/latest/scroll_cross_domain_governor/scroll_cross_domain_governor.go b/gethwrappers/l2ep/generated/latest/scroll_cross_domain_governor/scroll_cross_domain_governor.go new file mode 100644 index 0000000000..c945c8f422 --- /dev/null +++ b/gethwrappers/l2ep/generated/latest/scroll_cross_domain_governor/scroll_cross_domain_governor.go @@ -0,0 +1,942 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package scroll_cross_domain_governor + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ScrollCrossDomainGovernorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"crossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"contract IScrollMessenger\"},{\"name\":\"l1OwnerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptL1Ownership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"crossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forward\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forwardDelegate\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferL1Ownership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"L1OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"FailedCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientBalance\",\"inputs\":[{\"name\":\"balance\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"needed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]", + Bin: "0x60a060405234801562000010575f80fd5b506040516200163538038062001635833981016040819052620000339162000264565b8033805f816200008a5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000bc57620000bc8162000146565b505050620000d081620001f060201b60201c565b506001600160a01b038216620001335760405162461bcd60e51b815260206004820152602160248201527f496e76616c69642078446f6d61696e204d657373656e676572206164647265736044820152607360f81b606482015260840162000081565b506001600160a01b0316608052620002a1565b336001600160a01b03821603620001a05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000081565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600280546001600160a01b038381166001600160a01b03198084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b6001600160a01b038116811462000261575f80fd5b50565b5f806040838503121562000276575f80fd5b825162000283816200024c565b602084015190925062000296816200024c565b809150509250929050565b608051611335620003005f395f8181610197015281816101ef015281816102d901528181610330015281816104850152818161056a015281816105c10152818161080d015281816108c501528181610a170152610ae501526113355ff3fe608060405234801561000f575f80fd5b50600436106100b9575f3560e01c806396b8d7c011610072578063d2db637211610058578063d2db637214610164578063f2fde38b14610182578063f43b361314610195575f80fd5b806396b8d7c014610149578063b2ec07871461015c575f80fd5b80636fadcf72116100a25780636fadcf72146100f057806379ba5097146101035780638da5cb5b1461010b575f80fd5b8063181f5a77146100bd57806326929eb6146100db575b5f80fd5b6100c56101bb565b6040516100d2919061113a565b60405180910390f35b6100ee6100e93660046111d8565b6101d7565b005b6100ee6100fe3660046111d8565b61046d565b6100ee6106f9565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d2565b6100ee6101573660046112b4565b6107f5565b6100ee6109ff565b60025473ffffffffffffffffffffffffffffffffffffffff16610124565b6100ee6101903660046112b4565b610bf3565b7f0000000000000000000000000000000000000000000000000000000000000000610124565b6040518060600160405280602381526020016113066023913981565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148061023157505f5473ffffffffffffffffffffffffffffffffffffffff1633145b6102c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572206f60448201527f72206f776e65720000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361045e5760025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103bb91906112cf565b73ffffffffffffffffffffffffffffffffffffffff161461045e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084016102b9565b6104688282610c04565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614806104c757505f5473ffffffffffffffffffffffffffffffffffffffff1633145b610553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572206f60448201527f72206f776e65720000000000000000000000000000000000000000000000000060648201526084016102b9565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036106ef5760025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610628573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064c91906112cf565b73ffffffffffffffffffffffffffffffffffffffff16146106ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084016102b9565b6104688282610c83565b60015473ffffffffffffffffffffffffffffffffffffffff16331461077a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016102b9565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064016102b9565b60025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561092c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095091906112cf565b73ffffffffffffffffffffffffffffffffffffffff16146109f3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084016102b9565b6109fc81610c97565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064016102b9565b600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff928316927f00000000000000000000000000000000000000000000000000000000000000001691636e296e459160048083019260209291908290030181865afa158015610b2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b5291906112cf565b73ffffffffffffffffffffffffffffffffffffffff1614610bcf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d7573742062652070726f706f736564204c31206f776e65720000000000000060448201526064016102b9565b600354610bf19073ffffffffffffffffffffffffffffffffffffffff16610d8c565b565b610bfb610e0d565b6109fc81610e8d565b60605f808473ffffffffffffffffffffffffffffffffffffffff1684604051610c2d91906112ea565b5f60405180830381855af49150503d805f8114610c65576040519150601f19603f3d011682016040523d82523d5f602084013e610c6a565b606091505b5091509150610c7a858383610f81565b95945050505050565b6060610c9083835f611010565b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff821603610d16576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016102b9565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907f55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f905f90a350565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610bf1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016102b9565b3373ffffffffffffffffffffffffffffffffffffffff821603610f0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016102b9565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b606082610f9657610f91826110d6565b610c90565b8151158015610fba575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611009576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016102b9565b5092915050565b606081471015611055576040517fcf479181000000000000000000000000000000000000000000000000000000008152476004820152602481018390526044016102b9565b5f808573ffffffffffffffffffffffffffffffffffffffff16848660405161107d91906112ea565b5f6040518083038185875af1925050503d805f81146110b7576040519150601f19603f3d011682016040523d82523d5f602084013e6110bc565b606091505b50915091506110cc868383610f81565b9695505050505050565b8051156110e65780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8381101561113257818101518382015260200161111a565b50505f910152565b602081525f8251806020840152611158816040850160208701611118565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff811681146109fc575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80604083850312156111e9575f80fd5b82356111f48161118a565b9150602083013567ffffffffffffffff80821115611210575f80fd5b818501915085601f830112611223575f80fd5b813581811115611235576112356111ab565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561127b5761127b6111ab565b81604052828152886020848701011115611293575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f602082840312156112c4575f80fd5b8135610c908161118a565b5f602082840312156112df575f80fd5b8151610c908161118a565b5f82516112fb818460208701611118565b919091019291505056fe5363726f6c6c43726f7373446f6d61696e476f7665726e6f7220312e312e302d646576a164736f6c6343000818000a", +} + +var ScrollCrossDomainGovernorABI = ScrollCrossDomainGovernorMetaData.ABI + +var ScrollCrossDomainGovernorBin = ScrollCrossDomainGovernorMetaData.Bin + +func DeployScrollCrossDomainGovernor(auth *bind.TransactOpts, backend bind.ContractBackend, crossDomainMessengerAddr common.Address, l1OwnerAddr common.Address) (common.Address, *types.Transaction, *ScrollCrossDomainGovernor, error) { + parsed, err := ScrollCrossDomainGovernorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ScrollCrossDomainGovernorBin), backend, crossDomainMessengerAddr, l1OwnerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ScrollCrossDomainGovernor{address: address, abi: *parsed, ScrollCrossDomainGovernorCaller: ScrollCrossDomainGovernorCaller{contract: contract}, ScrollCrossDomainGovernorTransactor: ScrollCrossDomainGovernorTransactor{contract: contract}, ScrollCrossDomainGovernorFilterer: ScrollCrossDomainGovernorFilterer{contract: contract}}, nil +} + +type ScrollCrossDomainGovernor struct { + address common.Address + abi abi.ABI + ScrollCrossDomainGovernorCaller + ScrollCrossDomainGovernorTransactor + ScrollCrossDomainGovernorFilterer +} + +type ScrollCrossDomainGovernorCaller struct { + contract *bind.BoundContract +} + +type ScrollCrossDomainGovernorTransactor struct { + contract *bind.BoundContract +} + +type ScrollCrossDomainGovernorFilterer struct { + contract *bind.BoundContract +} + +type ScrollCrossDomainGovernorSession struct { + Contract *ScrollCrossDomainGovernor + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ScrollCrossDomainGovernorCallerSession struct { + Contract *ScrollCrossDomainGovernorCaller + CallOpts bind.CallOpts +} + +type ScrollCrossDomainGovernorTransactorSession struct { + Contract *ScrollCrossDomainGovernorTransactor + TransactOpts bind.TransactOpts +} + +type ScrollCrossDomainGovernorRaw struct { + Contract *ScrollCrossDomainGovernor +} + +type ScrollCrossDomainGovernorCallerRaw struct { + Contract *ScrollCrossDomainGovernorCaller +} + +type ScrollCrossDomainGovernorTransactorRaw struct { + Contract *ScrollCrossDomainGovernorTransactor +} + +func NewScrollCrossDomainGovernor(address common.Address, backend bind.ContractBackend) (*ScrollCrossDomainGovernor, error) { + abi, err := abi.JSON(strings.NewReader(ScrollCrossDomainGovernorABI)) + if err != nil { + return nil, err + } + contract, err := bindScrollCrossDomainGovernor(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernor{address: address, abi: abi, ScrollCrossDomainGovernorCaller: ScrollCrossDomainGovernorCaller{contract: contract}, ScrollCrossDomainGovernorTransactor: ScrollCrossDomainGovernorTransactor{contract: contract}, ScrollCrossDomainGovernorFilterer: ScrollCrossDomainGovernorFilterer{contract: contract}}, nil +} + +func NewScrollCrossDomainGovernorCaller(address common.Address, caller bind.ContractCaller) (*ScrollCrossDomainGovernorCaller, error) { + contract, err := bindScrollCrossDomainGovernor(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorCaller{contract: contract}, nil +} + +func NewScrollCrossDomainGovernorTransactor(address common.Address, transactor bind.ContractTransactor) (*ScrollCrossDomainGovernorTransactor, error) { + contract, err := bindScrollCrossDomainGovernor(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorTransactor{contract: contract}, nil +} + +func NewScrollCrossDomainGovernorFilterer(address common.Address, filterer bind.ContractFilterer) (*ScrollCrossDomainGovernorFilterer, error) { + contract, err := bindScrollCrossDomainGovernor(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorFilterer{contract: contract}, nil +} + +func bindScrollCrossDomainGovernor(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ScrollCrossDomainGovernorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollCrossDomainGovernor.Contract.ScrollCrossDomainGovernorCaller.contract.Call(opts, result, method, params...) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.ScrollCrossDomainGovernorTransactor.contract.Transfer(opts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.ScrollCrossDomainGovernorTransactor.contract.Transact(opts, method, params...) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollCrossDomainGovernor.Contract.contract.Call(opts, result, method, params...) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.contract.Transfer(opts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.contract.Transact(opts, method, params...) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCaller) CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollCrossDomainGovernor.contract.Call(opts, &out, "crossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) CrossDomainMessenger() (common.Address, error) { + return _ScrollCrossDomainGovernor.Contract.CrossDomainMessenger(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCallerSession) CrossDomainMessenger() (common.Address, error) { + return _ScrollCrossDomainGovernor.Contract.CrossDomainMessenger(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCaller) L1Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollCrossDomainGovernor.contract.Call(opts, &out, "l1Owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) L1Owner() (common.Address, error) { + return _ScrollCrossDomainGovernor.Contract.L1Owner(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCallerSession) L1Owner() (common.Address, error) { + return _ScrollCrossDomainGovernor.Contract.L1Owner(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollCrossDomainGovernor.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) Owner() (common.Address, error) { + return _ScrollCrossDomainGovernor.Contract.Owner(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCallerSession) Owner() (common.Address, error) { + return _ScrollCrossDomainGovernor.Contract.Owner(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ScrollCrossDomainGovernor.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) TypeAndVersion() (string, error) { + return _ScrollCrossDomainGovernor.Contract.TypeAndVersion(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCallerSession) TypeAndVersion() (string, error) { + return _ScrollCrossDomainGovernor.Contract.TypeAndVersion(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactor) AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.contract.Transact(opts, "acceptL1Ownership") +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.AcceptL1Ownership(&_ScrollCrossDomainGovernor.TransactOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.AcceptL1Ownership(&_ScrollCrossDomainGovernor.TransactOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.contract.Transact(opts, "acceptOwnership") +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.AcceptOwnership(&_ScrollCrossDomainGovernor.TransactOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.AcceptOwnership(&_ScrollCrossDomainGovernor.TransactOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactor) Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.contract.Transact(opts, "forward", target, data) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.Forward(&_ScrollCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.Forward(&_ScrollCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactor) ForwardDelegate(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.contract.Transact(opts, "forwardDelegate", target, data) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) ForwardDelegate(target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.ForwardDelegate(&_ScrollCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorSession) ForwardDelegate(target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.ForwardDelegate(&_ScrollCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactor) TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.contract.Transact(opts, "transferL1Ownership", to) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.TransferL1Ownership(&_ScrollCrossDomainGovernor.TransactOpts, to) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.TransferL1Ownership(&_ScrollCrossDomainGovernor.TransactOpts, to) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.contract.Transact(opts, "transferOwnership", to) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.TransferOwnership(&_ScrollCrossDomainGovernor.TransactOpts, to) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.TransferOwnership(&_ScrollCrossDomainGovernor.TransactOpts, to) +} + +type ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator struct { + Event *ScrollCrossDomainGovernorL1OwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainGovernorL1OwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.FilterLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator{contract: _ScrollCrossDomainGovernor.contract, event: "L1OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.WatchLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainGovernorL1OwnershipTransferRequested) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) ParseL1OwnershipTransferRequested(log types.Log) (*ScrollCrossDomainGovernorL1OwnershipTransferRequested, error) { + event := new(ScrollCrossDomainGovernorL1OwnershipTransferRequested) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollCrossDomainGovernorL1OwnershipTransferredIterator struct { + Event *ScrollCrossDomainGovernorL1OwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainGovernorL1OwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainGovernorL1OwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainGovernorL1OwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainGovernorL1OwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorL1OwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.FilterLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorL1OwnershipTransferredIterator{contract: _ScrollCrossDomainGovernor.contract, event: "L1OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.WatchLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainGovernorL1OwnershipTransferred) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) ParseL1OwnershipTransferred(log types.Log) (*ScrollCrossDomainGovernorL1OwnershipTransferred, error) { + event := new(ScrollCrossDomainGovernorL1OwnershipTransferred) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollCrossDomainGovernorOwnershipTransferRequestedIterator struct { + Event *ScrollCrossDomainGovernorOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainGovernorOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainGovernorOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainGovernorOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainGovernorOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorOwnershipTransferRequestedIterator{contract: _ScrollCrossDomainGovernor.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainGovernorOwnershipTransferRequested) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) ParseOwnershipTransferRequested(log types.Log) (*ScrollCrossDomainGovernorOwnershipTransferRequested, error) { + event := new(ScrollCrossDomainGovernorOwnershipTransferRequested) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollCrossDomainGovernorOwnershipTransferredIterator struct { + Event *ScrollCrossDomainGovernorOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainGovernorOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainGovernorOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainGovernorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainGovernorOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorOwnershipTransferredIterator{contract: _ScrollCrossDomainGovernor.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainGovernorOwnershipTransferred) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) ParseOwnershipTransferred(log types.Log) (*ScrollCrossDomainGovernorOwnershipTransferred, error) { + event := new(ScrollCrossDomainGovernorOwnershipTransferred) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (ScrollCrossDomainGovernorL1OwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0x55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f") +} + +func (ScrollCrossDomainGovernorL1OwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0xb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272") +} + +func (ScrollCrossDomainGovernorOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ScrollCrossDomainGovernorOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernor) Address() common.Address { + return _ScrollCrossDomainGovernor.address +} + +type ScrollCrossDomainGovernorInterface interface { + CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) + + L1Owner(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + ForwardDelegate(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator, error) + + WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferRequested(log types.Log) (*ScrollCrossDomainGovernorL1OwnershipTransferRequested, error) + + FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorL1OwnershipTransferredIterator, error) + + WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferred(log types.Log) (*ScrollCrossDomainGovernorL1OwnershipTransferred, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ScrollCrossDomainGovernorOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ScrollCrossDomainGovernorOwnershipTransferred, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/latest/scroll_sequencer_uptime_feed/scroll_sequencer_uptime_feed.go b/gethwrappers/l2ep/generated/latest/scroll_sequencer_uptime_feed/scroll_sequencer_uptime_feed.go new file mode 100644 index 0000000000..2a957ec0d3 --- /dev/null +++ b/gethwrappers/l2ep/generated/latest/scroll_sequencer_uptime_feed/scroll_sequencer_uptime_feed.go @@ -0,0 +1,2187 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package scroll_sequencer_uptime_feed + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ScrollSequencerUptimeFeedMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"l1SenderAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2CrossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStatus\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"description\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAnswer\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoundData\",\"inputs\":[{\"name\":\"_roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"outputs\":[{\"name\":\"roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"},{\"name\":\"answer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"answeredInRound\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTimestamp\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_calldata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestAnswer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestRound\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestRoundData\",\"inputs\":[],\"outputs\":[{\"name\":\"roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"},{\"name\":\"answer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"answeredInRound\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferL1Sender\",\"inputs\":[{\"name\":\"newSender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AddedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AnswerUpdated\",\"inputs\":[{\"name\":\"current\",\"type\":\"int256\",\"indexed\":true,\"internalType\":\"int256\"},{\"name\":\"roundId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1SenderTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewRound\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"startedBy\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemovedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoundUpdated\",\"inputs\":[{\"name\":\"status\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"updatedAt\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdateIgnored\",\"inputs\":[{\"name\":\"latestStatus\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"latestTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"incomingStatus\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"incomingTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoDataPresent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6101206040525f60a081905260c081905260e081905261010052600480546001600160d81b031916905534801562000035575f80fd5b5060405162001ec738038062001ec7833981016040819052620000589162000413565b828133805f81620000b05760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000e257620000e2816200014f565b50506001805460ff60a01b1916600160a01b179055506200010382620001f9565b620001116001824262000262565b50506001600160a01b0382166200013b5760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03166080525062000461565b336001600160a01b03821603620001a95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620000a7565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6003546001600160a01b0390811690821681146200025e57600380546001600160a01b0319166001600160a01b0384811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18905f90a35b5050565b60408051606080820183526001600160401b0384811680845242821660208086018281528915158789018181526001600160501b038d165f818152600586528b902099518a54945192511515600160801b0260ff60801b19938a1668010000000000000000026001600160801b03199096169190991617939093171695909517909655865160808101885286815280820184905280880183905290940183905260048054600160d01b90940260ff60d01b19600160901b90930292909216600160901b600160d81b03196a010000000000000000000085026001600160901b0319909616881795909517949094169390931717909155925192835233927f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271910160405180910390a36001600160501b0383166200039f83620003e0565b6040516001600160401b03841681527f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f9060200160405180910390a3505050565b5f81620003ee575f620003f1565b60015b92915050565b80516001600160a01b03811681146200040e575f80fd5b919050565b5f805f6060848603121562000426575f80fd5b6200043184620003f7565b92506200044160208501620003f7565b91506040840151801515811462000456575f80fd5b809150509250925092565b608051611a46620004815f395f818161124601526112870152611a465ff3fe608060405234801561000f575f80fd5b5060043610610184575f3560e01c80638205bf6a116100dd578063b633620c11610088578063ed8378f511610063578063ed8378f514610390578063f2fde38b146103a3578063feaf968c146103b6575f80fd5b8063b633620c1461033a578063b7558b7a1461034d578063dc7f01241461036b575f80fd5b80639a6fc8f5116100b85780639a6fc8f5146102ca578063a118f24914610314578063b5ab58dc14610327575f80fd5b80638205bf6a146102715780638823da6c146102795780638da5cb5b1461028c575f80fd5b806354fd4d501161013d5780637284e416116101185780637284e4161461022557806379ba5097146102615780638038e4a114610269575f80fd5b806354fd4d50146101f2578063668a0f02146101fa5780636b14daf814610202575f80fd5b8063284afc081161016d578063284afc08146101b0578063313ce567146101c357806350d25bcd146101dc575f80fd5b80630a75698314610188578063181f5a7714610192575b5f80fd5b6101906103be565b005b61019a61043c565b6040516101a79190611776565b60405180910390f35b6101906101be366004611801565b610458565b6101ca5f81565b60405160ff90911681526020016101a7565b6101e461046c565b6040519081526020016101a7565b6101e4600181565b6101e4610549565b610215610210366004611849565b610602565b60405190151581526020016101a7565b61019a6040518060400160405280601f81526020017f4c322053657175656e63657220557074696d652053746174757320466565640081525081565b610190610634565b610190610730565b6101e46107c3565b610190610287366004611801565b610888565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a7565b6102dd6102d8366004611925565b61093f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a7565b610190610322366004611801565b610a9f565b6101e461033536600461194e565b610b51565b6101e461034836600461194e565b610c77565b60035473ffffffffffffffffffffffffffffffffffffffff166102a5565b6001546102159074010000000000000000000000000000000000000000900460ff1681565b61019061039e366004611965565b610d84565b6101906103b1366004611801565b610f32565b6102dd610f43565b6103c6611076565b60015474010000000000000000000000000000000000000000900460ff161561043a57600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638905f90a15b565b604051806060016040528060238152602001611a176023913981565b610460611076565b610469816110f6565b50565b5f6104ac335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600454610544907a010000000000000000000000000000000000000000000000000000900460ff16611190565b905090565b5f610589335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b6105ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b5060045469ffffffffffffffffffff1690565b5f61060d83836111a4565b8061062d575073ffffffffffffffffffffffffffffffffffffffff831632145b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161050e565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610738611076565b60015474010000000000000000000000000000000000000000900460ff1661043a57600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480905f90a1565b5f610803335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b506004546a0100000000000000000000900467ffffffffffffffff1690565b610890611076565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff16156104695773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d191015b60405180910390a150565b5f805f805f610983335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b6109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b6109fe8669ffffffffffffffffffff166111f8565b610a34576040517fbb25870000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b69ffffffffffffffffffff86165f90815260056020526040902080548790610a7290700100000000000000000000000000000000900460ff16611190565b91549098919767ffffffffffffffff80831698506801000000000000000090920490911695509350915050565b610aa7611076565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff166104695773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49101610934565b5f610b91335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b610c00826111f8565b610c36576040517fbb25870000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b69ffffffffffffffffffff82165f90815260056020526040902054610c7190700100000000000000000000000000000000900460ff16611190565b92915050565b5f610cb7335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b610d26826111f8565b610d5c576040517fbb25870000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5069ffffffffffffffffffff165f9081526005602052604090205467ffffffffffffffff1690565b600354610da69073ffffffffffffffffffffffffffffffffffffffff1661122e565b5f610e53604080516080810182525f808252602082018190529181018290526060810191909152506040805160808101825260045469ffffffffffffffffffff811682526a0100000000000000000000810467ffffffffffffffff90811660208401527201000000000000000000000000000000000000820416928201929092527a01000000000000000000000000000000000000000000000000000090910460ff161515606082015290565b90508167ffffffffffffffff16816020015167ffffffffffffffff161115610ee4577fe4a6e16301740042c17431042adb8f60454c18fb5934dd4c456269c0dc388fdf816060015182602001518585604051610ed79493929190931515845267ffffffffffffffff9283166020850152901515604084015216606082015260800190565b60405180910390a1505050565b8215158160600151151503610f04578051610eff9084611362565b505050565b6001815f01818151610f1691906119ac565b69ffffffffffffffffffff169052508051610eff908484611450565b610f3a611076565b61046981611682565b5f805f805f610f87335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610fed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b6004805469ffffffffffffffffffff811690611029907a010000000000000000000000000000000000000000000000000000900460ff16611190565b9154909791965067ffffffffffffffff6a01000000000000000000008204811696507201000000000000000000000000000000000000820416945069ffffffffffffffffffff1692509050565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461043a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161050e565b60035473ffffffffffffffffffffffffffffffffffffffff908116908216811461118c57600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18905f90a35b5050565b5f8161119c575f610c71565b600192915050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081205460ff168061062d57505060015474010000000000000000000000000000000000000000900460ff161592915050565b5f8082118015611212575069ffffffffffffffffffff8211155b8015610c7157505060045469ffffffffffffffffffff16101590565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614158061132b57508073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131291906119fb565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610469576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b69ffffffffffffffffffff82165f90815260056020526040902080547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff1690810291909117909155600480547fffffffffffff0000000000000000ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000009092029190911790557f297642343ed2faefb1a411b39fc449eae700e54223d5d0499a9421eb6f68f66a61142c82611190565b6040805191825267ffffffffffffffff421660208301520160405180910390a15050565b604080516060808201835267ffffffffffffffff848116808452428216602080860182815289151587890181815269ffffffffffffffffffff8d165f818152600586528b902099518a54945192511515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff938a1668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090961691909916179390931716959095179096558651608081018852868152808201849052808801839052909401839052600480547a0100000000000000000000000000000000000000000000000000009094027fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff7201000000000000000000000000000000000000909302929092167fffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff6a010000000000000000000085027fffffffffffffffffffffffffffff000000000000000000000000000000000000909616881795909517949094169390931717909155925192835233927f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271910160405180910390a38269ffffffffffffffffffff1661164083611190565b60405167ffffffffffffffff841681527f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f9060200160405180910390a3505050565b3373ffffffffffffffffffffffffffffffffffffffff821603611701576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161050e565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f602080835283518060208501525f5b818110156117a257858101830151858201604001528201611786565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610469575f80fd5b5f60208284031215611811575f80fd5b813561062d816117e0565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f806040838503121561185a575f80fd5b8235611865816117e0565b9150602083013567ffffffffffffffff80821115611881575f80fd5b818501915085601f830112611894575f80fd5b8135818111156118a6576118a661181c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156118ec576118ec61181c565b81604052828152886020848701011115611904575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215611935575f80fd5b813569ffffffffffffffffffff8116811461062d575f80fd5b5f6020828403121561195e575f80fd5b5035919050565b5f8060408385031215611976575f80fd5b82358015158114611985575f80fd5b9150602083013567ffffffffffffffff811681146119a1575f80fd5b809150509250929050565b69ffffffffffffffffffff8181168382160190808211156119f4577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5092915050565b5f60208284031215611a0b575f80fd5b815161062d816117e056fe5363726f6c6c53657175656e636572557074696d654665656420312e312e302d646576a164736f6c6343000818000a", +} + +var ScrollSequencerUptimeFeedABI = ScrollSequencerUptimeFeedMetaData.ABI + +var ScrollSequencerUptimeFeedBin = ScrollSequencerUptimeFeedMetaData.Bin + +func DeployScrollSequencerUptimeFeed(auth *bind.TransactOpts, backend bind.ContractBackend, l1SenderAddress common.Address, l2CrossDomainMessengerAddr common.Address, initialStatus bool) (common.Address, *types.Transaction, *ScrollSequencerUptimeFeed, error) { + parsed, err := ScrollSequencerUptimeFeedMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ScrollSequencerUptimeFeedBin), backend, l1SenderAddress, l2CrossDomainMessengerAddr, initialStatus) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ScrollSequencerUptimeFeed{address: address, abi: *parsed, ScrollSequencerUptimeFeedCaller: ScrollSequencerUptimeFeedCaller{contract: contract}, ScrollSequencerUptimeFeedTransactor: ScrollSequencerUptimeFeedTransactor{contract: contract}, ScrollSequencerUptimeFeedFilterer: ScrollSequencerUptimeFeedFilterer{contract: contract}}, nil +} + +type ScrollSequencerUptimeFeed struct { + address common.Address + abi abi.ABI + ScrollSequencerUptimeFeedCaller + ScrollSequencerUptimeFeedTransactor + ScrollSequencerUptimeFeedFilterer +} + +type ScrollSequencerUptimeFeedCaller struct { + contract *bind.BoundContract +} + +type ScrollSequencerUptimeFeedTransactor struct { + contract *bind.BoundContract +} + +type ScrollSequencerUptimeFeedFilterer struct { + contract *bind.BoundContract +} + +type ScrollSequencerUptimeFeedSession struct { + Contract *ScrollSequencerUptimeFeed + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ScrollSequencerUptimeFeedCallerSession struct { + Contract *ScrollSequencerUptimeFeedCaller + CallOpts bind.CallOpts +} + +type ScrollSequencerUptimeFeedTransactorSession struct { + Contract *ScrollSequencerUptimeFeedTransactor + TransactOpts bind.TransactOpts +} + +type ScrollSequencerUptimeFeedRaw struct { + Contract *ScrollSequencerUptimeFeed +} + +type ScrollSequencerUptimeFeedCallerRaw struct { + Contract *ScrollSequencerUptimeFeedCaller +} + +type ScrollSequencerUptimeFeedTransactorRaw struct { + Contract *ScrollSequencerUptimeFeedTransactor +} + +func NewScrollSequencerUptimeFeed(address common.Address, backend bind.ContractBackend) (*ScrollSequencerUptimeFeed, error) { + abi, err := abi.JSON(strings.NewReader(ScrollSequencerUptimeFeedABI)) + if err != nil { + return nil, err + } + contract, err := bindScrollSequencerUptimeFeed(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeed{address: address, abi: abi, ScrollSequencerUptimeFeedCaller: ScrollSequencerUptimeFeedCaller{contract: contract}, ScrollSequencerUptimeFeedTransactor: ScrollSequencerUptimeFeedTransactor{contract: contract}, ScrollSequencerUptimeFeedFilterer: ScrollSequencerUptimeFeedFilterer{contract: contract}}, nil +} + +func NewScrollSequencerUptimeFeedCaller(address common.Address, caller bind.ContractCaller) (*ScrollSequencerUptimeFeedCaller, error) { + contract, err := bindScrollSequencerUptimeFeed(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedCaller{contract: contract}, nil +} + +func NewScrollSequencerUptimeFeedTransactor(address common.Address, transactor bind.ContractTransactor) (*ScrollSequencerUptimeFeedTransactor, error) { + contract, err := bindScrollSequencerUptimeFeed(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedTransactor{contract: contract}, nil +} + +func NewScrollSequencerUptimeFeedFilterer(address common.Address, filterer bind.ContractFilterer) (*ScrollSequencerUptimeFeedFilterer, error) { + contract, err := bindScrollSequencerUptimeFeed(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedFilterer{contract: contract}, nil +} + +func bindScrollSequencerUptimeFeed(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ScrollSequencerUptimeFeedMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollSequencerUptimeFeed.Contract.ScrollSequencerUptimeFeedCaller.contract.Call(opts, result, method, params...) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.ScrollSequencerUptimeFeedTransactor.contract.Transfer(opts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.ScrollSequencerUptimeFeedTransactor.contract.Transact(opts, method, params...) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollSequencerUptimeFeed.Contract.contract.Call(opts, result, method, params...) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.contract.Transfer(opts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.contract.Transact(opts, method, params...) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) CheckEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "checkEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) CheckEnabled() (bool, error) { + return _ScrollSequencerUptimeFeed.Contract.CheckEnabled(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) CheckEnabled() (bool, error) { + return _ScrollSequencerUptimeFeed.Contract.CheckEnabled(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) Decimals() (uint8, error) { + return _ScrollSequencerUptimeFeed.Contract.Decimals(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) Decimals() (uint8, error) { + return _ScrollSequencerUptimeFeed.Contract.Decimals(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) Description(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "description") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) Description() (string, error) { + return _ScrollSequencerUptimeFeed.Contract.Description(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) Description() (string, error) { + return _ScrollSequencerUptimeFeed.Contract.Description(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) GetAnswer(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "getAnswer", roundId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) GetAnswer(roundId *big.Int) (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.GetAnswer(&_ScrollSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) GetAnswer(roundId *big.Int) (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.GetAnswer(&_ScrollSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "getRoundData", _roundId) + + outstruct := new(GetRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _ScrollSequencerUptimeFeed.Contract.GetRoundData(&_ScrollSequencerUptimeFeed.CallOpts, _roundId) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _ScrollSequencerUptimeFeed.Contract.GetRoundData(&_ScrollSequencerUptimeFeed.CallOpts, _roundId) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) GetTimestamp(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "getTimestamp", roundId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) GetTimestamp(roundId *big.Int) (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.GetTimestamp(&_ScrollSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) GetTimestamp(roundId *big.Int) (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.GetTimestamp(&_ScrollSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) HasAccess(opts *bind.CallOpts, _user common.Address, _calldata []byte) (bool, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "hasAccess", _user, _calldata) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) HasAccess(_user common.Address, _calldata []byte) (bool, error) { + return _ScrollSequencerUptimeFeed.Contract.HasAccess(&_ScrollSequencerUptimeFeed.CallOpts, _user, _calldata) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) HasAccess(_user common.Address, _calldata []byte) (bool, error) { + return _ScrollSequencerUptimeFeed.Contract.HasAccess(&_ScrollSequencerUptimeFeed.CallOpts, _user, _calldata) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) L1Sender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "l1Sender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) L1Sender() (common.Address, error) { + return _ScrollSequencerUptimeFeed.Contract.L1Sender(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) L1Sender() (common.Address, error) { + return _ScrollSequencerUptimeFeed.Contract.L1Sender(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) LatestAnswer(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "latestAnswer") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) LatestAnswer() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.LatestAnswer(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) LatestAnswer() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.LatestAnswer(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) LatestRound(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "latestRound") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) LatestRound() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.LatestRound(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) LatestRound() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.LatestRound(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "latestRoundData") + + outstruct := new(LatestRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) LatestRoundData() (LatestRoundData, + + error) { + return _ScrollSequencerUptimeFeed.Contract.LatestRoundData(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) LatestRoundData() (LatestRoundData, + + error) { + return _ScrollSequencerUptimeFeed.Contract.LatestRoundData(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "latestTimestamp") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) LatestTimestamp() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.LatestTimestamp(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) LatestTimestamp() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.LatestTimestamp(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) Owner() (common.Address, error) { + return _ScrollSequencerUptimeFeed.Contract.Owner(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) Owner() (common.Address, error) { + return _ScrollSequencerUptimeFeed.Contract.Owner(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) TypeAndVersion() (string, error) { + return _ScrollSequencerUptimeFeed.Contract.TypeAndVersion(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) TypeAndVersion() (string, error) { + return _ScrollSequencerUptimeFeed.Contract.TypeAndVersion(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) Version(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "version") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) Version() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.Version(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) Version() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.Version(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "acceptOwnership") +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.AcceptOwnership(&_ScrollSequencerUptimeFeed.TransactOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.AcceptOwnership(&_ScrollSequencerUptimeFeed.TransactOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "addAccess", _user) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.AddAccess(&_ScrollSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.AddAccess(&_ScrollSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "disableAccessCheck") +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) DisableAccessCheck() (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.DisableAccessCheck(&_ScrollSequencerUptimeFeed.TransactOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) DisableAccessCheck() (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.DisableAccessCheck(&_ScrollSequencerUptimeFeed.TransactOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "enableAccessCheck") +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) EnableAccessCheck() (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.EnableAccessCheck(&_ScrollSequencerUptimeFeed.TransactOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) EnableAccessCheck() (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.EnableAccessCheck(&_ScrollSequencerUptimeFeed.TransactOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "removeAccess", _user) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.RemoveAccess(&_ScrollSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.RemoveAccess(&_ScrollSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) TransferL1Sender(opts *bind.TransactOpts, newSender common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "transferL1Sender", newSender) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) TransferL1Sender(newSender common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.TransferL1Sender(&_ScrollSequencerUptimeFeed.TransactOpts, newSender) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) TransferL1Sender(newSender common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.TransferL1Sender(&_ScrollSequencerUptimeFeed.TransactOpts, newSender) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "transferOwnership", to) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.TransferOwnership(&_ScrollSequencerUptimeFeed.TransactOpts, to) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.TransferOwnership(&_ScrollSequencerUptimeFeed.TransactOpts, to) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) UpdateStatus(opts *bind.TransactOpts, status bool, timestamp uint64) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "updateStatus", status, timestamp) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) UpdateStatus(status bool, timestamp uint64) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.UpdateStatus(&_ScrollSequencerUptimeFeed.TransactOpts, status, timestamp) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) UpdateStatus(status bool, timestamp uint64) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.UpdateStatus(&_ScrollSequencerUptimeFeed.TransactOpts, status, timestamp) +} + +type ScrollSequencerUptimeFeedAddedAccessIterator struct { + Event *ScrollSequencerUptimeFeedAddedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedAddedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedAddedAccessIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedAddedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedAddedAccess struct { + User common.Address + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterAddedAccess(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedAddedAccessIterator, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedAddedAccessIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "AddedAccess", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedAddedAccess) (event.Subscription, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedAddedAccess) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseAddedAccess(log types.Log) (*ScrollSequencerUptimeFeedAddedAccess, error) { + event := new(ScrollSequencerUptimeFeedAddedAccess) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedAnswerUpdatedIterator struct { + Event *ScrollSequencerUptimeFeedAnswerUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedAnswerUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedAnswerUpdatedIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedAnswerUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedAnswerUpdated struct { + Current *big.Int + RoundId *big.Int + UpdatedAt *big.Int + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*ScrollSequencerUptimeFeedAnswerUpdatedIterator, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedAnswerUpdatedIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "AnswerUpdated", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedAnswerUpdated) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "AnswerUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseAnswerUpdated(log types.Log) (*ScrollSequencerUptimeFeedAnswerUpdated, error) { + event := new(ScrollSequencerUptimeFeedAnswerUpdated) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "AnswerUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedCheckAccessDisabledIterator struct { + Event *ScrollSequencerUptimeFeedCheckAccessDisabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedCheckAccessDisabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedCheckAccessDisabledIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedCheckAccessDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedCheckAccessDisabled struct { + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedCheckAccessDisabledIterator, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedCheckAccessDisabledIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "CheckAccessDisabled", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedCheckAccessDisabled) (event.Subscription, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedCheckAccessDisabled) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseCheckAccessDisabled(log types.Log) (*ScrollSequencerUptimeFeedCheckAccessDisabled, error) { + event := new(ScrollSequencerUptimeFeedCheckAccessDisabled) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedCheckAccessEnabledIterator struct { + Event *ScrollSequencerUptimeFeedCheckAccessEnabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedCheckAccessEnabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedCheckAccessEnabledIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedCheckAccessEnabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedCheckAccessEnabled struct { + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedCheckAccessEnabledIterator, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedCheckAccessEnabledIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "CheckAccessEnabled", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedCheckAccessEnabled) (event.Subscription, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedCheckAccessEnabled) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseCheckAccessEnabled(log types.Log) (*ScrollSequencerUptimeFeedCheckAccessEnabled, error) { + event := new(ScrollSequencerUptimeFeedCheckAccessEnabled) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedL1SenderTransferredIterator struct { + Event *ScrollSequencerUptimeFeedL1SenderTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedL1SenderTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedL1SenderTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedL1SenderTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedL1SenderTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedL1SenderTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedL1SenderTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterL1SenderTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollSequencerUptimeFeedL1SenderTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "L1SenderTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedL1SenderTransferredIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "L1SenderTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchL1SenderTransferred(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedL1SenderTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "L1SenderTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedL1SenderTransferred) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "L1SenderTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseL1SenderTransferred(log types.Log) (*ScrollSequencerUptimeFeedL1SenderTransferred, error) { + event := new(ScrollSequencerUptimeFeedL1SenderTransferred) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "L1SenderTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedNewRoundIterator struct { + Event *ScrollSequencerUptimeFeedNewRound + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedNewRoundIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedNewRoundIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedNewRoundIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedNewRound struct { + RoundId *big.Int + StartedBy common.Address + StartedAt *big.Int + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*ScrollSequencerUptimeFeedNewRoundIterator, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedNewRoundIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "NewRound", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchNewRound(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedNewRound) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "NewRound", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseNewRound(log types.Log) (*ScrollSequencerUptimeFeedNewRound, error) { + event := new(ScrollSequencerUptimeFeedNewRound) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "NewRound", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator struct { + Event *ScrollSequencerUptimeFeedOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedOwnershipTransferRequested) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseOwnershipTransferRequested(log types.Log) (*ScrollSequencerUptimeFeedOwnershipTransferRequested, error) { + event := new(ScrollSequencerUptimeFeedOwnershipTransferRequested) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedOwnershipTransferredIterator struct { + Event *ScrollSequencerUptimeFeedOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollSequencerUptimeFeedOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedOwnershipTransferredIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedOwnershipTransferred) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseOwnershipTransferred(log types.Log) (*ScrollSequencerUptimeFeedOwnershipTransferred, error) { + event := new(ScrollSequencerUptimeFeedOwnershipTransferred) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedRemovedAccessIterator struct { + Event *ScrollSequencerUptimeFeedRemovedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedRemovedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedRemovedAccessIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedRemovedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedRemovedAccess struct { + User common.Address + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterRemovedAccess(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedRemovedAccessIterator, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedRemovedAccessIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "RemovedAccess", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedRemovedAccess) (event.Subscription, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedRemovedAccess) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseRemovedAccess(log types.Log) (*ScrollSequencerUptimeFeedRemovedAccess, error) { + event := new(ScrollSequencerUptimeFeedRemovedAccess) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedRoundUpdatedIterator struct { + Event *ScrollSequencerUptimeFeedRoundUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedRoundUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedRoundUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedRoundUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedRoundUpdatedIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedRoundUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedRoundUpdated struct { + Status *big.Int + UpdatedAt uint64 + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterRoundUpdated(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedRoundUpdatedIterator, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "RoundUpdated") + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedRoundUpdatedIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "RoundUpdated", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchRoundUpdated(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedRoundUpdated) (event.Subscription, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "RoundUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedRoundUpdated) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "RoundUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseRoundUpdated(log types.Log) (*ScrollSequencerUptimeFeedRoundUpdated, error) { + event := new(ScrollSequencerUptimeFeedRoundUpdated) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "RoundUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedUpdateIgnoredIterator struct { + Event *ScrollSequencerUptimeFeedUpdateIgnored + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedUpdateIgnoredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedUpdateIgnored) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedUpdateIgnored) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedUpdateIgnoredIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedUpdateIgnoredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedUpdateIgnored struct { + LatestStatus bool + LatestTimestamp uint64 + IncomingStatus bool + IncomingTimestamp uint64 + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterUpdateIgnored(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedUpdateIgnoredIterator, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "UpdateIgnored") + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedUpdateIgnoredIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "UpdateIgnored", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchUpdateIgnored(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedUpdateIgnored) (event.Subscription, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "UpdateIgnored") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedUpdateIgnored) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "UpdateIgnored", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseUpdateIgnored(log types.Log) (*ScrollSequencerUptimeFeedUpdateIgnored, error) { + event := new(ScrollSequencerUptimeFeedUpdateIgnored) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "UpdateIgnored", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} +type LatestRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} + +func (ScrollSequencerUptimeFeedAddedAccess) Topic() common.Hash { + return common.HexToHash("0x87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db4") +} + +func (ScrollSequencerUptimeFeedAnswerUpdated) Topic() common.Hash { + return common.HexToHash("0x0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f") +} + +func (ScrollSequencerUptimeFeedCheckAccessDisabled) Topic() common.Hash { + return common.HexToHash("0x3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638") +} + +func (ScrollSequencerUptimeFeedCheckAccessEnabled) Topic() common.Hash { + return common.HexToHash("0xaebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480") +} + +func (ScrollSequencerUptimeFeedL1SenderTransferred) Topic() common.Hash { + return common.HexToHash("0x8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18") +} + +func (ScrollSequencerUptimeFeedNewRound) Topic() common.Hash { + return common.HexToHash("0x0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271") +} + +func (ScrollSequencerUptimeFeedOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ScrollSequencerUptimeFeedOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (ScrollSequencerUptimeFeedRemovedAccess) Topic() common.Hash { + return common.HexToHash("0x3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d1") +} + +func (ScrollSequencerUptimeFeedRoundUpdated) Topic() common.Hash { + return common.HexToHash("0x297642343ed2faefb1a411b39fc449eae700e54223d5d0499a9421eb6f68f66a") +} + +func (ScrollSequencerUptimeFeedUpdateIgnored) Topic() common.Hash { + return common.HexToHash("0xe4a6e16301740042c17431042adb8f60454c18fb5934dd4c456269c0dc388fdf") +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeed) Address() common.Address { + return _ScrollSequencerUptimeFeed.address +} + +type ScrollSequencerUptimeFeedInterface interface { + CheckEnabled(opts *bind.CallOpts) (bool, error) + + Decimals(opts *bind.CallOpts) (uint8, error) + + Description(opts *bind.CallOpts) (string, error) + + GetAnswer(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) + + GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) + + GetTimestamp(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) + + HasAccess(opts *bind.CallOpts, _user common.Address, _calldata []byte) (bool, error) + + L1Sender(opts *bind.CallOpts) (common.Address, error) + + LatestAnswer(opts *bind.CallOpts) (*big.Int, error) + + LatestRound(opts *bind.CallOpts) (*big.Int, error) + + LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) + + LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + Version(opts *bind.CallOpts) (*big.Int, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + TransferL1Sender(opts *bind.TransactOpts, newSender common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + UpdateStatus(opts *bind.TransactOpts, status bool, timestamp uint64) (*types.Transaction, error) + + FilterAddedAccess(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedAddedAccessIterator, error) + + WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedAddedAccess) (event.Subscription, error) + + ParseAddedAccess(log types.Log) (*ScrollSequencerUptimeFeedAddedAccess, error) + + FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*ScrollSequencerUptimeFeedAnswerUpdatedIterator, error) + + WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) + + ParseAnswerUpdated(log types.Log) (*ScrollSequencerUptimeFeedAnswerUpdated, error) + + FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedCheckAccessDisabledIterator, error) + + WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedCheckAccessDisabled) (event.Subscription, error) + + ParseCheckAccessDisabled(log types.Log) (*ScrollSequencerUptimeFeedCheckAccessDisabled, error) + + FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedCheckAccessEnabledIterator, error) + + WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedCheckAccessEnabled) (event.Subscription, error) + + ParseCheckAccessEnabled(log types.Log) (*ScrollSequencerUptimeFeedCheckAccessEnabled, error) + + FilterL1SenderTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollSequencerUptimeFeedL1SenderTransferredIterator, error) + + WatchL1SenderTransferred(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedL1SenderTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1SenderTransferred(log types.Log) (*ScrollSequencerUptimeFeedL1SenderTransferred, error) + + FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*ScrollSequencerUptimeFeedNewRoundIterator, error) + + WatchNewRound(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) + + ParseNewRound(log types.Log) (*ScrollSequencerUptimeFeedNewRound, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ScrollSequencerUptimeFeedOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollSequencerUptimeFeedOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ScrollSequencerUptimeFeedOwnershipTransferred, error) + + FilterRemovedAccess(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedRemovedAccessIterator, error) + + WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedRemovedAccess) (event.Subscription, error) + + ParseRemovedAccess(log types.Log) (*ScrollSequencerUptimeFeedRemovedAccess, error) + + FilterRoundUpdated(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedRoundUpdatedIterator, error) + + WatchRoundUpdated(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedRoundUpdated) (event.Subscription, error) + + ParseRoundUpdated(log types.Log) (*ScrollSequencerUptimeFeedRoundUpdated, error) + + FilterUpdateIgnored(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedUpdateIgnoredIterator, error) + + WatchUpdateIgnored(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedUpdateIgnored) (event.Subscription, error) + + ParseUpdateIgnored(log types.Log) (*ScrollSequencerUptimeFeedUpdateIgnored, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/latest/scroll_validator/scroll_validator.go b/gethwrappers/l2ep/generated/latest/scroll_validator/scroll_validator.go new file mode 100644 index 0000000000..cda4957074 --- /dev/null +++ b/gethwrappers/l2ep/generated/latest/scroll_validator/scroll_validator.go @@ -0,0 +1,1680 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package scroll_validator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ScrollValidatorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"l1CrossDomainMessengerAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2UptimeFeedAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1MessageQueueAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_MSG_QUEUE_ADDR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_UPTIME_FEED_ADDR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validate\",\"inputs\":[{\"name\":\"previousRoundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"previousAnswer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"currentRoundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"currentAnswer\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AddedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConfigUpdated\",\"inputs\":[{\"name\":\"l1CrossDomainMessengerAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"l2UptimeFeedAddr\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GasLimitUpdated\",\"inputs\":[{\"name\":\"gasLimit\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemovedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatedStatus\",\"inputs\":[{\"name\":\"previousRoundId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"previousAnswer\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"currentRoundId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"currentAnswer\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"L1CrossDomainMessengerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2UptimeFeedAddrZero\",\"inputs\":[]}]", + Bin: "0x60e060405234801562000010575f80fd5b5060405162001237380380620012378339810160408190526200003391620002cb565b83838233805f816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be8162000205565b50506001805460ff60a01b1916600160a01b179055506001600160a01b038316620000fc57604051639c9087c160e01b815260040160405180910390fd5b6001600160a01b0382166200012457604051632ef8090560e01b815260040160405180910390fd5b6001600160a01b03838116608081905290831660a08190526003805463ffffffff191663ffffffff8516908117909155604080519384526020840192909252908201527f50ac1a0ab48727faf611b51ad202bb80d8cc334ca8e64154c3d430fbb23040cb9060600160405180910390a15050506001600160a01b038216620001ef5760405162461bcd60e51b815260206004820181905260248201527f496e76616c6964204c31206d6573736167652071756575652061646472657373604482015260640162000083565b506001600160a01b031660c052506200032e9050565b336001600160a01b038216036200025f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0381168114620002c6575f80fd5b919050565b5f805f8060808587031215620002df575f80fd5b620002ea85620002af565b9350620002fa60208601620002af565b92506200030a60408601620002af565b9150606085015163ffffffff8116811462000323575f80fd5b939692955090935050565b60805160a05160c051610ec96200036e5f395f81816101fa01526108f601525f81816101240152610a0d01525f818161035a01526108cc0152610ec95ff3fe6080604052600436106100f2575f3560e01c80638038e4a111610087578063beed9b5111610057578063beed9b51146102f9578063dc7f012414610318578063eda066f714610349578063f2fde38b1461037c575f80fd5b80638038e4a11461027e5780638823da6c146102925780638da5cb5b146102b1578063a118f249146102da575f80fd5b80634394a48a116100c25780634394a48a146101e957806352d84c621461021c5780636b14daf81461023b57806379ba50971461026a575f80fd5b80630a756983146100fd578063122555ff14610113578063181f5a77146101705780631a93d1c3146101c5575f80fd5b366100f957005b5f80fd5b348015610108575f80fd5b5061011161039b565b005b34801561011e575f80fd5b506101467f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561017b575f80fd5b506101b86040518060400160405280601581526020017f5363726f6c6c56616c696461746f7220312e312e30000000000000000000000081525081565b6040516101679190610cae565b3480156101d0575f80fd5b5060035460405163ffffffff9091168152602001610167565b3480156101f4575f80fd5b506101467f000000000000000000000000000000000000000000000000000000000000000081565b348015610227575f80fd5b50610111610236366004610cc0565b610419565b348015610246575f80fd5b5061025a610255366004610d38565b61048b565b6040519015158152602001610167565b348015610275575f80fd5b506101116104e0565b348015610289575f80fd5b506101116105e1565b34801561029d575f80fd5b506101116102ac366004610e12565b610674565b3480156102bc575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610146565b3480156102e5575f80fd5b506101116102f4366004610e12565b610727565b348015610304575f80fd5b5061025a610313366004610e2b565b6107d9565b348015610323575f80fd5b5060015461025a9074010000000000000000000000000000000000000000900460ff1681565b348015610354575f80fd5b506101467f000000000000000000000000000000000000000000000000000000000000000081565b348015610387575f80fd5b50610111610396366004610e12565b610ac8565b6103a3610ad9565b60015474010000000000000000000000000000000000000000900460ff161561041757600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638905f90a15b565b610421610ad9565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff83169081179091556040519081527f501c51f34bf3d8589156f7fd37055e69375b40034d9f99365cb3290b5d983c91906020015b60405180910390a150565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081205460ff16806104d9575060015474010000000000000000000000000000000000000000900460ff16155b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6105e9610ad9565b60015474010000000000000000000000000000000000000000900460ff1661041757600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480905f90a1565b61067c610ad9565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff16156107245773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d19101610480565b50565b61072f610ad9565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff166107245773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49101610480565b5f610819335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061048b92505050565b61087f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161055d565b6003546040517fd7704bae00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169163b2267a7b917f0000000000000000000000000000000000000000000000000000000000000000169063d7704bae90602401602060405180830381865afa15801561093b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095f9190610e5a565b604080516001871460248201524267ffffffffffffffff1660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fed8378f500000000000000000000000000000000000000000000000000000000179052600354915160e085901b7fffffffff00000000000000000000000000000000000000000000000000000000168152610a40927f0000000000000000000000000000000000000000000000000000000000000000925f92909163ffffffff1690600401610e71565b5f604051808303818588803b158015610a57575f80fd5b505af1158015610a69573d5f803e3d5ffd5b50506040805189815260208101899052908101879052606081018690527fdf570e5bda6b7c0c0415ceeafd5f9321908b69023cae41e030a6df91cad90b0393506080019150610ab59050565b60405180910390a1506001949350505050565b610ad0610ad9565b61072481610b59565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161055d565b3373ffffffffffffffffffffffffffffffffffffffff821603610bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161055d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f81518084525f5b81811015610c7157602081850181015186830182015201610c55565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6104d96020830184610c4d565b5f60208284031215610cd0575f80fd5b813563ffffffff811681146104d9575f80fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610d06575f80fd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610d49575f80fd5b610d5283610ce3565b9150602083013567ffffffffffffffff80821115610d6e575f80fd5b818501915085601f830112610d81575f80fd5b813581811115610d9357610d93610d0b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610dd957610dd9610d0b565b81604052828152886020848701011115610df1575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215610e22575f80fd5b6104d982610ce3565b5f805f8060808587031215610e3e575f80fd5b5050823594602084013594506040840135936060013592509050565b5f60208284031215610e6a575f80fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f610ea56080830185610c4d565b905063ffffffff831660608301529594505050505056fea164736f6c6343000818000a", +} + +var ScrollValidatorABI = ScrollValidatorMetaData.ABI + +var ScrollValidatorBin = ScrollValidatorMetaData.Bin + +func DeployScrollValidator(auth *bind.TransactOpts, backend bind.ContractBackend, l1CrossDomainMessengerAddress common.Address, l2UptimeFeedAddr common.Address, l1MessageQueueAddr common.Address, gasLimit uint32) (common.Address, *types.Transaction, *ScrollValidator, error) { + parsed, err := ScrollValidatorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ScrollValidatorBin), backend, l1CrossDomainMessengerAddress, l2UptimeFeedAddr, l1MessageQueueAddr, gasLimit) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ScrollValidator{address: address, abi: *parsed, ScrollValidatorCaller: ScrollValidatorCaller{contract: contract}, ScrollValidatorTransactor: ScrollValidatorTransactor{contract: contract}, ScrollValidatorFilterer: ScrollValidatorFilterer{contract: contract}}, nil +} + +type ScrollValidator struct { + address common.Address + abi abi.ABI + ScrollValidatorCaller + ScrollValidatorTransactor + ScrollValidatorFilterer +} + +type ScrollValidatorCaller struct { + contract *bind.BoundContract +} + +type ScrollValidatorTransactor struct { + contract *bind.BoundContract +} + +type ScrollValidatorFilterer struct { + contract *bind.BoundContract +} + +type ScrollValidatorSession struct { + Contract *ScrollValidator + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ScrollValidatorCallerSession struct { + Contract *ScrollValidatorCaller + CallOpts bind.CallOpts +} + +type ScrollValidatorTransactorSession struct { + Contract *ScrollValidatorTransactor + TransactOpts bind.TransactOpts +} + +type ScrollValidatorRaw struct { + Contract *ScrollValidator +} + +type ScrollValidatorCallerRaw struct { + Contract *ScrollValidatorCaller +} + +type ScrollValidatorTransactorRaw struct { + Contract *ScrollValidatorTransactor +} + +func NewScrollValidator(address common.Address, backend bind.ContractBackend) (*ScrollValidator, error) { + abi, err := abi.JSON(strings.NewReader(ScrollValidatorABI)) + if err != nil { + return nil, err + } + contract, err := bindScrollValidator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ScrollValidator{address: address, abi: abi, ScrollValidatorCaller: ScrollValidatorCaller{contract: contract}, ScrollValidatorTransactor: ScrollValidatorTransactor{contract: contract}, ScrollValidatorFilterer: ScrollValidatorFilterer{contract: contract}}, nil +} + +func NewScrollValidatorCaller(address common.Address, caller bind.ContractCaller) (*ScrollValidatorCaller, error) { + contract, err := bindScrollValidator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ScrollValidatorCaller{contract: contract}, nil +} + +func NewScrollValidatorTransactor(address common.Address, transactor bind.ContractTransactor) (*ScrollValidatorTransactor, error) { + contract, err := bindScrollValidator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ScrollValidatorTransactor{contract: contract}, nil +} + +func NewScrollValidatorFilterer(address common.Address, filterer bind.ContractFilterer) (*ScrollValidatorFilterer, error) { + contract, err := bindScrollValidator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ScrollValidatorFilterer{contract: contract}, nil +} + +func bindScrollValidator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ScrollValidatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ScrollValidator *ScrollValidatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollValidator.Contract.ScrollValidatorCaller.contract.Call(opts, result, method, params...) +} + +func (_ScrollValidator *ScrollValidatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollValidator.Contract.ScrollValidatorTransactor.contract.Transfer(opts) +} + +func (_ScrollValidator *ScrollValidatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollValidator.Contract.ScrollValidatorTransactor.contract.Transact(opts, method, params...) +} + +func (_ScrollValidator *ScrollValidatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollValidator.Contract.contract.Call(opts, result, method, params...) +} + +func (_ScrollValidator *ScrollValidatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollValidator.Contract.contract.Transfer(opts) +} + +func (_ScrollValidator *ScrollValidatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollValidator.Contract.contract.Transact(opts, method, params...) +} + +func (_ScrollValidator *ScrollValidatorCaller) L1CROSSDOMAINMESSENGERADDRESS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "L1_CROSS_DOMAIN_MESSENGER_ADDRESS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) L1CROSSDOMAINMESSENGERADDRESS() (common.Address, error) { + return _ScrollValidator.Contract.L1CROSSDOMAINMESSENGERADDRESS(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) L1CROSSDOMAINMESSENGERADDRESS() (common.Address, error) { + return _ScrollValidator.Contract.L1CROSSDOMAINMESSENGERADDRESS(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCaller) L1MSGQUEUEADDR(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "L1_MSG_QUEUE_ADDR") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) L1MSGQUEUEADDR() (common.Address, error) { + return _ScrollValidator.Contract.L1MSGQUEUEADDR(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) L1MSGQUEUEADDR() (common.Address, error) { + return _ScrollValidator.Contract.L1MSGQUEUEADDR(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCaller) L2UPTIMEFEEDADDR(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "L2_UPTIME_FEED_ADDR") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) L2UPTIMEFEEDADDR() (common.Address, error) { + return _ScrollValidator.Contract.L2UPTIMEFEEDADDR(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) L2UPTIMEFEEDADDR() (common.Address, error) { + return _ScrollValidator.Contract.L2UPTIMEFEEDADDR(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCaller) CheckEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "checkEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) CheckEnabled() (bool, error) { + return _ScrollValidator.Contract.CheckEnabled(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) CheckEnabled() (bool, error) { + return _ScrollValidator.Contract.CheckEnabled(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCaller) GetGasLimit(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "getGasLimit") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) GetGasLimit() (uint32, error) { + return _ScrollValidator.Contract.GetGasLimit(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) GetGasLimit() (uint32, error) { + return _ScrollValidator.Contract.GetGasLimit(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCaller) HasAccess(opts *bind.CallOpts, _user common.Address, arg1 []byte) (bool, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "hasAccess", _user, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) HasAccess(_user common.Address, arg1 []byte) (bool, error) { + return _ScrollValidator.Contract.HasAccess(&_ScrollValidator.CallOpts, _user, arg1) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) HasAccess(_user common.Address, arg1 []byte) (bool, error) { + return _ScrollValidator.Contract.HasAccess(&_ScrollValidator.CallOpts, _user, arg1) +} + +func (_ScrollValidator *ScrollValidatorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) Owner() (common.Address, error) { + return _ScrollValidator.Contract.Owner(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) Owner() (common.Address, error) { + return _ScrollValidator.Contract.Owner(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) TypeAndVersion() (string, error) { + return _ScrollValidator.Contract.TypeAndVersion(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) TypeAndVersion() (string, error) { + return _ScrollValidator.Contract.TypeAndVersion(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "acceptOwnership") +} + +func (_ScrollValidator *ScrollValidatorSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollValidator.Contract.AcceptOwnership(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollValidator.Contract.AcceptOwnership(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactor) AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "addAccess", _user) +} + +func (_ScrollValidator *ScrollValidatorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollValidator.Contract.AddAccess(&_ScrollValidator.TransactOpts, _user) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollValidator.Contract.AddAccess(&_ScrollValidator.TransactOpts, _user) +} + +func (_ScrollValidator *ScrollValidatorTransactor) DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "disableAccessCheck") +} + +func (_ScrollValidator *ScrollValidatorSession) DisableAccessCheck() (*types.Transaction, error) { + return _ScrollValidator.Contract.DisableAccessCheck(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) DisableAccessCheck() (*types.Transaction, error) { + return _ScrollValidator.Contract.DisableAccessCheck(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactor) EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "enableAccessCheck") +} + +func (_ScrollValidator *ScrollValidatorSession) EnableAccessCheck() (*types.Transaction, error) { + return _ScrollValidator.Contract.EnableAccessCheck(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) EnableAccessCheck() (*types.Transaction, error) { + return _ScrollValidator.Contract.EnableAccessCheck(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactor) RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "removeAccess", _user) +} + +func (_ScrollValidator *ScrollValidatorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollValidator.Contract.RemoveAccess(&_ScrollValidator.TransactOpts, _user) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollValidator.Contract.RemoveAccess(&_ScrollValidator.TransactOpts, _user) +} + +func (_ScrollValidator *ScrollValidatorTransactor) SetGasLimit(opts *bind.TransactOpts, gasLimit uint32) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "setGasLimit", gasLimit) +} + +func (_ScrollValidator *ScrollValidatorSession) SetGasLimit(gasLimit uint32) (*types.Transaction, error) { + return _ScrollValidator.Contract.SetGasLimit(&_ScrollValidator.TransactOpts, gasLimit) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) SetGasLimit(gasLimit uint32) (*types.Transaction, error) { + return _ScrollValidator.Contract.SetGasLimit(&_ScrollValidator.TransactOpts, gasLimit) +} + +func (_ScrollValidator *ScrollValidatorTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "transferOwnership", to) +} + +func (_ScrollValidator *ScrollValidatorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollValidator.Contract.TransferOwnership(&_ScrollValidator.TransactOpts, to) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollValidator.Contract.TransferOwnership(&_ScrollValidator.TransactOpts, to) +} + +func (_ScrollValidator *ScrollValidatorTransactor) Validate(opts *bind.TransactOpts, previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "validate", previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_ScrollValidator *ScrollValidatorSession) Validate(previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _ScrollValidator.Contract.Validate(&_ScrollValidator.TransactOpts, previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) Validate(previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _ScrollValidator.Contract.Validate(&_ScrollValidator.TransactOpts, previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_ScrollValidator *ScrollValidatorTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollValidator.contract.RawTransact(opts, nil) +} + +func (_ScrollValidator *ScrollValidatorSession) Receive() (*types.Transaction, error) { + return _ScrollValidator.Contract.Receive(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) Receive() (*types.Transaction, error) { + return _ScrollValidator.Contract.Receive(&_ScrollValidator.TransactOpts) +} + +type ScrollValidatorAddedAccessIterator struct { + Event *ScrollValidatorAddedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorAddedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorAddedAccessIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorAddedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorAddedAccess struct { + User common.Address + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterAddedAccess(opts *bind.FilterOpts) (*ScrollValidatorAddedAccessIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return &ScrollValidatorAddedAccessIterator{contract: _ScrollValidator.contract, event: "AddedAccess", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ScrollValidatorAddedAccess) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorAddedAccess) + if err := _ScrollValidator.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseAddedAccess(log types.Log) (*ScrollValidatorAddedAccess, error) { + event := new(ScrollValidatorAddedAccess) + if err := _ScrollValidator.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorCheckAccessDisabledIterator struct { + Event *ScrollValidatorCheckAccessDisabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorCheckAccessDisabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorCheckAccessDisabledIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorCheckAccessDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorCheckAccessDisabled struct { + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ScrollValidatorCheckAccessDisabledIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return &ScrollValidatorCheckAccessDisabledIterator{contract: _ScrollValidator.contract, event: "CheckAccessDisabled", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ScrollValidatorCheckAccessDisabled) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorCheckAccessDisabled) + if err := _ScrollValidator.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseCheckAccessDisabled(log types.Log) (*ScrollValidatorCheckAccessDisabled, error) { + event := new(ScrollValidatorCheckAccessDisabled) + if err := _ScrollValidator.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorCheckAccessEnabledIterator struct { + Event *ScrollValidatorCheckAccessEnabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorCheckAccessEnabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorCheckAccessEnabledIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorCheckAccessEnabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorCheckAccessEnabled struct { + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ScrollValidatorCheckAccessEnabledIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return &ScrollValidatorCheckAccessEnabledIterator{contract: _ScrollValidator.contract, event: "CheckAccessEnabled", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ScrollValidatorCheckAccessEnabled) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorCheckAccessEnabled) + if err := _ScrollValidator.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseCheckAccessEnabled(log types.Log) (*ScrollValidatorCheckAccessEnabled, error) { + event := new(ScrollValidatorCheckAccessEnabled) + if err := _ScrollValidator.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorConfigUpdatedIterator struct { + Event *ScrollValidatorConfigUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorConfigUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorConfigUpdatedIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorConfigUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorConfigUpdated struct { + L1CrossDomainMessengerAddress common.Address + L2UptimeFeedAddr common.Address + GasLimit uint32 + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterConfigUpdated(opts *bind.FilterOpts) (*ScrollValidatorConfigUpdatedIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "ConfigUpdated") + if err != nil { + return nil, err + } + return &ScrollValidatorConfigUpdatedIterator{contract: _ScrollValidator.contract, event: "ConfigUpdated", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchConfigUpdated(opts *bind.WatchOpts, sink chan<- *ScrollValidatorConfigUpdated) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "ConfigUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorConfigUpdated) + if err := _ScrollValidator.contract.UnpackLog(event, "ConfigUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseConfigUpdated(log types.Log) (*ScrollValidatorConfigUpdated, error) { + event := new(ScrollValidatorConfigUpdated) + if err := _ScrollValidator.contract.UnpackLog(event, "ConfigUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorGasLimitUpdatedIterator struct { + Event *ScrollValidatorGasLimitUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorGasLimitUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorGasLimitUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorGasLimitUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorGasLimitUpdatedIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorGasLimitUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorGasLimitUpdated struct { + GasLimit uint32 + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterGasLimitUpdated(opts *bind.FilterOpts) (*ScrollValidatorGasLimitUpdatedIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "GasLimitUpdated") + if err != nil { + return nil, err + } + return &ScrollValidatorGasLimitUpdatedIterator{contract: _ScrollValidator.contract, event: "GasLimitUpdated", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchGasLimitUpdated(opts *bind.WatchOpts, sink chan<- *ScrollValidatorGasLimitUpdated) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "GasLimitUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorGasLimitUpdated) + if err := _ScrollValidator.contract.UnpackLog(event, "GasLimitUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseGasLimitUpdated(log types.Log) (*ScrollValidatorGasLimitUpdated, error) { + event := new(ScrollValidatorGasLimitUpdated) + if err := _ScrollValidator.contract.UnpackLog(event, "GasLimitUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorOwnershipTransferRequestedIterator struct { + Event *ScrollValidatorOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollValidatorOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollValidatorOwnershipTransferRequestedIterator{contract: _ScrollValidator.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollValidatorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorOwnershipTransferRequested) + if err := _ScrollValidator.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseOwnershipTransferRequested(log types.Log) (*ScrollValidatorOwnershipTransferRequested, error) { + event := new(ScrollValidatorOwnershipTransferRequested) + if err := _ScrollValidator.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorOwnershipTransferredIterator struct { + Event *ScrollValidatorOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollValidatorOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollValidatorOwnershipTransferredIterator{contract: _ScrollValidator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollValidatorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorOwnershipTransferred) + if err := _ScrollValidator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseOwnershipTransferred(log types.Log) (*ScrollValidatorOwnershipTransferred, error) { + event := new(ScrollValidatorOwnershipTransferred) + if err := _ScrollValidator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorRemovedAccessIterator struct { + Event *ScrollValidatorRemovedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorRemovedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorRemovedAccessIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorRemovedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorRemovedAccess struct { + User common.Address + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterRemovedAccess(opts *bind.FilterOpts) (*ScrollValidatorRemovedAccessIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return &ScrollValidatorRemovedAccessIterator{contract: _ScrollValidator.contract, event: "RemovedAccess", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ScrollValidatorRemovedAccess) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorRemovedAccess) + if err := _ScrollValidator.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseRemovedAccess(log types.Log) (*ScrollValidatorRemovedAccess, error) { + event := new(ScrollValidatorRemovedAccess) + if err := _ScrollValidator.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorValidatedStatusIterator struct { + Event *ScrollValidatorValidatedStatus + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorValidatedStatusIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorValidatedStatus) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorValidatedStatus) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorValidatedStatusIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorValidatedStatusIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorValidatedStatus struct { + PreviousRoundId *big.Int + PreviousAnswer *big.Int + CurrentRoundId *big.Int + CurrentAnswer *big.Int + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterValidatedStatus(opts *bind.FilterOpts) (*ScrollValidatorValidatedStatusIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "ValidatedStatus") + if err != nil { + return nil, err + } + return &ScrollValidatorValidatedStatusIterator{contract: _ScrollValidator.contract, event: "ValidatedStatus", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchValidatedStatus(opts *bind.WatchOpts, sink chan<- *ScrollValidatorValidatedStatus) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "ValidatedStatus") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorValidatedStatus) + if err := _ScrollValidator.contract.UnpackLog(event, "ValidatedStatus", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseValidatedStatus(log types.Log) (*ScrollValidatorValidatedStatus, error) { + event := new(ScrollValidatorValidatedStatus) + if err := _ScrollValidator.contract.UnpackLog(event, "ValidatedStatus", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (ScrollValidatorAddedAccess) Topic() common.Hash { + return common.HexToHash("0x87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db4") +} + +func (ScrollValidatorCheckAccessDisabled) Topic() common.Hash { + return common.HexToHash("0x3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638") +} + +func (ScrollValidatorCheckAccessEnabled) Topic() common.Hash { + return common.HexToHash("0xaebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480") +} + +func (ScrollValidatorConfigUpdated) Topic() common.Hash { + return common.HexToHash("0x50ac1a0ab48727faf611b51ad202bb80d8cc334ca8e64154c3d430fbb23040cb") +} + +func (ScrollValidatorGasLimitUpdated) Topic() common.Hash { + return common.HexToHash("0x501c51f34bf3d8589156f7fd37055e69375b40034d9f99365cb3290b5d983c91") +} + +func (ScrollValidatorOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ScrollValidatorOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (ScrollValidatorRemovedAccess) Topic() common.Hash { + return common.HexToHash("0x3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d1") +} + +func (ScrollValidatorValidatedStatus) Topic() common.Hash { + return common.HexToHash("0xdf570e5bda6b7c0c0415ceeafd5f9321908b69023cae41e030a6df91cad90b03") +} + +func (_ScrollValidator *ScrollValidator) Address() common.Address { + return _ScrollValidator.address +} + +type ScrollValidatorInterface interface { + L1CROSSDOMAINMESSENGERADDRESS(opts *bind.CallOpts) (common.Address, error) + + L1MSGQUEUEADDR(opts *bind.CallOpts) (common.Address, error) + + L2UPTIMEFEEDADDR(opts *bind.CallOpts) (common.Address, error) + + CheckEnabled(opts *bind.CallOpts) (bool, error) + + GetGasLimit(opts *bind.CallOpts) (uint32, error) + + HasAccess(opts *bind.CallOpts, _user common.Address, arg1 []byte) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + SetGasLimit(opts *bind.TransactOpts, gasLimit uint32) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + Validate(opts *bind.TransactOpts, previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterAddedAccess(opts *bind.FilterOpts) (*ScrollValidatorAddedAccessIterator, error) + + WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ScrollValidatorAddedAccess) (event.Subscription, error) + + ParseAddedAccess(log types.Log) (*ScrollValidatorAddedAccess, error) + + FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ScrollValidatorCheckAccessDisabledIterator, error) + + WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ScrollValidatorCheckAccessDisabled) (event.Subscription, error) + + ParseCheckAccessDisabled(log types.Log) (*ScrollValidatorCheckAccessDisabled, error) + + FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ScrollValidatorCheckAccessEnabledIterator, error) + + WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ScrollValidatorCheckAccessEnabled) (event.Subscription, error) + + ParseCheckAccessEnabled(log types.Log) (*ScrollValidatorCheckAccessEnabled, error) + + FilterConfigUpdated(opts *bind.FilterOpts) (*ScrollValidatorConfigUpdatedIterator, error) + + WatchConfigUpdated(opts *bind.WatchOpts, sink chan<- *ScrollValidatorConfigUpdated) (event.Subscription, error) + + ParseConfigUpdated(log types.Log) (*ScrollValidatorConfigUpdated, error) + + FilterGasLimitUpdated(opts *bind.FilterOpts) (*ScrollValidatorGasLimitUpdatedIterator, error) + + WatchGasLimitUpdated(opts *bind.WatchOpts, sink chan<- *ScrollValidatorGasLimitUpdated) (event.Subscription, error) + + ParseGasLimitUpdated(log types.Log) (*ScrollValidatorGasLimitUpdated, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollValidatorOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollValidatorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ScrollValidatorOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollValidatorOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollValidatorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ScrollValidatorOwnershipTransferred, error) + + FilterRemovedAccess(opts *bind.FilterOpts) (*ScrollValidatorRemovedAccessIterator, error) + + WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ScrollValidatorRemovedAccess) (event.Subscription, error) + + ParseRemovedAccess(log types.Log) (*ScrollValidatorRemovedAccess, error) + + FilterValidatedStatus(opts *bind.FilterOpts) (*ScrollValidatorValidatedStatusIterator, error) + + WatchValidatedStatus(opts *bind.WatchOpts, sink chan<- *ScrollValidatorValidatedStatus) (event.Subscription, error) + + ParseValidatedStatus(log types.Log) (*ScrollValidatorValidatedStatus, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/v1_0_0/arbitrum_cross_domain_forwarder/arbitrum_cross_domain_forwarder.go b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_cross_domain_forwarder/arbitrum_cross_domain_forwarder.go new file mode 100644 index 0000000000..de67aa744a --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_cross_domain_forwarder/arbitrum_cross_domain_forwarder.go @@ -0,0 +1,928 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package arbitrum_cross_domain_forwarder + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ArbitrumCrossDomainForwarderMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"l1OwnerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptL1Ownership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"crossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forward\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferL1Ownership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"L1OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", + Bin: "0x608060405234801561000f575f80fd5b50604051610e4f380380610e4f83398101604081905261002e916101d0565b8033805f816100845760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b3576100b3816100cc565b5050506100c58161017460201b60201c565b50506101fd565b336001600160a01b038216036101245760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007b565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600280546001600160a01b038381166001600160a01b03198084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f602082840312156101e0575f80fd5b81516001600160a01b03811681146101f6575f80fd5b9392505050565b610c458061020a5f395ff3fe608060405234801561000f575f80fd5b506004361061009f575f3560e01c806396b8d7c011610072578063d2db637211610058578063d2db637214610137578063f2fde38b14610155578063f43b361314610168575f80fd5b806396b8d7c01461011c578063b2ec07871461012f575f80fd5b8063181f5a77146100a35780636fadcf72146100c157806379ba5097146100d65780638da5cb5b146100de575b5f80fd5b6100ab610170565b6040516100b89190610a63565b60405180910390f35b6100d46100cf366004610b08565b610190565b005b6100d4610276565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b8565b6100d461012a366004610be2565b610372565b6100d461041a565b60025473ffffffffffffffffffffffffffffffffffffffff166100f7565b6100d4610163366004610be2565b610508565b6100f7610519565b6060604051806060016040528060228152602001610c1760229139905090565b610198610519565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064015b60405180910390fd5b61027182826040518060400160405280601781526020017f466f727761726465722063616c6c20726576657274656400000000000000000081525061055a565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146102f7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610228565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61037a610519565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461040e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e67657200006044820152606401610228565b61041781610572565b50565b6003546104509073ffffffffffffffffffffffffffffffffffffffff167311110000000000000000000000000000000011110190565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d7573742062652070726f706f736564204c31206f776e6572000000000000006044820152606401610228565b6003546105069073ffffffffffffffffffffffffffffffffffffffff16610667565b565b6105106106e8565b61041781610768565b5f61055561053c60025473ffffffffffffffffffffffffffffffffffffffff1690565b7311110000000000000000000000000000000011110190565b905090565b606061056884845f8561085c565b90505b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff8216036105f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610228565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907f55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f905f90a350565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610506576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610228565b3373ffffffffffffffffffffffffffffffffffffffff8216036107e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610228565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6060824710156108ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610228565b73ffffffffffffffffffffffffffffffffffffffff85163b61096c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610228565b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516109949190610bfb565b5f6040518083038185875af1925050503d805f81146109ce576040519150601f19603f3d011682016040523d82523d5f602084013e6109d3565b606091505b50915091506109e38282866109ee565b979650505050505050565b606083156109fd57508161056b565b825115610a0d5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102289190610a63565b5f5b83811015610a5b578181015183820152602001610a43565b50505f910152565b602081525f8251806020840152610a81816040850160208701610a41565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ad6575f80fd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610b19575f80fd5b610b2283610ab3565b9150602083013567ffffffffffffffff80821115610b3e575f80fd5b818501915085601f830112610b51575f80fd5b813581811115610b6357610b63610adb565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610ba957610ba9610adb565b81604052828152886020848701011115610bc1575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215610bf2575f80fd5b61056b82610ab3565b5f8251610c0c818460208701610a41565b919091019291505056fe417262697472756d43726f7373446f6d61696e466f7277617264657220312e302e30a164736f6c6343000818000a", +} + +var ArbitrumCrossDomainForwarderABI = ArbitrumCrossDomainForwarderMetaData.ABI + +var ArbitrumCrossDomainForwarderBin = ArbitrumCrossDomainForwarderMetaData.Bin + +func DeployArbitrumCrossDomainForwarder(auth *bind.TransactOpts, backend bind.ContractBackend, l1OwnerAddr common.Address) (common.Address, *types.Transaction, *ArbitrumCrossDomainForwarder, error) { + parsed, err := ArbitrumCrossDomainForwarderMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ArbitrumCrossDomainForwarderBin), backend, l1OwnerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ArbitrumCrossDomainForwarder{address: address, abi: *parsed, ArbitrumCrossDomainForwarderCaller: ArbitrumCrossDomainForwarderCaller{contract: contract}, ArbitrumCrossDomainForwarderTransactor: ArbitrumCrossDomainForwarderTransactor{contract: contract}, ArbitrumCrossDomainForwarderFilterer: ArbitrumCrossDomainForwarderFilterer{contract: contract}}, nil +} + +type ArbitrumCrossDomainForwarder struct { + address common.Address + abi abi.ABI + ArbitrumCrossDomainForwarderCaller + ArbitrumCrossDomainForwarderTransactor + ArbitrumCrossDomainForwarderFilterer +} + +type ArbitrumCrossDomainForwarderCaller struct { + contract *bind.BoundContract +} + +type ArbitrumCrossDomainForwarderTransactor struct { + contract *bind.BoundContract +} + +type ArbitrumCrossDomainForwarderFilterer struct { + contract *bind.BoundContract +} + +type ArbitrumCrossDomainForwarderSession struct { + Contract *ArbitrumCrossDomainForwarder + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ArbitrumCrossDomainForwarderCallerSession struct { + Contract *ArbitrumCrossDomainForwarderCaller + CallOpts bind.CallOpts +} + +type ArbitrumCrossDomainForwarderTransactorSession struct { + Contract *ArbitrumCrossDomainForwarderTransactor + TransactOpts bind.TransactOpts +} + +type ArbitrumCrossDomainForwarderRaw struct { + Contract *ArbitrumCrossDomainForwarder +} + +type ArbitrumCrossDomainForwarderCallerRaw struct { + Contract *ArbitrumCrossDomainForwarderCaller +} + +type ArbitrumCrossDomainForwarderTransactorRaw struct { + Contract *ArbitrumCrossDomainForwarderTransactor +} + +func NewArbitrumCrossDomainForwarder(address common.Address, backend bind.ContractBackend) (*ArbitrumCrossDomainForwarder, error) { + abi, err := abi.JSON(strings.NewReader(ArbitrumCrossDomainForwarderABI)) + if err != nil { + return nil, err + } + contract, err := bindArbitrumCrossDomainForwarder(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarder{address: address, abi: abi, ArbitrumCrossDomainForwarderCaller: ArbitrumCrossDomainForwarderCaller{contract: contract}, ArbitrumCrossDomainForwarderTransactor: ArbitrumCrossDomainForwarderTransactor{contract: contract}, ArbitrumCrossDomainForwarderFilterer: ArbitrumCrossDomainForwarderFilterer{contract: contract}}, nil +} + +func NewArbitrumCrossDomainForwarderCaller(address common.Address, caller bind.ContractCaller) (*ArbitrumCrossDomainForwarderCaller, error) { + contract, err := bindArbitrumCrossDomainForwarder(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderCaller{contract: contract}, nil +} + +func NewArbitrumCrossDomainForwarderTransactor(address common.Address, transactor bind.ContractTransactor) (*ArbitrumCrossDomainForwarderTransactor, error) { + contract, err := bindArbitrumCrossDomainForwarder(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderTransactor{contract: contract}, nil +} + +func NewArbitrumCrossDomainForwarderFilterer(address common.Address, filterer bind.ContractFilterer) (*ArbitrumCrossDomainForwarderFilterer, error) { + contract, err := bindArbitrumCrossDomainForwarder(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderFilterer{contract: contract}, nil +} + +func bindArbitrumCrossDomainForwarder(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ArbitrumCrossDomainForwarderMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumCrossDomainForwarder.Contract.ArbitrumCrossDomainForwarderCaller.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.ArbitrumCrossDomainForwarderTransactor.contract.Transfer(opts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.ArbitrumCrossDomainForwarderTransactor.contract.Transact(opts, method, params...) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumCrossDomainForwarder.Contract.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.contract.Transfer(opts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.contract.Transact(opts, method, params...) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCaller) CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumCrossDomainForwarder.contract.Call(opts, &out, "crossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) CrossDomainMessenger() (common.Address, error) { + return _ArbitrumCrossDomainForwarder.Contract.CrossDomainMessenger(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCallerSession) CrossDomainMessenger() (common.Address, error) { + return _ArbitrumCrossDomainForwarder.Contract.CrossDomainMessenger(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCaller) L1Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumCrossDomainForwarder.contract.Call(opts, &out, "l1Owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) L1Owner() (common.Address, error) { + return _ArbitrumCrossDomainForwarder.Contract.L1Owner(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCallerSession) L1Owner() (common.Address, error) { + return _ArbitrumCrossDomainForwarder.Contract.L1Owner(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumCrossDomainForwarder.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) Owner() (common.Address, error) { + return _ArbitrumCrossDomainForwarder.Contract.Owner(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCallerSession) Owner() (common.Address, error) { + return _ArbitrumCrossDomainForwarder.Contract.Owner(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ArbitrumCrossDomainForwarder.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) TypeAndVersion() (string, error) { + return _ArbitrumCrossDomainForwarder.Contract.TypeAndVersion(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderCallerSession) TypeAndVersion() (string, error) { + return _ArbitrumCrossDomainForwarder.Contract.TypeAndVersion(&_ArbitrumCrossDomainForwarder.CallOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactor) AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.contract.Transact(opts, "acceptL1Ownership") +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.AcceptL1Ownership(&_ArbitrumCrossDomainForwarder.TransactOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.AcceptL1Ownership(&_ArbitrumCrossDomainForwarder.TransactOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.contract.Transact(opts, "acceptOwnership") +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.AcceptOwnership(&_ArbitrumCrossDomainForwarder.TransactOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.AcceptOwnership(&_ArbitrumCrossDomainForwarder.TransactOpts) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactor) Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.contract.Transact(opts, "forward", target, data) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.Forward(&_ArbitrumCrossDomainForwarder.TransactOpts, target, data) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.Forward(&_ArbitrumCrossDomainForwarder.TransactOpts, target, data) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactor) TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.contract.Transact(opts, "transferL1Ownership", to) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.TransferL1Ownership(&_ArbitrumCrossDomainForwarder.TransactOpts, to) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.TransferL1Ownership(&_ArbitrumCrossDomainForwarder.TransactOpts, to) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.contract.Transact(opts, "transferOwnership", to) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.TransferOwnership(&_ArbitrumCrossDomainForwarder.TransactOpts, to) +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainForwarder.Contract.TransferOwnership(&_ArbitrumCrossDomainForwarder.TransactOpts, to) +} + +type ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator struct { + Event *ArbitrumCrossDomainForwarderL1OwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainForwarderL1OwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.FilterLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator{contract: _ArbitrumCrossDomainForwarder.contract, event: "L1OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.WatchLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainForwarderL1OwnershipTransferRequested) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) ParseL1OwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainForwarderL1OwnershipTransferRequested, error) { + event := new(ArbitrumCrossDomainForwarderL1OwnershipTransferRequested) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator struct { + Event *ArbitrumCrossDomainForwarderL1OwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainForwarderL1OwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.FilterLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator{contract: _ArbitrumCrossDomainForwarder.contract, event: "L1OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.WatchLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainForwarderL1OwnershipTransferred) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) ParseL1OwnershipTransferred(log types.Log) (*ArbitrumCrossDomainForwarderL1OwnershipTransferred, error) { + event := new(ArbitrumCrossDomainForwarderL1OwnershipTransferred) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator struct { + Event *ArbitrumCrossDomainForwarderOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainForwarderOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator{contract: _ArbitrumCrossDomainForwarder.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainForwarderOwnershipTransferRequested) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) ParseOwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainForwarderOwnershipTransferRequested, error) { + event := new(ArbitrumCrossDomainForwarderOwnershipTransferRequested) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumCrossDomainForwarderOwnershipTransferredIterator struct { + Event *ArbitrumCrossDomainForwarderOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainForwarderOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainForwarderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainForwarderOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainForwarderOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainForwarderOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainForwarderOwnershipTransferredIterator{contract: _ArbitrumCrossDomainForwarder.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainForwarder.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainForwarderOwnershipTransferred) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarderFilterer) ParseOwnershipTransferred(log types.Log) (*ArbitrumCrossDomainForwarderOwnershipTransferred, error) { + event := new(ArbitrumCrossDomainForwarderOwnershipTransferred) + if err := _ArbitrumCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (ArbitrumCrossDomainForwarderL1OwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0x55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f") +} + +func (ArbitrumCrossDomainForwarderL1OwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0xb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272") +} + +func (ArbitrumCrossDomainForwarderOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ArbitrumCrossDomainForwarderOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_ArbitrumCrossDomainForwarder *ArbitrumCrossDomainForwarder) Address() common.Address { + return _ArbitrumCrossDomainForwarder.address +} + +type ArbitrumCrossDomainForwarderInterface interface { + CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) + + L1Owner(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderL1OwnershipTransferRequestedIterator, error) + + WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainForwarderL1OwnershipTransferRequested, error) + + FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderL1OwnershipTransferredIterator, error) + + WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferred(log types.Log) (*ArbitrumCrossDomainForwarderL1OwnershipTransferred, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainForwarderOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainForwarderOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainForwarderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ArbitrumCrossDomainForwarderOwnershipTransferred, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/v1_0_0/arbitrum_cross_domain_forwarder/arbitrum_cross_domain_forwarder_metadata.go b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_cross_domain_forwarder/arbitrum_cross_domain_forwarder_metadata.go new file mode 100644 index 0000000000..40b721884e --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_cross_domain_forwarder/arbitrum_cross_domain_forwarder_metadata.go @@ -0,0 +1,7 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + + +package arbitrum_cross_domain_forwarder + +var SolidityStandardInput = "{\"version\":\"v0.8.24+commit.e11b9ed9\",\"language\":\"Solidity\",\"settings\":{\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":true,\"bytecodeHash\":\"none\",\"useLiteralContent\":false},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"outputSelection\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/CrossDomainForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/CrossDomainOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/ICrossDomainOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/IForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]}},\"remappings\":[\"forge-std/=src/v0.8/vendor/forge-std/src/\",\"@openzeppelin/contracts@4.7.3/=node_modules/@openzeppelin/contracts-4.7.3/\",\"@openzeppelin/contracts@4.8.3/=node_modules/@openzeppelin/contracts-4.8.3/\",\"@openzeppelin/contracts@4.9.6/=node_modules/@openzeppelin/contracts-4.9.6/\",\"@openzeppelin/contracts@5.0.2/=node_modules/@openzeppelin/contracts-5.0.2/\",\"@openzeppelin/contracts@5.1.0/=node_modules/@openzeppelin/contracts-5.1.0/\",\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@arbitrum/=node_modules/@arbitrum/\",\"hardhat/=node_modules/hardhat/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@zksync/=node_modules/@zksync/\"],\"viaIR\":false},\"sources\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length \\u003e 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance \\u003e= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance \\u003e= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length \\u003e 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"},\"src/v0.8/l2ep/CrossDomainForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {CrossDomainOwnable} from \\\"./CrossDomainOwnable.sol\\\";\\nimport {IForwarder} from \\\"./interfaces/IForwarder.sol\\\";\\n\\n/**\\n * @title CrossDomainForwarder - L1 xDomain account representation\\n * @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n * destination.\\n * @dev Any other L2 contract which uses this contract's address as a privileged position,\\n * can consider that position to be held by the `l1Owner`\\n */\\nabstract contract CrossDomainForwarder is IForwarder, CrossDomainOwnable {}\\n\"},\"src/v0.8/l2ep/CrossDomainOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwner} from \\\"../shared/access/ConfirmedOwner.sol\\\";\\nimport {ICrossDomainOwnable} from \\\"./interfaces/ICrossDomainOwnable.sol\\\";\\n\\n/**\\n * @title The CrossDomainOwnable contract\\n * @notice A contract with helpers for cross-domain contract ownership.\\n */\\ncontract CrossDomainOwnable is ICrossDomainOwnable, ConfirmedOwner {\\n address internal s_l1Owner;\\n address internal s_l1PendingOwner;\\n\\n constructor(\\n address newl1Owner\\n ) ConfirmedOwner(msg.sender) {\\n _setL1Owner(newl1Owner);\\n }\\n\\n /**\\n * @notice transfer ownership of this account to a new L1 owner\\n * @param to new L1 owner that will be allowed to call the forward fn\\n */\\n function transferL1Ownership(\\n address to\\n ) public virtual override onlyL1Owner {\\n _transferL1Ownership(to);\\n }\\n\\n /**\\n * @notice accept ownership of this account to a new L1 owner\\n */\\n function acceptL1Ownership() public virtual override onlyProposedL1Owner {\\n _setL1Owner(s_l1PendingOwner);\\n }\\n\\n /**\\n * @notice Get the current owner\\n */\\n function l1Owner() public view override returns (address) {\\n return s_l1Owner;\\n }\\n\\n /**\\n * @notice validate, transfer ownership, and emit relevant events\\n */\\n function _transferL1Ownership(\\n address to\\n ) internal {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_l1PendingOwner = to;\\n\\n emit L1OwnershipTransferRequested(s_l1Owner, to);\\n }\\n\\n /**\\n * @notice set ownership, emit relevant events. Used in acceptOwnership()\\n */\\n function _setL1Owner(\\n address to\\n ) internal {\\n address oldOwner = s_l1Owner;\\n s_l1Owner = to;\\n s_l1PendingOwner = address(0);\\n\\n emit L1OwnershipTransferred(oldOwner, to);\\n }\\n\\n /**\\n * @notice Reverts if called by anyone other than the L1 owner.\\n */\\n modifier onlyL1Owner() virtual {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_l1Owner, \\\"Only callable by L1 owner\\\");\\n _;\\n }\\n\\n /**\\n * @notice Reverts if called by anyone other than the L1 owner.\\n */\\n modifier onlyProposedL1Owner() virtual {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_l1PendingOwner, \\\"Only callable by proposed L1 owner\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\n// solhint-disable-next-line no-unused-import\\nimport {IForwarder} from \\\"../interfaces/IForwarder.sol\\\";\\n\\nimport {CrossDomainForwarder} from \\\"../CrossDomainForwarder.sol\\\";\\nimport {CrossDomainOwnable} from \\\"../CrossDomainOwnable.sol\\\";\\n\\nimport {AddressAliasHelper} from \\\"../../vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts@4.7.3/utils/Address.sol\\\";\\n\\n/**\\n * @title ArbitrumCrossDomainForwarder - L1 xDomain account representation\\n * @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n * destination.\\n * @dev Any other L2 contract which uses this contract's address as a privileged position,\\n * can be considered to be owned by the `l1Owner`\\n */\\ncontract ArbitrumCrossDomainForwarder is ITypeAndVersion, CrossDomainForwarder {\\n /**\\n * @notice creates a new Arbitrum xDomain Forwarder contract\\n * @param l1OwnerAddr the L1 owner address that will be allowed to call the forward fn\\n * @dev Empty constructor required due to inheriting from abstract contract CrossDomainForwarder\\n */\\n constructor(\\n address l1OwnerAddr\\n ) CrossDomainOwnable(l1OwnerAddr) {}\\n\\n /**\\n * @notice versions:\\n *\\n * - ArbitrumCrossDomainForwarder 0.1.0: initial release\\n * - ArbitrumCrossDomainForwarder 1.0.0: Use OZ Address, CrossDomainOwnable\\n *\\n * @inheritdoc ITypeAndVersion\\n */\\n function typeAndVersion() external pure virtual override returns (string memory) {\\n return \\\"ArbitrumCrossDomainForwarder 1.0.0\\\";\\n }\\n\\n /**\\n * @notice The L2 xDomain `msg.sender`, generated from L1 sender address\\n */\\n function crossDomainMessenger() public view returns (address) {\\n return AddressAliasHelper.applyL1ToL2Alias(l1Owner());\\n }\\n\\n /**\\n * @dev forwarded only if L2 Messenger calls with `xDomainMessageSender` being the L1 owner address\\n * @inheritdoc IForwarder\\n */\\n function forward(address target, bytes memory data) external virtual override onlyL1Owner {\\n Address.functionCall(target, data, \\\"Forwarder call reverted\\\");\\n }\\n\\n /**\\n * @notice The call MUST come from the L1 owner (via cross-chain message.) Reverts otherwise.\\n */\\n modifier onlyL1Owner() override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == crossDomainMessenger(), \\\"Sender is not the L2 messenger\\\");\\n _;\\n }\\n\\n /**\\n * @notice The call MUST come from the proposed L1 owner (via cross-chain message.) Reverts otherwise.\\n */\\n modifier onlyProposedL1Owner() override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == AddressAliasHelper.applyL1ToL2Alias(s_l1PendingOwner), \\\"Must be proposed L1 owner\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/l2ep/interfaces/ICrossDomainOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title A contract with helpers for cross-domain contract ownership\\ninterface ICrossDomainOwnable {\\n event L1OwnershipTransferRequested(address indexed from, address indexed to);\\n\\n event L1OwnershipTransferred(address indexed from, address indexed to);\\n\\n function l1Owner() external returns (address);\\n\\n function transferL1Ownership(\\n address recipient\\n ) external;\\n\\n function acceptL1Ownership() external;\\n}\\n\"},\"src/v0.8/l2ep/interfaces/IForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title Forwards a call to a target, under some conditions\\ninterface IForwarder {\\n /// @notice forward calls the `target` with `data`\\n /// @param target contract address to be called\\n /// @param data to send to target contract\\n function forward(address target, bytes memory data) external;\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(\\n address newOwner\\n ) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(\\n address to\\n ) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(\\n address to\\n ) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(\\n address recipient\\n ) external;\\n\\n function acceptOwnership() external;\\n}\\n\"},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ITypeAndVersion {\\n function typeAndVersion() external pure returns (string memory);\\n}\\n\"},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\n\\n/*\\n * Copyright 2019-2021, Offchain Labs, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n// NOTICE: pragma change from original (^0.6.11)\\npragma solidity ^0.8.0;\\n\\nlibrary AddressAliasHelper {\\n uint160 constant offset = uint160(0x1111000000000000000000000000000000001111);\\n\\n /// @notice Utility function that converts the msg.sender viewed in the L2 to the\\n /// address in the L1 that submitted a tx to the inbox\\n /// @param l1Address L2 address as viewed in msg.sender\\n /// @return l2Address the address in the L1 that triggered the tx to L2\\n function applyL1ToL2Alias(address l1Address) internal pure returns (address l2Address) {\\n unchecked {\\n l2Address = address(uint160(l1Address) + offset);\\n }\\n }\\n\\n /// @notice Utility function that converts the msg.sender viewed in the L2 to the\\n /// address in the L1 that submitted a tx to the inbox\\n /// @param l2Address L2 address as viewed in msg.sender\\n /// @return l1Address the address in the L1 that triggered the tx to L2\\n function undoL1ToL2Alias(address l2Address) internal pure returns (address l1Address) {\\n unchecked {\\n l1Address = address(uint160(l2Address) - offset);\\n }\\n }\\n}\\n\"}}}" diff --git a/gethwrappers/l2ep/generated/v1_0_0/arbitrum_cross_domain_governor/arbitrum_cross_domain_governor.go b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_cross_domain_governor/arbitrum_cross_domain_governor.go new file mode 100644 index 0000000000..64665fcf5d --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_cross_domain_governor/arbitrum_cross_domain_governor.go @@ -0,0 +1,942 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package arbitrum_cross_domain_governor + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ArbitrumCrossDomainGovernorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"l1OwnerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptL1Ownership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"crossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forward\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forwardDelegate\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferL1Ownership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"L1OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", + Bin: "0x608060405234801561000f575f80fd5b5060405161110b38038061110b83398101604081905261002e916101d2565b808033805f816100855760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b4576100b4816100ce565b5050506100c68161017660201b60201c565b5050506101ff565b336001600160a01b038216036101265760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007c565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600280546001600160a01b038381166001600160a01b03198084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f602082840312156101e2575f80fd5b81516001600160a01b03811681146101f8575f80fd5b9392505050565b610eff8061020c5f395ff3fe608060405234801561000f575f80fd5b50600436106100b9575f3560e01c806396b8d7c011610072578063d2db637211610058578063d2db637214610164578063f2fde38b14610182578063f43b361314610195575f80fd5b806396b8d7c014610149578063b2ec07871461015c575f80fd5b80636fadcf72116100a25780636fadcf72146100f057806379ba5097146101035780638da5cb5b1461010b575f80fd5b8063181f5a77146100bd57806326929eb6146100db575b5f80fd5b6100c561019d565b6040516100d29190610d1e565b60405180910390f35b6100ee6100e9366004610dc3565b6101bd565b005b6100ee6100fe366004610dc3565b6102ea565b6100ee61040d565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d2565b6100ee610157366004610e9d565b610509565b6100ee6105b1565b60025473ffffffffffffffffffffffffffffffffffffffff16610124565b6100ee610190366004610e9d565b61069f565b6101246106b0565b6060604051806060016040528060218152602001610ed260219139905090565b6101c56106b0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061021457505f5473ffffffffffffffffffffffffffffffffffffffff1633145b6102a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572206f60448201527f72206f776e65720000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6102e582826040518060400160405280601e81526020017f476f7665726e6f722064656c656761746563616c6c20726576657274656400008152506106f1565b505050565b6102f26106b0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061034157505f5473ffffffffffffffffffffffffffffffffffffffff1633145b6103cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572206f60448201527f72206f776e657200000000000000000000000000000000000000000000000000606482015260840161029c565b6102e582826040518060400160405280601681526020017f476f7665726e6f722063616c6c20726576657274656400000000000000000000815250610817565b60015473ffffffffffffffffffffffffffffffffffffffff16331461048e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161029c565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6105116106b0565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e6765720000604482015260640161029c565b6105ae8161082d565b50565b6003546105e79073ffffffffffffffffffffffffffffffffffffffff167311110000000000000000000000000000000011110190565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d7573742062652070726f706f736564204c31206f776e657200000000000000604482015260640161029c565b60035461069d9073ffffffffffffffffffffffffffffffffffffffff16610922565b565b6106a76109a3565b6105ae81610a23565b5f6106ec6106d360025473ffffffffffffffffffffffffffffffffffffffff1690565b7311110000000000000000000000000000000011110190565b905090565b606073ffffffffffffffffffffffffffffffffffffffff84163b610797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161029c565b5f808573ffffffffffffffffffffffffffffffffffffffff16856040516107be9190610eb6565b5f60405180830381855af49150503d805f81146107f6576040519150601f19603f3d011682016040523d82523d5f602084013e6107fb565b606091505b509150915061080b828286610b17565b925050505b9392505050565b606061082584845f85610b6a565b949350505050565b3373ffffffffffffffffffffffffffffffffffffffff8216036108ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161029c565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907f55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f905f90a350565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461069d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161029c565b3373ffffffffffffffffffffffffffffffffffffffff821603610aa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161029c565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60608315610b26575081610810565b825115610b365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161029c9190610d1e565b606082471015610bfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161029c565b73ffffffffffffffffffffffffffffffffffffffff85163b610c7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161029c565b5f808673ffffffffffffffffffffffffffffffffffffffff168587604051610ca29190610eb6565b5f6040518083038185875af1925050503d805f8114610cdc576040519150601f19603f3d011682016040523d82523d5f602084013e610ce1565b606091505b5091509150610cf1828286610b17565b979650505050505050565b5f5b83811015610d16578181015183820152602001610cfe565b50505f910152565b602081525f8251806020840152610d3c816040850160208701610cfc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610d91575f80fd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610dd4575f80fd5b610ddd83610d6e565b9150602083013567ffffffffffffffff80821115610df9575f80fd5b818501915085601f830112610e0c575f80fd5b813581811115610e1e57610e1e610d96565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610e6457610e64610d96565b81604052828152886020848701011115610e7c575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215610ead575f80fd5b61081082610d6e565b5f8251610ec7818460208701610cfc565b919091019291505056fe417262697472756d43726f7373446f6d61696e476f7665726e6f7220312e302e30a164736f6c6343000818000a", +} + +var ArbitrumCrossDomainGovernorABI = ArbitrumCrossDomainGovernorMetaData.ABI + +var ArbitrumCrossDomainGovernorBin = ArbitrumCrossDomainGovernorMetaData.Bin + +func DeployArbitrumCrossDomainGovernor(auth *bind.TransactOpts, backend bind.ContractBackend, l1OwnerAddr common.Address) (common.Address, *types.Transaction, *ArbitrumCrossDomainGovernor, error) { + parsed, err := ArbitrumCrossDomainGovernorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ArbitrumCrossDomainGovernorBin), backend, l1OwnerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ArbitrumCrossDomainGovernor{address: address, abi: *parsed, ArbitrumCrossDomainGovernorCaller: ArbitrumCrossDomainGovernorCaller{contract: contract}, ArbitrumCrossDomainGovernorTransactor: ArbitrumCrossDomainGovernorTransactor{contract: contract}, ArbitrumCrossDomainGovernorFilterer: ArbitrumCrossDomainGovernorFilterer{contract: contract}}, nil +} + +type ArbitrumCrossDomainGovernor struct { + address common.Address + abi abi.ABI + ArbitrumCrossDomainGovernorCaller + ArbitrumCrossDomainGovernorTransactor + ArbitrumCrossDomainGovernorFilterer +} + +type ArbitrumCrossDomainGovernorCaller struct { + contract *bind.BoundContract +} + +type ArbitrumCrossDomainGovernorTransactor struct { + contract *bind.BoundContract +} + +type ArbitrumCrossDomainGovernorFilterer struct { + contract *bind.BoundContract +} + +type ArbitrumCrossDomainGovernorSession struct { + Contract *ArbitrumCrossDomainGovernor + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ArbitrumCrossDomainGovernorCallerSession struct { + Contract *ArbitrumCrossDomainGovernorCaller + CallOpts bind.CallOpts +} + +type ArbitrumCrossDomainGovernorTransactorSession struct { + Contract *ArbitrumCrossDomainGovernorTransactor + TransactOpts bind.TransactOpts +} + +type ArbitrumCrossDomainGovernorRaw struct { + Contract *ArbitrumCrossDomainGovernor +} + +type ArbitrumCrossDomainGovernorCallerRaw struct { + Contract *ArbitrumCrossDomainGovernorCaller +} + +type ArbitrumCrossDomainGovernorTransactorRaw struct { + Contract *ArbitrumCrossDomainGovernorTransactor +} + +func NewArbitrumCrossDomainGovernor(address common.Address, backend bind.ContractBackend) (*ArbitrumCrossDomainGovernor, error) { + abi, err := abi.JSON(strings.NewReader(ArbitrumCrossDomainGovernorABI)) + if err != nil { + return nil, err + } + contract, err := bindArbitrumCrossDomainGovernor(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernor{address: address, abi: abi, ArbitrumCrossDomainGovernorCaller: ArbitrumCrossDomainGovernorCaller{contract: contract}, ArbitrumCrossDomainGovernorTransactor: ArbitrumCrossDomainGovernorTransactor{contract: contract}, ArbitrumCrossDomainGovernorFilterer: ArbitrumCrossDomainGovernorFilterer{contract: contract}}, nil +} + +func NewArbitrumCrossDomainGovernorCaller(address common.Address, caller bind.ContractCaller) (*ArbitrumCrossDomainGovernorCaller, error) { + contract, err := bindArbitrumCrossDomainGovernor(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorCaller{contract: contract}, nil +} + +func NewArbitrumCrossDomainGovernorTransactor(address common.Address, transactor bind.ContractTransactor) (*ArbitrumCrossDomainGovernorTransactor, error) { + contract, err := bindArbitrumCrossDomainGovernor(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorTransactor{contract: contract}, nil +} + +func NewArbitrumCrossDomainGovernorFilterer(address common.Address, filterer bind.ContractFilterer) (*ArbitrumCrossDomainGovernorFilterer, error) { + contract, err := bindArbitrumCrossDomainGovernor(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorFilterer{contract: contract}, nil +} + +func bindArbitrumCrossDomainGovernor(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ArbitrumCrossDomainGovernorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumCrossDomainGovernor.Contract.ArbitrumCrossDomainGovernorCaller.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.ArbitrumCrossDomainGovernorTransactor.contract.Transfer(opts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.ArbitrumCrossDomainGovernorTransactor.contract.Transact(opts, method, params...) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumCrossDomainGovernor.Contract.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.contract.Transfer(opts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.contract.Transact(opts, method, params...) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCaller) CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumCrossDomainGovernor.contract.Call(opts, &out, "crossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) CrossDomainMessenger() (common.Address, error) { + return _ArbitrumCrossDomainGovernor.Contract.CrossDomainMessenger(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCallerSession) CrossDomainMessenger() (common.Address, error) { + return _ArbitrumCrossDomainGovernor.Contract.CrossDomainMessenger(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCaller) L1Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumCrossDomainGovernor.contract.Call(opts, &out, "l1Owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) L1Owner() (common.Address, error) { + return _ArbitrumCrossDomainGovernor.Contract.L1Owner(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCallerSession) L1Owner() (common.Address, error) { + return _ArbitrumCrossDomainGovernor.Contract.L1Owner(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumCrossDomainGovernor.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) Owner() (common.Address, error) { + return _ArbitrumCrossDomainGovernor.Contract.Owner(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCallerSession) Owner() (common.Address, error) { + return _ArbitrumCrossDomainGovernor.Contract.Owner(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ArbitrumCrossDomainGovernor.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) TypeAndVersion() (string, error) { + return _ArbitrumCrossDomainGovernor.Contract.TypeAndVersion(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorCallerSession) TypeAndVersion() (string, error) { + return _ArbitrumCrossDomainGovernor.Contract.TypeAndVersion(&_ArbitrumCrossDomainGovernor.CallOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactor) AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.contract.Transact(opts, "acceptL1Ownership") +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.AcceptL1Ownership(&_ArbitrumCrossDomainGovernor.TransactOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.AcceptL1Ownership(&_ArbitrumCrossDomainGovernor.TransactOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.contract.Transact(opts, "acceptOwnership") +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.AcceptOwnership(&_ArbitrumCrossDomainGovernor.TransactOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.AcceptOwnership(&_ArbitrumCrossDomainGovernor.TransactOpts) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactor) Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.contract.Transact(opts, "forward", target, data) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.Forward(&_ArbitrumCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.Forward(&_ArbitrumCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactor) ForwardDelegate(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.contract.Transact(opts, "forwardDelegate", target, data) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) ForwardDelegate(target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.ForwardDelegate(&_ArbitrumCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorSession) ForwardDelegate(target common.Address, data []byte) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.ForwardDelegate(&_ArbitrumCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactor) TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.contract.Transact(opts, "transferL1Ownership", to) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.TransferL1Ownership(&_ArbitrumCrossDomainGovernor.TransactOpts, to) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.TransferL1Ownership(&_ArbitrumCrossDomainGovernor.TransactOpts, to) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.contract.Transact(opts, "transferOwnership", to) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.TransferOwnership(&_ArbitrumCrossDomainGovernor.TransactOpts, to) +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumCrossDomainGovernor.Contract.TransferOwnership(&_ArbitrumCrossDomainGovernor.TransactOpts, to) +} + +type ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator struct { + Event *ArbitrumCrossDomainGovernorL1OwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainGovernorL1OwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.FilterLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator{contract: _ArbitrumCrossDomainGovernor.contract, event: "L1OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.WatchLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainGovernorL1OwnershipTransferRequested) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) ParseL1OwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainGovernorL1OwnershipTransferRequested, error) { + event := new(ArbitrumCrossDomainGovernorL1OwnershipTransferRequested) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator struct { + Event *ArbitrumCrossDomainGovernorL1OwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainGovernorL1OwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.FilterLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator{contract: _ArbitrumCrossDomainGovernor.contract, event: "L1OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.WatchLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainGovernorL1OwnershipTransferred) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) ParseL1OwnershipTransferred(log types.Log) (*ArbitrumCrossDomainGovernorL1OwnershipTransferred, error) { + event := new(ArbitrumCrossDomainGovernorL1OwnershipTransferred) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator struct { + Event *ArbitrumCrossDomainGovernorOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainGovernorOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator{contract: _ArbitrumCrossDomainGovernor.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainGovernorOwnershipTransferRequested) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) ParseOwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainGovernorOwnershipTransferRequested, error) { + event := new(ArbitrumCrossDomainGovernorOwnershipTransferRequested) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumCrossDomainGovernorOwnershipTransferredIterator struct { + Event *ArbitrumCrossDomainGovernorOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumCrossDomainGovernorOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumCrossDomainGovernorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumCrossDomainGovernorOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumCrossDomainGovernorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumCrossDomainGovernorOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumCrossDomainGovernorOwnershipTransferredIterator{contract: _ArbitrumCrossDomainGovernor.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumCrossDomainGovernor.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumCrossDomainGovernorOwnershipTransferred) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernorFilterer) ParseOwnershipTransferred(log types.Log) (*ArbitrumCrossDomainGovernorOwnershipTransferred, error) { + event := new(ArbitrumCrossDomainGovernorOwnershipTransferred) + if err := _ArbitrumCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (ArbitrumCrossDomainGovernorL1OwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0x55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f") +} + +func (ArbitrumCrossDomainGovernorL1OwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0xb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272") +} + +func (ArbitrumCrossDomainGovernorOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ArbitrumCrossDomainGovernorOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_ArbitrumCrossDomainGovernor *ArbitrumCrossDomainGovernor) Address() common.Address { + return _ArbitrumCrossDomainGovernor.address +} + +type ArbitrumCrossDomainGovernorInterface interface { + CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) + + L1Owner(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + ForwardDelegate(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorL1OwnershipTransferRequestedIterator, error) + + WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainGovernorL1OwnershipTransferRequested, error) + + FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorL1OwnershipTransferredIterator, error) + + WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferred(log types.Log) (*ArbitrumCrossDomainGovernorL1OwnershipTransferred, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ArbitrumCrossDomainGovernorOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumCrossDomainGovernorOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumCrossDomainGovernorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ArbitrumCrossDomainGovernorOwnershipTransferred, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/v1_0_0/arbitrum_cross_domain_governor/arbitrum_cross_domain_governor_metadata.go b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_cross_domain_governor/arbitrum_cross_domain_governor_metadata.go new file mode 100644 index 0000000000..0048aed766 --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_cross_domain_governor/arbitrum_cross_domain_governor_metadata.go @@ -0,0 +1,7 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + + +package arbitrum_cross_domain_governor + +var SolidityStandardInput = "{\"version\":\"v0.8.24+commit.e11b9ed9\",\"language\":\"Solidity\",\"settings\":{\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":true,\"bytecodeHash\":\"none\",\"useLiteralContent\":false},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"outputSelection\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/CrossDomainForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/CrossDomainOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainGovernor.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/ICrossDomainOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/IDelegateForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/IForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]}},\"remappings\":[\"forge-std/=src/v0.8/vendor/forge-std/src/\",\"@openzeppelin/contracts@4.7.3/=node_modules/@openzeppelin/contracts-4.7.3/\",\"@openzeppelin/contracts@4.8.3/=node_modules/@openzeppelin/contracts-4.8.3/\",\"@openzeppelin/contracts@4.9.6/=node_modules/@openzeppelin/contracts-4.9.6/\",\"@openzeppelin/contracts@5.0.2/=node_modules/@openzeppelin/contracts-5.0.2/\",\"@openzeppelin/contracts@5.1.0/=node_modules/@openzeppelin/contracts-5.1.0/\",\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@arbitrum/=node_modules/@arbitrum/\",\"hardhat/=node_modules/hardhat/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@zksync/=node_modules/@zksync/\"],\"viaIR\":false},\"sources\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length \\u003e 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance \\u003e= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance \\u003e= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length \\u003e 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"},\"src/v0.8/l2ep/CrossDomainForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {CrossDomainOwnable} from \\\"./CrossDomainOwnable.sol\\\";\\nimport {IForwarder} from \\\"./interfaces/IForwarder.sol\\\";\\n\\n/**\\n * @title CrossDomainForwarder - L1 xDomain account representation\\n * @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n * destination.\\n * @dev Any other L2 contract which uses this contract's address as a privileged position,\\n * can consider that position to be held by the `l1Owner`\\n */\\nabstract contract CrossDomainForwarder is IForwarder, CrossDomainOwnable {}\\n\"},\"src/v0.8/l2ep/CrossDomainOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwner} from \\\"../shared/access/ConfirmedOwner.sol\\\";\\nimport {ICrossDomainOwnable} from \\\"./interfaces/ICrossDomainOwnable.sol\\\";\\n\\n/**\\n * @title The CrossDomainOwnable contract\\n * @notice A contract with helpers for cross-domain contract ownership.\\n */\\ncontract CrossDomainOwnable is ICrossDomainOwnable, ConfirmedOwner {\\n address internal s_l1Owner;\\n address internal s_l1PendingOwner;\\n\\n constructor(\\n address newl1Owner\\n ) ConfirmedOwner(msg.sender) {\\n _setL1Owner(newl1Owner);\\n }\\n\\n /**\\n * @notice transfer ownership of this account to a new L1 owner\\n * @param to new L1 owner that will be allowed to call the forward fn\\n */\\n function transferL1Ownership(\\n address to\\n ) public virtual override onlyL1Owner {\\n _transferL1Ownership(to);\\n }\\n\\n /**\\n * @notice accept ownership of this account to a new L1 owner\\n */\\n function acceptL1Ownership() public virtual override onlyProposedL1Owner {\\n _setL1Owner(s_l1PendingOwner);\\n }\\n\\n /**\\n * @notice Get the current owner\\n */\\n function l1Owner() public view override returns (address) {\\n return s_l1Owner;\\n }\\n\\n /**\\n * @notice validate, transfer ownership, and emit relevant events\\n */\\n function _transferL1Ownership(\\n address to\\n ) internal {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_l1PendingOwner = to;\\n\\n emit L1OwnershipTransferRequested(s_l1Owner, to);\\n }\\n\\n /**\\n * @notice set ownership, emit relevant events. Used in acceptOwnership()\\n */\\n function _setL1Owner(\\n address to\\n ) internal {\\n address oldOwner = s_l1Owner;\\n s_l1Owner = to;\\n s_l1PendingOwner = address(0);\\n\\n emit L1OwnershipTransferred(oldOwner, to);\\n }\\n\\n /**\\n * @notice Reverts if called by anyone other than the L1 owner.\\n */\\n modifier onlyL1Owner() virtual {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_l1Owner, \\\"Only callable by L1 owner\\\");\\n _;\\n }\\n\\n /**\\n * @notice Reverts if called by anyone other than the L1 owner.\\n */\\n modifier onlyProposedL1Owner() virtual {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_l1PendingOwner, \\\"Only callable by proposed L1 owner\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\n// solhint-disable-next-line no-unused-import\\nimport {IForwarder} from \\\"../interfaces/IForwarder.sol\\\";\\n\\nimport {CrossDomainForwarder} from \\\"../CrossDomainForwarder.sol\\\";\\nimport {CrossDomainOwnable} from \\\"../CrossDomainOwnable.sol\\\";\\n\\nimport {AddressAliasHelper} from \\\"../../vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts@4.7.3/utils/Address.sol\\\";\\n\\n/**\\n * @title ArbitrumCrossDomainForwarder - L1 xDomain account representation\\n * @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n * destination.\\n * @dev Any other L2 contract which uses this contract's address as a privileged position,\\n * can be considered to be owned by the `l1Owner`\\n */\\ncontract ArbitrumCrossDomainForwarder is ITypeAndVersion, CrossDomainForwarder {\\n /**\\n * @notice creates a new Arbitrum xDomain Forwarder contract\\n * @param l1OwnerAddr the L1 owner address that will be allowed to call the forward fn\\n * @dev Empty constructor required due to inheriting from abstract contract CrossDomainForwarder\\n */\\n constructor(\\n address l1OwnerAddr\\n ) CrossDomainOwnable(l1OwnerAddr) {}\\n\\n /**\\n * @notice versions:\\n *\\n * - ArbitrumCrossDomainForwarder 0.1.0: initial release\\n * - ArbitrumCrossDomainForwarder 1.0.0: Use OZ Address, CrossDomainOwnable\\n *\\n * @inheritdoc ITypeAndVersion\\n */\\n function typeAndVersion() external pure virtual override returns (string memory) {\\n return \\\"ArbitrumCrossDomainForwarder 1.0.0\\\";\\n }\\n\\n /**\\n * @notice The L2 xDomain `msg.sender`, generated from L1 sender address\\n */\\n function crossDomainMessenger() public view returns (address) {\\n return AddressAliasHelper.applyL1ToL2Alias(l1Owner());\\n }\\n\\n /**\\n * @dev forwarded only if L2 Messenger calls with `xDomainMessageSender` being the L1 owner address\\n * @inheritdoc IForwarder\\n */\\n function forward(address target, bytes memory data) external virtual override onlyL1Owner {\\n Address.functionCall(target, data, \\\"Forwarder call reverted\\\");\\n }\\n\\n /**\\n * @notice The call MUST come from the L1 owner (via cross-chain message.) Reverts otherwise.\\n */\\n modifier onlyL1Owner() override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == crossDomainMessenger(), \\\"Sender is not the L2 messenger\\\");\\n _;\\n }\\n\\n /**\\n * @notice The call MUST come from the proposed L1 owner (via cross-chain message.) Reverts otherwise.\\n */\\n modifier onlyProposedL1Owner() override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == AddressAliasHelper.applyL1ToL2Alias(s_l1PendingOwner), \\\"Must be proposed L1 owner\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/l2ep/arbitrum/ArbitrumCrossDomainGovernor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line no-unused-import\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\nimport {IDelegateForwarder} from \\\"../interfaces/IDelegateForwarder.sol\\\";\\n// solhint-disable-next-line no-unused-import\\nimport {IForwarder} from \\\"../interfaces/IForwarder.sol\\\";\\n\\nimport {ArbitrumCrossDomainForwarder} from \\\"./ArbitrumCrossDomainForwarder.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts@4.7.3/utils/Address.sol\\\";\\n\\n/**\\n * @title ArbitrumCrossDomainGovernor - L1 xDomain account representation (with delegatecall support) for Arbitrum\\n * @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n * destination.\\n * @dev Any other L2 contract which uses this contract's address as a privileged position,\\n * can be considered to be simultaneously owned by the `l1Owner` and L2 `owner`\\n */\\ncontract ArbitrumCrossDomainGovernor is IDelegateForwarder, ArbitrumCrossDomainForwarder {\\n /**\\n * @notice creates a new Arbitrum xDomain Forwarder contract\\n * @param l1OwnerAddr the L1 owner address that will be allowed to call the forward fn\\n * @dev Empty constructor required due to inheriting from abstract contract CrossDomainForwarder\\n */\\n constructor(\\n address l1OwnerAddr\\n ) ArbitrumCrossDomainForwarder(l1OwnerAddr) {}\\n\\n /**\\n * @notice versions:\\n *\\n * - ArbitrumCrossDomainGovernor 1.0.0: initial release\\n *\\n * @inheritdoc ITypeAndVersion\\n */\\n function typeAndVersion() external pure virtual override returns (string memory) {\\n return \\\"ArbitrumCrossDomainGovernor 1.0.0\\\";\\n }\\n\\n /**\\n * @dev forwarded only if L2 Messenger calls with `msg.sender` being the L1 owner address, or called by the L2 owner\\n * @inheritdoc IForwarder\\n */\\n function forward(address target, bytes memory data) external override onlyLocalOrCrossDomainOwner {\\n Address.functionCall(target, data, \\\"Governor call reverted\\\");\\n }\\n\\n /**\\n * @dev forwarded only if L2 Messenger calls with `msg.sender` being the L1 owner address, or called by the L2 owner\\n * @inheritdoc IDelegateForwarder\\n */\\n function forwardDelegate(address target, bytes memory data) external override onlyLocalOrCrossDomainOwner {\\n Address.functionDelegateCall(target, data, \\\"Governor delegatecall reverted\\\");\\n }\\n\\n /**\\n * @notice The call MUST come from either the L1 owner (via cross-chain message) or the L2 owner. Reverts otherwise.\\n */\\n modifier onlyLocalOrCrossDomainOwner() {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == crossDomainMessenger() || msg.sender == owner(), \\\"Sender is not the L2 messenger or owner\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/l2ep/interfaces/ICrossDomainOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title A contract with helpers for cross-domain contract ownership\\ninterface ICrossDomainOwnable {\\n event L1OwnershipTransferRequested(address indexed from, address indexed to);\\n\\n event L1OwnershipTransferred(address indexed from, address indexed to);\\n\\n function l1Owner() external returns (address);\\n\\n function transferL1Ownership(\\n address recipient\\n ) external;\\n\\n function acceptL1Ownership() external;\\n}\\n\"},\"src/v0.8/l2ep/interfaces/IDelegateForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title Forwards a delegatecall to a target, under some conditions\\ninterface IDelegateForwarder {\\n /// @notice forward delegatecalls the `target` with `data`\\n /// @param target contract address to be delegatecalled\\n /// @param data to send to target contract\\n function forwardDelegate(address target, bytes memory data) external;\\n}\\n\"},\"src/v0.8/l2ep/interfaces/IForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title Forwards a call to a target, under some conditions\\ninterface IForwarder {\\n /// @notice forward calls the `target` with `data`\\n /// @param target contract address to be called\\n /// @param data to send to target contract\\n function forward(address target, bytes memory data) external;\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(\\n address newOwner\\n ) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(\\n address to\\n ) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(\\n address to\\n ) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(\\n address recipient\\n ) external;\\n\\n function acceptOwnership() external;\\n}\\n\"},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ITypeAndVersion {\\n function typeAndVersion() external pure returns (string memory);\\n}\\n\"},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\n\\n/*\\n * Copyright 2019-2021, Offchain Labs, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n// NOTICE: pragma change from original (^0.6.11)\\npragma solidity ^0.8.0;\\n\\nlibrary AddressAliasHelper {\\n uint160 constant offset = uint160(0x1111000000000000000000000000000000001111);\\n\\n /// @notice Utility function that converts the msg.sender viewed in the L2 to the\\n /// address in the L1 that submitted a tx to the inbox\\n /// @param l1Address L2 address as viewed in msg.sender\\n /// @return l2Address the address in the L1 that triggered the tx to L2\\n function applyL1ToL2Alias(address l1Address) internal pure returns (address l2Address) {\\n unchecked {\\n l2Address = address(uint160(l1Address) + offset);\\n }\\n }\\n\\n /// @notice Utility function that converts the msg.sender viewed in the L2 to the\\n /// address in the L1 that submitted a tx to the inbox\\n /// @param l2Address L2 address as viewed in msg.sender\\n /// @return l1Address the address in the L1 that triggered the tx to L2\\n function undoL1ToL2Alias(address l2Address) internal pure returns (address l1Address) {\\n unchecked {\\n l1Address = address(uint160(l2Address) - offset);\\n }\\n }\\n}\\n\"}}}" diff --git a/gethwrappers/l2ep/generated/v1_0_0/arbitrum_sequencer_uptime_feed/arbitrum_sequencer_uptime_feed.go b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_sequencer_uptime_feed/arbitrum_sequencer_uptime_feed.go new file mode 100644 index 0000000000..e1a5367109 --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_sequencer_uptime_feed/arbitrum_sequencer_uptime_feed.go @@ -0,0 +1,2271 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package arbitrum_sequencer_uptime_feed + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ArbitrumSequencerUptimeFeedMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"flagsAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1SenderAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"FLAGS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contract IFlags\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"FLAG_L2_SEQ_OFFLINE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"aliasedL1MessageSender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"description\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAnswer\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoundData\",\"inputs\":[{\"name\":\"_roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"outputs\":[{\"name\":\"roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"},{\"name\":\"answer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"answeredInRound\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTimestamp\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_calldata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestAnswer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestRound\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestRoundData\",\"inputs\":[],\"outputs\":[{\"name\":\"roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"},{\"name\":\"answer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"answeredInRound\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferL1Sender\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"updateStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AddedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AnswerUpdated\",\"inputs\":[{\"name\":\"current\",\"type\":\"int256\",\"indexed\":true,\"internalType\":\"int256\"},{\"name\":\"roundId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1SenderTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewRound\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"startedBy\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemovedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdateIgnored\",\"inputs\":[{\"name\":\"latestStatus\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"latestTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"incomingStatus\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"incomingTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyInitialized\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoDataPresent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Uninitialized\",\"inputs\":[]}]", + Bin: "0x6101006040525f60a081905260c081905260e052600480546001600160981b03191690553480156200002f575f80fd5b5060405162001f5638038062001f5683398101604081905262000052916200023d565b33805f81620000a85760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000da57620000da816200010e565b50506001805460ff60a01b1916600160a01b17905550620000fb81620001b8565b506001600160a01b031660805262000273565b336001600160a01b03821603620001685760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200009f565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6003546001600160a01b0390811690821681146200021d57600380546001600160a01b0319166001600160a01b0384811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18905f90a35b5050565b80516001600160a01b038116811462000238575f80fd5b919050565b5f80604083850312156200024f575f80fd5b6200025a8362000221565b91506200026a6020840162000221565b90509250929050565b608051611cb5620002a15f395f8181610317015281816109b8015281816117a9015261187a0152611cb55ff3fe608060405234801561000f575f80fd5b50600436106101b0575f3560e01c80638205bf6a116100f3578063b5ab58dc11610093578063dc7f01241161006e578063dc7f0124146103da578063ed8378f5146103ff578063f2fde38b14610412578063feaf968c14610425575f80fd5b8063b5ab58dc14610396578063b633620c146103a9578063b7558b7a146103bc575f80fd5b8063926aa9f6116100ce578063926aa9f61461030a5780639728538f146103125780639a6fc8f514610339578063a118f24914610383575f80fd5b80638205bf6a146102d25780638823da6c146102da5780638da5cb5b146102ed575f80fd5b806354fd4d501161015e5780637284e416116101395780637284e4161461027e57806379ba5097146102ba5780638038e4a1146102c25780638129fc1c146102ca575f80fd5b806354fd4d501461024b578063668a0f02146102535780636b14daf81461025b575f80fd5b8063284afc081161018e578063284afc0814610209578063313ce5671461021c57806350d25bcd14610235575f80fd5b80630a756983146101b4578063181f5a77146101be5780631e8d27dd146101dc575b5f80fd5b6101bc61042d565b005b6101c66104ab565b6040516101d391906119be565b60405180910390f35b6101e46104cb565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d3565b6101bc610217366004611a4b565b6104fc565b6102235f81565b60405160ff90911681526020016101d3565b61023d610510565b6040519081526020016101d3565b61023d600181565b61023d61062e565b61026e610269366004611a91565b610746565b60405190151581526020016101d3565b6101c66040518060400160405280601f81526020017f4c322053657175656e63657220557074696d652053746174757320466565640081525081565b6101bc61077a565b6101bc610876565b6101bc610909565b61023d610abc565b6101bc6102e8366004611a4b565b610bd5565b5f5473ffffffffffffffffffffffffffffffffffffffff166101e4565b6101e4610c8c565b6101e47f000000000000000000000000000000000000000000000000000000000000000081565b61034c610347366004611b6b565b610ccd565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101d3565b6101bc610391366004611a4b565b610e27565b61023d6103a4366004611b9b565b610ed9565b61023d6103b7366004611b9b565b610fd4565b60035473ffffffffffffffffffffffffffffffffffffffff166101e4565b60015461026e9074010000000000000000000000000000000000000000900460ff1681565b6101bc61040d366004611bbf565b6110cd565b6101bc610420366004611a4b565b611276565b61034c611287565b6104356113c4565b60015474010000000000000000000000000000000000000000900460ff16156104a957600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638905f90a15b565b6060604051806060016040528060218152602001611c8860219139905090565b6104f660017fa438451d6458044c3c8cd2f6f31c91ac882a6d917fa1d50c2bc3074c4524952d611c2f565b60601c81565b6105046113c4565b61050d81611444565b50565b5f610550335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b6105bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff16928201929092529061061b906114de565b6106288160200151611523565b91505090565b5f61066e335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b6106d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105b2565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff169282019290925290610734906114de565b5169ffffffffffffffffffff16905090565b5f6107518383611537565b80610771575073ffffffffffffffffffffffffffffffffffffffff831632145b90505b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146107fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016105b2565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61087e6113c4565b60015474010000000000000000000000000000000000000000900460ff166104a957600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480905f90a1565b6109116113c4565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff1692820192909252901561099f576040517f0dc149f000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b425f73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663357e47fe610a0860017fa438451d6458044c3c8cd2f6f31c91ac882a6d917fa1d50c2bc3074c4524952d611c2f565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260609190911c6004820152602401602060405180830381865afa158015610a5d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a819190611c42565b9050610a8f6001828461158b565b6040517f5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c8905f90a1505050565b5f610afc335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b610b62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105b2565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff169282019290925290610bc2906114de565b6040015167ffffffffffffffff16905090565b610bdd6113c4565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff161561050d5773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d191015b60405180910390a150565b5f610cc8610caf60035473ffffffffffffffffffffffffffffffffffffffff1690565b7311110000000000000000000000000000000011110190565b905090565b5f805f805f610d11335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b610d77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105b2565b600454610d8f9069ffffffffffffffffffff166114de565b610da48669ffffffffffffffffffff16611756565b15610e125769ffffffffffffffffffff86165f9081526005602090815260409182902082518084019093525460ff8116151580845261010090910467ffffffffffffffff1691830191909152610df990611523565b9450806020015167ffffffffffffffff16935050610e19565b5f93505f92505b509394919350915081908490565b610e2f6113c4565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff1661050d5773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49101610c81565b5f610f19335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b610f7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105b2565b600454610f979069ffffffffffffffffffff166114de565b610fa082611756565b15610fcc5769ffffffffffffffffffff82165f908152600560205260409020546107749060ff16611523565b505f5b919050565b5f611014335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b61107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105b2565b6004546110929069ffffffffffffffffffff166114de565b61109b82611756565b15610fcc575069ffffffffffffffffffff165f90815260056020526040902054610100900467ffffffffffffffff1690565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff16928201929092529061112d906114de565b611135610c8c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611199576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8215158160200151151514806111c657508167ffffffffffffffff16816040015167ffffffffffffffff16115b1561123a577fe4a6e16301740042c17431042adb8f60454c18fb5934dd4c456269c0dc388fdf81602001518260400151858560405161122d9493929190931515845267ffffffffffffffff9283166020850152901515604084015216606082015260800190565b60405180910390a1505050565b6001815f0181815161124c9190611c5d565b69ffffffffffffffffffff16905250805161126890848461158b565b6112718361178c565b505050565b61127e6113c4565b61050d816118ca565b5f805f805f6112cb335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061074692505050565b611331576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064016105b2565b6040805160608101825260045469ffffffffffffffffffff81168083526a0100000000000000000000820460ff16151560208401526b01000000000000000000000090910467ffffffffffffffff169282019290925290611391906114de565b805f015195506113a48160200151611523565b6040909101519596909567ffffffffffffffff1694508493508692509050565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146104a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016105b2565b60035473ffffffffffffffffffffffffffffffffffffffff90811690821681146114da57600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18905f90a35b5050565b8069ffffffffffffffffffff165f0361050d576040517f1c72fad400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8161152f575f610774565b600192915050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081205460ff168061077157505060015474010000000000000000000000000000000000000000900460ff161592915050565b60408051808201825283151580825267ffffffffffffffff8481166020808501828152865160608101885269ffffffffffffffffffff8b8116808352828501978852828a018681525f828152600587528b90208a51815496518a16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff911515919091167fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000009097169690961795909517909455825160048054995195519098166b010000000000000000000000027fffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffff9515156a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000909a1691909316179790971792909216919091179093559451908152929390923392917f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271910160405180910390a38469ffffffffffffffffffff1661171285611523565b60405167ffffffffffffffff861681527f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f9060200160405180910390a35050505050565b5f8082118015611770575069ffffffffffffffffffff8211155b801561077457505060045469ffffffffffffffffffff16101590565b80156118635773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663d74af2636117f960017fa438451d6458044c3c8cd2f6f31c91ac882a6d917fa1d50c2bc3074c4524952d611c2f565b60405160e083901b7fffffffff0000000000000000000000000000000000000000000000000000000016815260609190911c60048201526024015f604051808303815f87803b15801561184a575f80fd5b505af115801561185c573d5f803e3d5ffd5b5050505050565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663e37a83666117f960017fa438451d6458044c3c8cd2f6f31c91ac882a6d917fa1d50c2bc3074c4524952d611c2f565b3373ffffffffffffffffffffffffffffffffffffffff821603611949576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016105b2565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f602080835283518060208501525f5b818110156119ea578581018301518582016040015282016119ce565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610fcf575f80fd5b5f60208284031215611a5b575f80fd5b61077182611a28565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215611aa2575f80fd5b611aab83611a28565b9150602083013567ffffffffffffffff80821115611ac7575f80fd5b818501915085601f830112611ada575f80fd5b813581811115611aec57611aec611a64565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611b3257611b32611a64565b81604052828152886020848701011115611b4a575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215611b7b575f80fd5b813569ffffffffffffffffffff81168114611b94575f80fd5b9392505050565b5f60208284031215611bab575f80fd5b5035919050565b801515811461050d575f80fd5b5f8060408385031215611bd0575f80fd5b8235611bdb81611bb2565b9150602083013567ffffffffffffffff81168114611bf7575f80fd5b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181038181111561077457610774611c02565b5f60208284031215611c52575f80fd5b8151611b9481611bb2565b69ffffffffffffffffffff818116838216019080821115611c8057611c80611c02565b509291505056fe417262697472756d53657175656e636572557074696d654665656420312e302e30a164736f6c6343000818000a", +} + +var ArbitrumSequencerUptimeFeedABI = ArbitrumSequencerUptimeFeedMetaData.ABI + +var ArbitrumSequencerUptimeFeedBin = ArbitrumSequencerUptimeFeedMetaData.Bin + +func DeployArbitrumSequencerUptimeFeed(auth *bind.TransactOpts, backend bind.ContractBackend, flagsAddress common.Address, l1SenderAddress common.Address) (common.Address, *types.Transaction, *ArbitrumSequencerUptimeFeed, error) { + parsed, err := ArbitrumSequencerUptimeFeedMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ArbitrumSequencerUptimeFeedBin), backend, flagsAddress, l1SenderAddress) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ArbitrumSequencerUptimeFeed{address: address, abi: *parsed, ArbitrumSequencerUptimeFeedCaller: ArbitrumSequencerUptimeFeedCaller{contract: contract}, ArbitrumSequencerUptimeFeedTransactor: ArbitrumSequencerUptimeFeedTransactor{contract: contract}, ArbitrumSequencerUptimeFeedFilterer: ArbitrumSequencerUptimeFeedFilterer{contract: contract}}, nil +} + +type ArbitrumSequencerUptimeFeed struct { + address common.Address + abi abi.ABI + ArbitrumSequencerUptimeFeedCaller + ArbitrumSequencerUptimeFeedTransactor + ArbitrumSequencerUptimeFeedFilterer +} + +type ArbitrumSequencerUptimeFeedCaller struct { + contract *bind.BoundContract +} + +type ArbitrumSequencerUptimeFeedTransactor struct { + contract *bind.BoundContract +} + +type ArbitrumSequencerUptimeFeedFilterer struct { + contract *bind.BoundContract +} + +type ArbitrumSequencerUptimeFeedSession struct { + Contract *ArbitrumSequencerUptimeFeed + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ArbitrumSequencerUptimeFeedCallerSession struct { + Contract *ArbitrumSequencerUptimeFeedCaller + CallOpts bind.CallOpts +} + +type ArbitrumSequencerUptimeFeedTransactorSession struct { + Contract *ArbitrumSequencerUptimeFeedTransactor + TransactOpts bind.TransactOpts +} + +type ArbitrumSequencerUptimeFeedRaw struct { + Contract *ArbitrumSequencerUptimeFeed +} + +type ArbitrumSequencerUptimeFeedCallerRaw struct { + Contract *ArbitrumSequencerUptimeFeedCaller +} + +type ArbitrumSequencerUptimeFeedTransactorRaw struct { + Contract *ArbitrumSequencerUptimeFeedTransactor +} + +func NewArbitrumSequencerUptimeFeed(address common.Address, backend bind.ContractBackend) (*ArbitrumSequencerUptimeFeed, error) { + abi, err := abi.JSON(strings.NewReader(ArbitrumSequencerUptimeFeedABI)) + if err != nil { + return nil, err + } + contract, err := bindArbitrumSequencerUptimeFeed(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeed{address: address, abi: abi, ArbitrumSequencerUptimeFeedCaller: ArbitrumSequencerUptimeFeedCaller{contract: contract}, ArbitrumSequencerUptimeFeedTransactor: ArbitrumSequencerUptimeFeedTransactor{contract: contract}, ArbitrumSequencerUptimeFeedFilterer: ArbitrumSequencerUptimeFeedFilterer{contract: contract}}, nil +} + +func NewArbitrumSequencerUptimeFeedCaller(address common.Address, caller bind.ContractCaller) (*ArbitrumSequencerUptimeFeedCaller, error) { + contract, err := bindArbitrumSequencerUptimeFeed(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedCaller{contract: contract}, nil +} + +func NewArbitrumSequencerUptimeFeedTransactor(address common.Address, transactor bind.ContractTransactor) (*ArbitrumSequencerUptimeFeedTransactor, error) { + contract, err := bindArbitrumSequencerUptimeFeed(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedTransactor{contract: contract}, nil +} + +func NewArbitrumSequencerUptimeFeedFilterer(address common.Address, filterer bind.ContractFilterer) (*ArbitrumSequencerUptimeFeedFilterer, error) { + contract, err := bindArbitrumSequencerUptimeFeed(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedFilterer{contract: contract}, nil +} + +func bindArbitrumSequencerUptimeFeed(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ArbitrumSequencerUptimeFeedMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumSequencerUptimeFeed.Contract.ArbitrumSequencerUptimeFeedCaller.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.ArbitrumSequencerUptimeFeedTransactor.contract.Transfer(opts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.ArbitrumSequencerUptimeFeedTransactor.contract.Transact(opts, method, params...) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumSequencerUptimeFeed.Contract.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.contract.Transfer(opts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.contract.Transact(opts, method, params...) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) FLAGS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "FLAGS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) FLAGS() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.FLAGS(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) FLAGS() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.FLAGS(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) FLAGL2SEQOFFLINE(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "FLAG_L2_SEQ_OFFLINE") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) FLAGL2SEQOFFLINE() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.FLAGL2SEQOFFLINE(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) FLAGL2SEQOFFLINE() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.FLAGL2SEQOFFLINE(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) AliasedL1MessageSender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "aliasedL1MessageSender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) AliasedL1MessageSender() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.AliasedL1MessageSender(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) AliasedL1MessageSender() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.AliasedL1MessageSender(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) CheckEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "checkEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) CheckEnabled() (bool, error) { + return _ArbitrumSequencerUptimeFeed.Contract.CheckEnabled(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) CheckEnabled() (bool, error) { + return _ArbitrumSequencerUptimeFeed.Contract.CheckEnabled(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) Decimals() (uint8, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Decimals(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) Decimals() (uint8, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Decimals(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) Description(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "description") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) Description() (string, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Description(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) Description() (string, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Description(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) GetAnswer(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "getAnswer", roundId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) GetAnswer(roundId *big.Int) (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.GetAnswer(&_ArbitrumSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) GetAnswer(roundId *big.Int) (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.GetAnswer(&_ArbitrumSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "getRoundData", _roundId) + + outstruct := new(GetRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _ArbitrumSequencerUptimeFeed.Contract.GetRoundData(&_ArbitrumSequencerUptimeFeed.CallOpts, _roundId) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _ArbitrumSequencerUptimeFeed.Contract.GetRoundData(&_ArbitrumSequencerUptimeFeed.CallOpts, _roundId) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) GetTimestamp(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "getTimestamp", roundId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) GetTimestamp(roundId *big.Int) (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.GetTimestamp(&_ArbitrumSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) GetTimestamp(roundId *big.Int) (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.GetTimestamp(&_ArbitrumSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) HasAccess(opts *bind.CallOpts, _user common.Address, _calldata []byte) (bool, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "hasAccess", _user, _calldata) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) HasAccess(_user common.Address, _calldata []byte) (bool, error) { + return _ArbitrumSequencerUptimeFeed.Contract.HasAccess(&_ArbitrumSequencerUptimeFeed.CallOpts, _user, _calldata) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) HasAccess(_user common.Address, _calldata []byte) (bool, error) { + return _ArbitrumSequencerUptimeFeed.Contract.HasAccess(&_ArbitrumSequencerUptimeFeed.CallOpts, _user, _calldata) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) L1Sender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "l1Sender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) L1Sender() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.L1Sender(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) L1Sender() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.L1Sender(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) LatestAnswer(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "latestAnswer") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) LatestAnswer() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestAnswer(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) LatestAnswer() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestAnswer(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) LatestRound(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "latestRound") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) LatestRound() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestRound(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) LatestRound() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestRound(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "latestRoundData") + + outstruct := new(LatestRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) LatestRoundData() (LatestRoundData, + + error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestRoundData(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) LatestRoundData() (LatestRoundData, + + error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestRoundData(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "latestTimestamp") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) LatestTimestamp() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestTimestamp(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) LatestTimestamp() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.LatestTimestamp(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) Owner() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Owner(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) Owner() (common.Address, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Owner(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) TypeAndVersion() (string, error) { + return _ArbitrumSequencerUptimeFeed.Contract.TypeAndVersion(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) TypeAndVersion() (string, error) { + return _ArbitrumSequencerUptimeFeed.Contract.TypeAndVersion(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCaller) Version(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ArbitrumSequencerUptimeFeed.contract.Call(opts, &out, "version") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) Version() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Version(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedCallerSession) Version() (*big.Int, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Version(&_ArbitrumSequencerUptimeFeed.CallOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "acceptOwnership") +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.AcceptOwnership(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.AcceptOwnership(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "addAccess", _user) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.AddAccess(&_ArbitrumSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.AddAccess(&_ArbitrumSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "disableAccessCheck") +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) DisableAccessCheck() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.DisableAccessCheck(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) DisableAccessCheck() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.DisableAccessCheck(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "enableAccessCheck") +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) EnableAccessCheck() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.EnableAccessCheck(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) EnableAccessCheck() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.EnableAccessCheck(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) Initialize(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "initialize") +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) Initialize() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Initialize(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) Initialize() (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.Initialize(&_ArbitrumSequencerUptimeFeed.TransactOpts) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "removeAccess", _user) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.RemoveAccess(&_ArbitrumSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.RemoveAccess(&_ArbitrumSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) TransferL1Sender(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "transferL1Sender", to) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) TransferL1Sender(to common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.TransferL1Sender(&_ArbitrumSequencerUptimeFeed.TransactOpts, to) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) TransferL1Sender(to common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.TransferL1Sender(&_ArbitrumSequencerUptimeFeed.TransactOpts, to) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "transferOwnership", to) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.TransferOwnership(&_ArbitrumSequencerUptimeFeed.TransactOpts, to) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.TransferOwnership(&_ArbitrumSequencerUptimeFeed.TransactOpts, to) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactor) UpdateStatus(opts *bind.TransactOpts, status bool, timestamp uint64) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.contract.Transact(opts, "updateStatus", status, timestamp) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedSession) UpdateStatus(status bool, timestamp uint64) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.UpdateStatus(&_ArbitrumSequencerUptimeFeed.TransactOpts, status, timestamp) +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedTransactorSession) UpdateStatus(status bool, timestamp uint64) (*types.Transaction, error) { + return _ArbitrumSequencerUptimeFeed.Contract.UpdateStatus(&_ArbitrumSequencerUptimeFeed.TransactOpts, status, timestamp) +} + +type ArbitrumSequencerUptimeFeedAddedAccessIterator struct { + Event *ArbitrumSequencerUptimeFeedAddedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedAddedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedAddedAccessIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedAddedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedAddedAccess struct { + User common.Address + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterAddedAccess(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedAddedAccessIterator, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedAddedAccessIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "AddedAccess", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedAddedAccess) (event.Subscription, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedAddedAccess) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseAddedAccess(log types.Log) (*ArbitrumSequencerUptimeFeedAddedAccess, error) { + event := new(ArbitrumSequencerUptimeFeedAddedAccess) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedAnswerUpdatedIterator struct { + Event *ArbitrumSequencerUptimeFeedAnswerUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedAnswerUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedAnswerUpdatedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedAnswerUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedAnswerUpdated struct { + Current *big.Int + RoundId *big.Int + UpdatedAt *big.Int + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*ArbitrumSequencerUptimeFeedAnswerUpdatedIterator, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedAnswerUpdatedIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "AnswerUpdated", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedAnswerUpdated) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "AnswerUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseAnswerUpdated(log types.Log) (*ArbitrumSequencerUptimeFeedAnswerUpdated, error) { + event := new(ArbitrumSequencerUptimeFeedAnswerUpdated) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "AnswerUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator struct { + Event *ArbitrumSequencerUptimeFeedCheckAccessDisabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedCheckAccessDisabled struct { + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "CheckAccessDisabled", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedCheckAccessDisabled) (event.Subscription, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedCheckAccessDisabled) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseCheckAccessDisabled(log types.Log) (*ArbitrumSequencerUptimeFeedCheckAccessDisabled, error) { + event := new(ArbitrumSequencerUptimeFeedCheckAccessDisabled) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator struct { + Event *ArbitrumSequencerUptimeFeedCheckAccessEnabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedCheckAccessEnabled struct { + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "CheckAccessEnabled", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedCheckAccessEnabled) (event.Subscription, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedCheckAccessEnabled) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseCheckAccessEnabled(log types.Log) (*ArbitrumSequencerUptimeFeedCheckAccessEnabled, error) { + event := new(ArbitrumSequencerUptimeFeedCheckAccessEnabled) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedInitializedIterator struct { + Event *ArbitrumSequencerUptimeFeedInitialized + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedInitializedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedInitialized) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedInitializedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedInitialized struct { + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterInitialized(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedInitializedIterator, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedInitializedIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedInitialized) (event.Subscription, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedInitialized) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "Initialized", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseInitialized(log types.Log) (*ArbitrumSequencerUptimeFeedInitialized, error) { + event := new(ArbitrumSequencerUptimeFeedInitialized) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedL1SenderTransferredIterator struct { + Event *ArbitrumSequencerUptimeFeedL1SenderTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedL1SenderTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedL1SenderTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedL1SenderTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedL1SenderTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedL1SenderTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedL1SenderTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterL1SenderTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumSequencerUptimeFeedL1SenderTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "L1SenderTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedL1SenderTransferredIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "L1SenderTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchL1SenderTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedL1SenderTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "L1SenderTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedL1SenderTransferred) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "L1SenderTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseL1SenderTransferred(log types.Log) (*ArbitrumSequencerUptimeFeedL1SenderTransferred, error) { + event := new(ArbitrumSequencerUptimeFeedL1SenderTransferred) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "L1SenderTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedNewRoundIterator struct { + Event *ArbitrumSequencerUptimeFeedNewRound + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedNewRoundIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedNewRoundIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedNewRoundIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedNewRound struct { + RoundId *big.Int + StartedBy common.Address + StartedAt *big.Int + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*ArbitrumSequencerUptimeFeedNewRoundIterator, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedNewRoundIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "NewRound", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchNewRound(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedNewRound) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "NewRound", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseNewRound(log types.Log) (*ArbitrumSequencerUptimeFeedNewRound, error) { + event := new(ArbitrumSequencerUptimeFeedNewRound) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "NewRound", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator struct { + Event *ArbitrumSequencerUptimeFeedOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedOwnershipTransferRequested) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseOwnershipTransferRequested(log types.Log) (*ArbitrumSequencerUptimeFeedOwnershipTransferRequested, error) { + event := new(ArbitrumSequencerUptimeFeedOwnershipTransferRequested) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedOwnershipTransferredIterator struct { + Event *ArbitrumSequencerUptimeFeedOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumSequencerUptimeFeedOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedOwnershipTransferredIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedOwnershipTransferred) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseOwnershipTransferred(log types.Log) (*ArbitrumSequencerUptimeFeedOwnershipTransferred, error) { + event := new(ArbitrumSequencerUptimeFeedOwnershipTransferred) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedRemovedAccessIterator struct { + Event *ArbitrumSequencerUptimeFeedRemovedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedRemovedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedRemovedAccessIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedRemovedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedRemovedAccess struct { + User common.Address + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterRemovedAccess(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedRemovedAccessIterator, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedRemovedAccessIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "RemovedAccess", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedRemovedAccess) (event.Subscription, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedRemovedAccess) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseRemovedAccess(log types.Log) (*ArbitrumSequencerUptimeFeedRemovedAccess, error) { + event := new(ArbitrumSequencerUptimeFeedRemovedAccess) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumSequencerUptimeFeedUpdateIgnoredIterator struct { + Event *ArbitrumSequencerUptimeFeedUpdateIgnored + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumSequencerUptimeFeedUpdateIgnoredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedUpdateIgnored) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumSequencerUptimeFeedUpdateIgnored) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumSequencerUptimeFeedUpdateIgnoredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumSequencerUptimeFeedUpdateIgnoredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumSequencerUptimeFeedUpdateIgnored struct { + LatestStatus bool + LatestTimestamp uint64 + IncomingStatus bool + IncomingTimestamp uint64 + Raw types.Log +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) FilterUpdateIgnored(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedUpdateIgnoredIterator, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.FilterLogs(opts, "UpdateIgnored") + if err != nil { + return nil, err + } + return &ArbitrumSequencerUptimeFeedUpdateIgnoredIterator{contract: _ArbitrumSequencerUptimeFeed.contract, event: "UpdateIgnored", logs: logs, sub: sub}, nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) WatchUpdateIgnored(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedUpdateIgnored) (event.Subscription, error) { + + logs, sub, err := _ArbitrumSequencerUptimeFeed.contract.WatchLogs(opts, "UpdateIgnored") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumSequencerUptimeFeedUpdateIgnored) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "UpdateIgnored", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeedFilterer) ParseUpdateIgnored(log types.Log) (*ArbitrumSequencerUptimeFeedUpdateIgnored, error) { + event := new(ArbitrumSequencerUptimeFeedUpdateIgnored) + if err := _ArbitrumSequencerUptimeFeed.contract.UnpackLog(event, "UpdateIgnored", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} +type LatestRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} + +func (ArbitrumSequencerUptimeFeedAddedAccess) Topic() common.Hash { + return common.HexToHash("0x87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db4") +} + +func (ArbitrumSequencerUptimeFeedAnswerUpdated) Topic() common.Hash { + return common.HexToHash("0x0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f") +} + +func (ArbitrumSequencerUptimeFeedCheckAccessDisabled) Topic() common.Hash { + return common.HexToHash("0x3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638") +} + +func (ArbitrumSequencerUptimeFeedCheckAccessEnabled) Topic() common.Hash { + return common.HexToHash("0xaebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480") +} + +func (ArbitrumSequencerUptimeFeedInitialized) Topic() common.Hash { + return common.HexToHash("0x5daa87a0e9463431830481fd4b6e3403442dfb9a12b9c07597e9f61d50b633c8") +} + +func (ArbitrumSequencerUptimeFeedL1SenderTransferred) Topic() common.Hash { + return common.HexToHash("0x8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18") +} + +func (ArbitrumSequencerUptimeFeedNewRound) Topic() common.Hash { + return common.HexToHash("0x0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271") +} + +func (ArbitrumSequencerUptimeFeedOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ArbitrumSequencerUptimeFeedOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (ArbitrumSequencerUptimeFeedRemovedAccess) Topic() common.Hash { + return common.HexToHash("0x3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d1") +} + +func (ArbitrumSequencerUptimeFeedUpdateIgnored) Topic() common.Hash { + return common.HexToHash("0xe4a6e16301740042c17431042adb8f60454c18fb5934dd4c456269c0dc388fdf") +} + +func (_ArbitrumSequencerUptimeFeed *ArbitrumSequencerUptimeFeed) Address() common.Address { + return _ArbitrumSequencerUptimeFeed.address +} + +type ArbitrumSequencerUptimeFeedInterface interface { + FLAGS(opts *bind.CallOpts) (common.Address, error) + + FLAGL2SEQOFFLINE(opts *bind.CallOpts) (common.Address, error) + + AliasedL1MessageSender(opts *bind.CallOpts) (common.Address, error) + + CheckEnabled(opts *bind.CallOpts) (bool, error) + + Decimals(opts *bind.CallOpts) (uint8, error) + + Description(opts *bind.CallOpts) (string, error) + + GetAnswer(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) + + GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) + + GetTimestamp(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) + + HasAccess(opts *bind.CallOpts, _user common.Address, _calldata []byte) (bool, error) + + L1Sender(opts *bind.CallOpts) (common.Address, error) + + LatestAnswer(opts *bind.CallOpts) (*big.Int, error) + + LatestRound(opts *bind.CallOpts) (*big.Int, error) + + LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) + + LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + Version(opts *bind.CallOpts) (*big.Int, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + Initialize(opts *bind.TransactOpts) (*types.Transaction, error) + + RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + TransferL1Sender(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + UpdateStatus(opts *bind.TransactOpts, status bool, timestamp uint64) (*types.Transaction, error) + + FilterAddedAccess(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedAddedAccessIterator, error) + + WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedAddedAccess) (event.Subscription, error) + + ParseAddedAccess(log types.Log) (*ArbitrumSequencerUptimeFeedAddedAccess, error) + + FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*ArbitrumSequencerUptimeFeedAnswerUpdatedIterator, error) + + WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) + + ParseAnswerUpdated(log types.Log) (*ArbitrumSequencerUptimeFeedAnswerUpdated, error) + + FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedCheckAccessDisabledIterator, error) + + WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedCheckAccessDisabled) (event.Subscription, error) + + ParseCheckAccessDisabled(log types.Log) (*ArbitrumSequencerUptimeFeedCheckAccessDisabled, error) + + FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedCheckAccessEnabledIterator, error) + + WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedCheckAccessEnabled) (event.Subscription, error) + + ParseCheckAccessEnabled(log types.Log) (*ArbitrumSequencerUptimeFeedCheckAccessEnabled, error) + + FilterInitialized(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedInitializedIterator, error) + + WatchInitialized(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedInitialized) (event.Subscription, error) + + ParseInitialized(log types.Log) (*ArbitrumSequencerUptimeFeedInitialized, error) + + FilterL1SenderTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumSequencerUptimeFeedL1SenderTransferredIterator, error) + + WatchL1SenderTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedL1SenderTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1SenderTransferred(log types.Log) (*ArbitrumSequencerUptimeFeedL1SenderTransferred, error) + + FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*ArbitrumSequencerUptimeFeedNewRoundIterator, error) + + WatchNewRound(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) + + ParseNewRound(log types.Log) (*ArbitrumSequencerUptimeFeedNewRound, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumSequencerUptimeFeedOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ArbitrumSequencerUptimeFeedOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumSequencerUptimeFeedOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ArbitrumSequencerUptimeFeedOwnershipTransferred, error) + + FilterRemovedAccess(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedRemovedAccessIterator, error) + + WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedRemovedAccess) (event.Subscription, error) + + ParseRemovedAccess(log types.Log) (*ArbitrumSequencerUptimeFeedRemovedAccess, error) + + FilterUpdateIgnored(opts *bind.FilterOpts) (*ArbitrumSequencerUptimeFeedUpdateIgnoredIterator, error) + + WatchUpdateIgnored(opts *bind.WatchOpts, sink chan<- *ArbitrumSequencerUptimeFeedUpdateIgnored) (event.Subscription, error) + + ParseUpdateIgnored(log types.Log) (*ArbitrumSequencerUptimeFeedUpdateIgnored, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/v1_0_0/arbitrum_sequencer_uptime_feed/arbitrum_sequencer_uptime_feed_metadata.go b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_sequencer_uptime_feed/arbitrum_sequencer_uptime_feed_metadata.go new file mode 100644 index 0000000000..8349a59950 --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_sequencer_uptime_feed/arbitrum_sequencer_uptime_feed_metadata.go @@ -0,0 +1,7 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + + +package arbitrum_sequencer_uptime_feed + +var SolidityStandardInput = "{\"version\":\"v0.8.24+commit.e11b9ed9\",\"language\":\"Solidity\",\"settings\":{\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":true,\"bytecodeHash\":\"none\",\"useLiteralContent\":false},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"outputSelection\":{\"src/v0.8/l2ep/arbitrum/ArbitrumSequencerUptimeFeed.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/IFlags.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/ISequencerUptimeFeed.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/SimpleReadAccessController.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/SimpleWriteAccessController.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AccessControllerInterface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AggregatorInterface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]}},\"remappings\":[\"forge-std/=src/v0.8/vendor/forge-std/src/\",\"@openzeppelin/contracts@4.7.3/=node_modules/@openzeppelin/contracts-4.7.3/\",\"@openzeppelin/contracts@4.8.3/=node_modules/@openzeppelin/contracts-4.8.3/\",\"@openzeppelin/contracts@4.9.6/=node_modules/@openzeppelin/contracts-4.9.6/\",\"@openzeppelin/contracts@5.0.2/=node_modules/@openzeppelin/contracts-5.0.2/\",\"@openzeppelin/contracts@5.1.0/=node_modules/@openzeppelin/contracts-5.1.0/\",\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@arbitrum/=node_modules/@arbitrum/\",\"hardhat/=node_modules/hardhat/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@zksync/=node_modules/@zksync/\"],\"viaIR\":false},\"sources\":{\"src/v0.8/l2ep/arbitrum/ArbitrumSequencerUptimeFeed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport {SimpleReadAccessController} from \\\"../../shared/access/SimpleReadAccessController.sol\\\";\\nimport {AggregatorInterface} from \\\"../../shared/interfaces/AggregatorInterface.sol\\\";\\nimport {AggregatorV2V3Interface} from \\\"../../shared/interfaces/AggregatorV2V3Interface.sol\\\";\\nimport {AggregatorV3Interface} from \\\"../../shared/interfaces/AggregatorV3Interface.sol\\\";\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\nimport {AddressAliasHelper} from \\\"../../vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol\\\";\\nimport {IFlags} from \\\"../interfaces/IFlags.sol\\\";\\nimport {ISequencerUptimeFeed} from \\\"../interfaces/ISequencerUptimeFeed.sol\\\";\\n\\n/**\\n * @title ArbitrumSequencerUptimeFeed - L2 sequencer uptime status aggregator\\n * @notice L2 contract that receives status updates from a specific L1 address,\\n * records a new answer if the status changed, and raises or lowers the flag on the\\n * stored Flags contract.\\n */\\ncontract ArbitrumSequencerUptimeFeed is\\n AggregatorV2V3Interface,\\n ISequencerUptimeFeed,\\n ITypeAndVersion,\\n SimpleReadAccessController\\n{\\n /// @dev Round info (for uptime history)\\n struct Round {\\n bool status;\\n uint64 timestamp;\\n }\\n\\n /// @dev Packed state struct to save sloads\\n struct FeedState {\\n uint80 latestRoundId;\\n bool latestStatus;\\n uint64 latestTimestamp;\\n }\\n\\n /// @notice Contract is not yet initialized\\n error Uninitialized();\\n /// @notice Contract is already initialized\\n error AlreadyInitialized();\\n /// @notice Sender is not the L2 messenger\\n error InvalidSender();\\n /// @notice Replacement for AggregatorV3Interface \\\"No data present\\\"\\n error NoDataPresent();\\n\\n event Initialized();\\n event L1SenderTransferred(address indexed from, address indexed to);\\n /// @dev Emitted when an `updateStatus` call is ignored due to unchanged status or stale timestamp\\n event UpdateIgnored(bool latestStatus, uint64 latestTimestamp, bool incomingStatus, uint64 incomingTimestamp);\\n\\n /// @dev Follows: https://eips.ethereum.org/EIPS/eip-1967\\n address public constant FLAG_L2_SEQ_OFFLINE =\\n address(bytes20(bytes32(uint256(keccak256(\\\"chainlink.flags.arbitrum-seq-offline\\\")) - 1)));\\n\\n // solhint-disable-next-line chainlink-solidity/all-caps-constant-storage-variables\\n uint8 public constant override decimals = 0;\\n // solhint-disable-next-line chainlink-solidity/all-caps-constant-storage-variables\\n string public constant override description = \\\"L2 Sequencer Uptime Status Feed\\\";\\n // solhint-disable-next-line chainlink-solidity/all-caps-constant-storage-variables\\n uint256 public constant override version = 1;\\n\\n /// @dev Flags contract to raise/lower flags on, during status transitions\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n IFlags public immutable FLAGS;\\n /// @dev L1 address\\n address private s_l1Sender;\\n /// @dev s_latestRoundId == 0 means this contract is uninitialized.\\n FeedState private s_feedState = FeedState({latestRoundId: 0, latestStatus: false, latestTimestamp: 0});\\n mapping(uint80 =\\u003e Round) private s_rounds;\\n\\n /**\\n * @param flagsAddress Address of the Flags contract on L2\\n * @param l1SenderAddress Address of the L1 contract that is permissioned to call this contract\\n */\\n constructor(address flagsAddress, address l1SenderAddress) {\\n _setL1Sender(l1SenderAddress);\\n\\n FLAGS = IFlags(flagsAddress);\\n }\\n\\n /**\\n * @notice Check if a roundId is valid in this current contract state\\n * @dev Mainly used for AggregatorV2V3Interface functions\\n * @param roundId Round ID to check\\n */\\n function _isValidRound(\\n uint256 roundId\\n ) private view returns (bool) {\\n return roundId \\u003e 0 \\u0026\\u0026 roundId \\u003c= type(uint80).max \\u0026\\u0026 s_feedState.latestRoundId \\u003e= roundId;\\n }\\n\\n /// @notice Check that this contract is initialised, otherwise throw\\n function _requireInitialized(\\n uint80 latestRoundId\\n ) private pure {\\n if (latestRoundId == 0) {\\n revert Uninitialized();\\n }\\n }\\n\\n /**\\n * @notice Initialise the first round. Can't be done in the constructor,\\n * because this contract's address must be permissioned by the the Flags contract\\n * (The Flags contract itself is a SimpleReadAccessController).\\n */\\n function initialize() external onlyOwner {\\n FeedState memory feedState = s_feedState;\\n if (feedState.latestRoundId != 0) {\\n revert AlreadyInitialized();\\n }\\n\\n uint64 timestamp = uint64(block.timestamp);\\n bool currentStatus = FLAGS.getFlag(FLAG_L2_SEQ_OFFLINE);\\n\\n // Initialise roundId == 1 as the first round\\n _recordRound(1, currentStatus, timestamp);\\n\\n emit Initialized();\\n }\\n\\n /**\\n * @notice versions:\\n *\\n * - ArbitrumSequencerUptimeFeed 1.0.0: initial release\\n *\\n * @inheritdoc ITypeAndVersion\\n */\\n function typeAndVersion() external pure virtual override returns (string memory) {\\n return \\\"ArbitrumSequencerUptimeFeed 1.0.0\\\";\\n }\\n\\n /// @return L1 sender address\\n function l1Sender() public view virtual returns (address) {\\n return s_l1Sender;\\n }\\n\\n /**\\n * @notice Set the allowed L1 sender for this contract to a new L1 sender\\n * @dev Can be disabled by setting the L1 sender as `address(0)`. Accessible only by owner.\\n * @param to new L1 sender that will be allowed to call `updateStatus` on this contract\\n */\\n function transferL1Sender(\\n address to\\n ) external virtual onlyOwner {\\n _setL1Sender(to);\\n }\\n\\n /// @notice internal method that stores the L1 sender\\n function _setL1Sender(\\n address to\\n ) private {\\n address from = s_l1Sender;\\n if (from != to) {\\n s_l1Sender = to;\\n emit L1SenderTransferred(from, to);\\n }\\n }\\n\\n /**\\n * @notice Messages sent by the stored L1 sender will arrive on L2 with this\\n * address as the `msg.sender`\\n * @return L2-aliased form of the L1 sender address\\n */\\n function aliasedL1MessageSender() public view returns (address) {\\n return AddressAliasHelper.applyL1ToL2Alias(l1Sender());\\n }\\n\\n /**\\n * @dev Returns an AggregatorV2V3Interface compatible answer from status flag\\n *\\n * @param status The status flag to convert to an aggregator-compatible answer\\n */\\n function _getStatusAnswer(\\n bool status\\n ) private pure returns (int256) {\\n return status ? int256(1) : int256(0);\\n }\\n\\n /**\\n * @notice Raise or lower the flag on the stored Flags contract.\\n */\\n function _forwardStatusToFlags(\\n bool status\\n ) private {\\n if (status) {\\n FLAGS.raiseFlag(FLAG_L2_SEQ_OFFLINE);\\n } else {\\n FLAGS.lowerFlag(FLAG_L2_SEQ_OFFLINE);\\n }\\n }\\n\\n /**\\n * @notice Helper function to record a round and set the latest feed state.\\n *\\n * @param roundId The round ID to record\\n * @param status Sequencer status\\n * @param timestamp Block timestamp of status update\\n */\\n function _recordRound(uint80 roundId, bool status, uint64 timestamp) private {\\n Round memory nextRound = Round(status, timestamp);\\n FeedState memory feedState = FeedState(roundId, status, timestamp);\\n\\n s_rounds[roundId] = nextRound;\\n s_feedState = feedState;\\n\\n emit NewRound(roundId, msg.sender, timestamp);\\n emit AnswerUpdated(_getStatusAnswer(status), roundId, timestamp);\\n }\\n\\n /**\\n * @notice Record a new status and timestamp if it has changed since the last round.\\n * @dev This function will revert if not called from `l1Sender` via the L1-\\u003eL2 messenger.\\n *\\n * @param status Sequencer status\\n * @param timestamp Block timestamp of status update\\n */\\n function updateStatus(bool status, uint64 timestamp) external override {\\n FeedState memory feedState = s_feedState;\\n _requireInitialized(feedState.latestRoundId);\\n if (msg.sender != aliasedL1MessageSender()) {\\n revert InvalidSender();\\n }\\n\\n // Ignore if status did not change or latest recorded timestamp is newer\\n if (feedState.latestStatus == status || feedState.latestTimestamp \\u003e timestamp) {\\n emit UpdateIgnored(feedState.latestStatus, feedState.latestTimestamp, status, timestamp);\\n return;\\n }\\n\\n // Prepare a new round with updated status\\n feedState.latestRoundId += 1;\\n _recordRound(feedState.latestRoundId, status, timestamp);\\n\\n _forwardStatusToFlags(status);\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function latestAnswer() external view override checkAccess returns (int256) {\\n FeedState memory feedState = s_feedState;\\n _requireInitialized(feedState.latestRoundId);\\n return _getStatusAnswer(feedState.latestStatus);\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function latestTimestamp() external view override checkAccess returns (uint256) {\\n FeedState memory feedState = s_feedState;\\n _requireInitialized(feedState.latestRoundId);\\n return feedState.latestTimestamp;\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function latestRound() external view override checkAccess returns (uint256) {\\n FeedState memory feedState = s_feedState;\\n _requireInitialized(feedState.latestRoundId);\\n return feedState.latestRoundId;\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function getAnswer(\\n uint256 roundId\\n ) external view override checkAccess returns (int256) {\\n _requireInitialized(s_feedState.latestRoundId);\\n if (_isValidRound(roundId)) {\\n return _getStatusAnswer(s_rounds[uint80(roundId)].status);\\n }\\n\\n return 0;\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function getTimestamp(\\n uint256 roundId\\n ) external view override checkAccess returns (uint256) {\\n _requireInitialized(s_feedState.latestRoundId);\\n if (_isValidRound(roundId)) {\\n return s_rounds[uint80(roundId)].timestamp;\\n }\\n\\n return 0;\\n }\\n\\n /// @inheritdoc AggregatorV3Interface\\n function getRoundData(\\n uint80 _roundId\\n )\\n public\\n view\\n override\\n checkAccess\\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)\\n {\\n _requireInitialized(s_feedState.latestRoundId);\\n\\n if (_isValidRound(_roundId)) {\\n Round memory round = s_rounds[_roundId];\\n answer = _getStatusAnswer(round.status);\\n startedAt = uint256(round.timestamp);\\n } else {\\n answer = 0;\\n startedAt = 0;\\n }\\n roundId = _roundId;\\n updatedAt = startedAt;\\n answeredInRound = roundId;\\n\\n return (roundId, answer, startedAt, updatedAt, answeredInRound);\\n }\\n\\n /// @inheritdoc AggregatorV3Interface\\n function latestRoundData()\\n external\\n view\\n override\\n checkAccess\\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)\\n {\\n FeedState memory feedState = s_feedState;\\n _requireInitialized(feedState.latestRoundId);\\n\\n roundId = feedState.latestRoundId;\\n answer = _getStatusAnswer(feedState.latestStatus);\\n startedAt = feedState.latestTimestamp;\\n updatedAt = startedAt;\\n answeredInRound = roundId;\\n\\n return (roundId, answer, startedAt, updatedAt, answeredInRound);\\n }\\n}\\n\"},\"src/v0.8/l2ep/interfaces/IFlags.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IFlags {\\n function getFlag(\\n address\\n ) external view returns (bool);\\n\\n function getFlags(\\n address[] calldata\\n ) external view returns (bool[] memory);\\n\\n function raiseFlag(\\n address\\n ) external;\\n\\n function raiseFlags(\\n address[] calldata\\n ) external;\\n\\n function lowerFlag(\\n address\\n ) external;\\n\\n function lowerFlags(\\n address[] calldata\\n ) external;\\n\\n function setRaisingAccessController(\\n address\\n ) external;\\n\\n function setLoweringAccessController(\\n address\\n ) external;\\n}\\n\"},\"src/v0.8/l2ep/interfaces/ISequencerUptimeFeed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ISequencerUptimeFeed {\\n function updateStatus(bool status, uint64 timestamp) external;\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(\\n address newOwner\\n ) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(\\n address to\\n ) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(\\n address to\\n ) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/access/SimpleReadAccessController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {SimpleWriteAccessController} from \\\"./SimpleWriteAccessController.sol\\\";\\n\\n/// @title SimpleReadAccessController\\n/// @notice Gives access to:\\n/// - any externally owned account (note that off-chain actors can always read\\n/// any contract storage regardless of on-chain access control measures, so this\\n/// does not weaken the access control while improving usability)\\n/// - accounts explicitly added to an access list\\n/// @dev SimpleReadAccessController is not suitable for access controlling writes\\n/// since it grants any externally owned account access! See\\n/// SimpleWriteAccessController for that.\\ncontract SimpleReadAccessController is SimpleWriteAccessController {\\n /// @notice Returns the access of an address\\n /// @param _user The address to query\\n function hasAccess(address _user, bytes memory _calldata) public view virtual override returns (bool) {\\n // solhint-disable-next-line avoid-tx-origin\\n return super.hasAccess(_user, _calldata) || _user == tx.origin;\\n }\\n}\\n\"},\"src/v0.8/shared/access/SimpleWriteAccessController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {AccessControllerInterface} from \\\"../interfaces/AccessControllerInterface.sol\\\";\\nimport {ConfirmedOwner} from \\\"./ConfirmedOwner.sol\\\";\\n\\n/// @title SimpleWriteAccessController\\n/// @notice Gives access to accounts explicitly added to an access list by the controller's owner.\\n/// @dev does not make any special permissions for externally, see SimpleReadAccessController for that.\\ncontract SimpleWriteAccessController is AccessControllerInterface, ConfirmedOwner {\\n bool public checkEnabled;\\n mapping(address =\\u003e bool) internal s_accessList;\\n\\n event AddedAccess(address user);\\n event RemovedAccess(address user);\\n event CheckAccessEnabled();\\n event CheckAccessDisabled();\\n\\n constructor() ConfirmedOwner(msg.sender) {\\n checkEnabled = true;\\n }\\n\\n /// @notice Returns the access of an address\\n /// @param _user The address to query\\n function hasAccess(address _user, bytes memory) public view virtual override returns (bool) {\\n return s_accessList[_user] || !checkEnabled;\\n }\\n\\n /// @notice Adds an address to the access list\\n /// @param _user The address to add\\n function addAccess(\\n address _user\\n ) external onlyOwner {\\n if (!s_accessList[_user]) {\\n s_accessList[_user] = true;\\n\\n emit AddedAccess(_user);\\n }\\n }\\n\\n /// @notice Removes an address from the access list\\n /// @param _user The address to remove\\n function removeAccess(\\n address _user\\n ) external onlyOwner {\\n if (s_accessList[_user]) {\\n s_accessList[_user] = false;\\n\\n emit RemovedAccess(_user);\\n }\\n }\\n\\n /// @notice makes the access check enforced\\n function enableAccessCheck() external onlyOwner {\\n if (!checkEnabled) {\\n checkEnabled = true;\\n\\n emit CheckAccessEnabled();\\n }\\n }\\n\\n /// @notice makes the access check unenforced\\n function disableAccessCheck() external onlyOwner {\\n if (checkEnabled) {\\n checkEnabled = false;\\n\\n emit CheckAccessDisabled();\\n }\\n }\\n\\n /// @dev reverts if the caller does not have access\\n modifier checkAccess() {\\n // solhint-disable-next-line gas-custom-errors\\n require(hasAccess(msg.sender, msg.data), \\\"No access\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/interfaces/AccessControllerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AccessControllerInterface {\\n function hasAccess(address user, bytes calldata data) external view returns (bool);\\n}\\n\"},\"src/v0.8/shared/interfaces/AggregatorInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AggregatorInterface {\\n function latestAnswer() external view returns (int256);\\n\\n function latestTimestamp() external view returns (uint256);\\n\\n function latestRound() external view returns (uint256);\\n\\n function getAnswer(\\n uint256 roundId\\n ) external view returns (int256);\\n\\n function getTimestamp(\\n uint256 roundId\\n ) external view returns (uint256);\\n\\n event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\\n\\n event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);\\n}\\n\"},\"src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {AggregatorInterface} from \\\"./AggregatorInterface.sol\\\";\\nimport {AggregatorV3Interface} from \\\"./AggregatorV3Interface.sol\\\";\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AggregatorV2V3Interface is AggregatorInterface, AggregatorV3Interface {}\\n\"},\"src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AggregatorV3Interface {\\n function decimals() external view returns (uint8);\\n\\n function description() external view returns (string memory);\\n\\n function version() external view returns (uint256);\\n\\n function getRoundData(\\n uint80 _roundId\\n ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);\\n\\n function latestRoundData()\\n external\\n view\\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);\\n}\\n\"},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(\\n address recipient\\n ) external;\\n\\n function acceptOwnership() external;\\n}\\n\"},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ITypeAndVersion {\\n function typeAndVersion() external pure returns (string memory);\\n}\\n\"},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\n\\n/*\\n * Copyright 2019-2021, Offchain Labs, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n// NOTICE: pragma change from original (^0.6.11)\\npragma solidity ^0.8.0;\\n\\nlibrary AddressAliasHelper {\\n uint160 constant offset = uint160(0x1111000000000000000000000000000000001111);\\n\\n /// @notice Utility function that converts the msg.sender viewed in the L2 to the\\n /// address in the L1 that submitted a tx to the inbox\\n /// @param l1Address L2 address as viewed in msg.sender\\n /// @return l2Address the address in the L1 that triggered the tx to L2\\n function applyL1ToL2Alias(address l1Address) internal pure returns (address l2Address) {\\n unchecked {\\n l2Address = address(uint160(l1Address) + offset);\\n }\\n }\\n\\n /// @notice Utility function that converts the msg.sender viewed in the L2 to the\\n /// address in the L1 that submitted a tx to the inbox\\n /// @param l2Address L2 address as viewed in msg.sender\\n /// @return l1Address the address in the L1 that triggered the tx to L2\\n function undoL1ToL2Alias(address l2Address) internal pure returns (address l1Address) {\\n unchecked {\\n l1Address = address(uint160(l2Address) - offset);\\n }\\n }\\n}\\n\"}}}" diff --git a/gethwrappers/l2ep/generated/v1_0_0/arbitrum_validator/arbitrum_validator.go b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_validator/arbitrum_validator.go new file mode 100644 index 0000000000..e4e431101b --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_validator/arbitrum_validator.go @@ -0,0 +1,2120 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package arbitrum_validator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +type ArbitrumValidatorGasConfig struct { + MaxGas *big.Int + GasPriceBid *big.Int + BaseFee *big.Int + GasPriceL1FeedAddr common.Address +} + +var ArbitrumValidatorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"crossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2ArbitrumSequencerUptimeFeedAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"configACAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPriceBid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"baseFee\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPriceL1FeedAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_paymentStrategy\",\"type\":\"uint8\",\"internalType\":\"enum ArbitrumValidator.PaymentStrategy\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"CROSS_DOMAIN_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_ALIAS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_SEQ_STATUS_RECORDER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"configAC\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"gasConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"struct ArbitrumValidator.GasConfig\",\"components\":[{\"name\":\"maxGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPriceBid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"baseFee\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPriceL1FeedAddr\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paymentStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enum ArbitrumValidator.PaymentStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setConfigAC\",\"inputs\":[{\"name\":\"accessController\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"maxGas\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPriceBid\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"baseFee\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"gasPriceL1FeedAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPaymentStrategy\",\"inputs\":[{\"name\":\"_paymentStrategy\",\"type\":\"uint8\",\"internalType\":\"enum ArbitrumValidator.PaymentStrategy\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"validate\",\"inputs\":[{\"name\":\"previousRoundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"previousAnswer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"currentRoundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"currentAnswer\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawFunds\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawFundsFromL2\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"refundAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"id\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawFundsTo\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"addresspayable\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AddedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConfigACSet\",\"inputs\":[{\"name\":\"previous\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"current\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GasConfigSet\",\"inputs\":[{\"name\":\"maxGas\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasPriceBid\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"gasPriceL1FeedAddr\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L2WithdrawalRequested\",\"inputs\":[{\"name\":\"id\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"refundAddr\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PaymentStrategySet\",\"inputs\":[{\"name\":\"paymentStrategy\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enum ArbitrumValidator.PaymentStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemovedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatedStatus\",\"inputs\":[{\"name\":\"previousRoundId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"previousAnswer\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"currentRoundId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"currentAnswer\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false}]", + Bin: "0x60e060405273111100000000000000000000000000000000111130016001600160a01b031660c05234801562000033575f80fd5b506040516200224a3803806200224a833981016040819052620000569162000532565b33805f81620000ac5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000de57620000de8162000219565b50506001805460ff60a01b1916600160a01b179055506001600160a01b038816620001565760405162461bcd60e51b815260206004820152602160248201527f496e76616c69642078446f6d61696e204d657373656e676572206164647265736044820152607360f81b6064820152608401620000a3565b6001600160a01b038716620001d45760405162461bcd60e51b815260206004820152603460248201527f496e76616c696420417262697472756d53657175656e636572557074696d654660448201527f65656420636f6e747261637420616464726573730000000000000000000000006064820152608401620000a3565b6001600160a01b03808916608052871660a052620001f286620002c3565b62000200858585856200032c565b6200020b81620004b0565b5050505050505050620005d4565b336001600160a01b03821603620002735760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620000a3565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6008546001600160a01b0390811690821681146200032857600880546001600160a01b0319166001600160a01b0384811691821790925560405190918316907f6b0ce63879b19fa36f93da30a36f44140d8c3c727b6c75a16165c2017037d2cc905f90a35b5050565b5f84116200036f5760405162461bcd60e51b815260206004820152600f60248201526e4d617820676173206973207a65726f60881b6044820152606401620000a3565b5f8311620003c05760405162461bcd60e51b815260206004820152601560248201527f47617320707269636520626964206973207a65726f00000000000000000000006044820152606401620000a3565b6001600160a01b038116620004245760405162461bcd60e51b8152602060048201526024808201527f4761732070726963652041676772656761746f72206973207a65726f206164646044820152637265737360e01b6064820152608401620000a3565b6040805160808101825285815260208082018690528183018590526001600160a01b0384166060909201829052600487905560058690556006859055600780546001600160a01b03191683179055825187815290810186905290917f35674f8e28e701bef8f072d1034d588998f6966a59806b4299f6749c86b269e3910160405180910390a250505050565b6003805482919060ff191660018381811115620004d157620004d1620005c0565b0217905550806001811115620004eb57620004eb620005c0565b6040517fcc19f6868f2a8f851b1b59973487a53f0ac827f88698345b1529ef7c77b22bb5905f90a250565b80516001600160a01b03811681146200052d575f80fd5b919050565b5f805f805f805f80610100898b0312156200054b575f80fd5b620005568962000516565b97506200056660208a0162000516565b96506200057660408a0162000516565b9550606089015194506080890151935060a089015192506200059b60c08a0162000516565b915060e089015160028110620005af575f80fd5b809150509295985092959890939650565b634e487b7160e01b5f52602160045260245ffd5b60805160a05160c051611c28620006225f395f81816102b20152610f6401525f81816104c8015261100c01525f81816101cc015281816106a001528181610fcf01526113b60152611c285ff3fe60806040526004361061017b575f3560e01c80636b14daf8116100d1578063a118f2491161007c578063bfb9d1ab11610057578063bfb9d1ab146104b7578063dc7f0124146104ea578063f2fde38b1461051b575f80fd5b8063a118f2491461045a578063a2e6e0eb14610479578063beed9b5114610498575f80fd5b80638823da6c116100ac5780638823da6c146103f35780638a67ad0f146104125780638da5cb5b14610431575f80fd5b80636b14daf81461039c57806379ba5097146103cb5780638038e4a1146103df575f80fd5b8063276bf08f11610131578063490a44321161010c578063490a4432146103015780635c178f371461035e5780635e521eca1461037d575f80fd5b8063276bf08f146102775780633e48f015146102a157806344c2fa0c146102d4575f80fd5b806316be836c1161016157806316be836c146101bb578063181f5a771461021857806324600fc314610263575f80fd5b806302163e6c146101865780630a756983146101a7575f80fd5b3661018257005b5f80fd5b348015610191575f80fd5b506101a56101a0366004611801565b61053a565b005b3480156101b2575f80fd5b506101a561054e565b3480156101c6575f80fd5b506101ee7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610223575f80fd5b50604080518082018252601781527f417262697472756d56616c696461746f7220322e302e300000000000000000006020820152905161020f919061187d565b34801561026e575f80fd5b506101a56105cc565b348015610282575f80fd5b5060085473ffffffffffffffffffffffffffffffffffffffff166101ee565b3480156102ac575f80fd5b506101ee7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102df575f80fd5b506102f36102ee36600461188f565b6105e4565b60405190815260200161020f565b34801561030c575f80fd5b506103156107a7565b60405161020f919081518152602080830151908201526040808301519082015260609182015173ffffffffffffffffffffffffffffffffffffffff169181019190915260800190565b348015610369575f80fd5b506101a56103783660046118bd565b610827565b348015610388575f80fd5b5060035460ff1660405161020f9190611928565b3480156103a7575f80fd5b506103bb6103b6366004611994565b61097f565b604051901515815260200161020f565b3480156103d6575f80fd5b506101a56109d4565b3480156103ea575f80fd5b506101a5610ad0565b3480156103fe575f80fd5b506101a561040d366004611801565b610b63565b34801561041d575f80fd5b506101a561042c366004611a70565b610c1a565b34801561043c575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff166101ee565b348015610465575f80fd5b506101a5610474366004611801565b610d64565b348015610484575f80fd5b506101a5610493366004611801565b610e16565b3480156104a3575f80fd5b506103bb6104b2366004611a8e565b610e29565b3480156104c2575f80fd5b506101ee7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104f5575f80fd5b506001546103bb9074010000000000000000000000000000000000000000900460ff1681565b348015610526575f80fd5b506101a5610535366004611801565b6110f5565b610542611106565b61054b81611186565b50565b610556611106565b60015474010000000000000000000000000000000000000000900460ff16156105ca57600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638905f90a15b565b6105d4611106565b33476105e0828261121f565b5050565b5f6105ed611106565b60408051306024808301919091528251808303909101815260449091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f25e160630000000000000000000000000000000000000000000000000000000017905280515f906106629061137a565b6005549091506201d4c0905f8060035460ff166001811115610686576106866118fb565b14610691575f61069c565b61069c848484611434565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631b871c8d8260648b888c8d8a8a8e6040518a63ffffffff1660e01b8152600401610707989796959493929190611abd565b60206040518083038185885af1158015610723573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906107489190611b25565b95508673ffffffffffffffffffffffffffffffffffffffff16867f06f76b16d832d9e442e96306c36f3f2a819b64bd28441aa14fef67308a95c7168a60405161079391815260200190565b60405180910390a350505050505b92915050565b6107e460405180608001604052805f81526020015f81526020015f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b5060408051608081018252600454815260055460208201526006549181019190915260075473ffffffffffffffffffffffffffffffffffffffff16606082015290565b5f5473ffffffffffffffffffffffffffffffffffffffff16331480610902575060085473ffffffffffffffffffffffffffffffffffffffff161580159061090257506008546040517f6b14daf800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690636b14daf8906108c39033905f903690600401611b3c565b602060405180830381865afa1580156108de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109029190611ba5565b61096d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b61097984848484611449565b50505050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081205460ff16806109cd575060015474010000000000000000000000000000000000000000900460ff16155b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610a55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610964565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610ad8611106565b60015474010000000000000000000000000000000000000000900460ff166105ca57600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480905f90a1565b610b6b611106565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff161561054b5773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d191015b60405180910390a150565b5f5473ffffffffffffffffffffffffffffffffffffffff16331480610cf5575060085473ffffffffffffffffffffffffffffffffffffffff1615801590610cf557506008546040517f6b14daf800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff90911690636b14daf890610cb69033905f903690600401611b3c565b602060405180830381865afa158015610cd1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf59190611ba5565b610d5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f2061636365737300000000000000000000000000000000000000000000006044820152606401610964565b61054b8161166e565b610d6c611106565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff1661054b5773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49101610c0f565b610e1e611106565b476105e0828261121f565b5f610e69335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061097f92505050565b610ecf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f2061636365737300000000000000000000000000000000000000000000006044820152606401610964565b818403610ede575060016110ed565b60408051600184146024820181905267ffffffffffffffff429081166044808501919091528451808503909101815260649093019093526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fed8378f50000000000000000000000000000000000000000000000000000000090811790915282517f0000000000000000000000000000000000000000000000000000000000000000949193905f90610f929061137a565b600454600554919250905f8060035460ff166001811115610fb557610fb56118fb565b14610fc0575f610fcb565b610fcb848484611434565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631b871c8d827f00000000000000000000000000000000000000000000000000000000000000005f888e8f8a8a8e6040518a63ffffffff1660e01b8152600401611055989796959493929190611abd565b60206040518083038185885af1158015611071573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906110969190611b25565b50604080518f8152602081018f90529081018d9052606081018c90527fdf570e5bda6b7c0c0415ceeafd5f9321908b69023cae41e030a6df91cad90b039060800160405180910390a1600199505050505050505050505b949350505050565b6110fd611106565b61054b816116ec565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146105ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610964565b60085473ffffffffffffffffffffffffffffffffffffffff90811690821681146105e057600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691821790925560405190918316907f6b0ce63879b19fa36f93da30a36f44140d8c3c727b6c75a16165c2017037d2cc905f90a35050565b80471015611289576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610964565b5f8273ffffffffffffffffffffffffffffffffffffffff16826040515f6040518083038185875af1925050503d805f81146112df576040519150601f19603f3d011682016040523d82523d5f602084013e6112e4565b606091505b5050905080611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610964565b505050565b6006546040517fa66b327d0000000000000000000000000000000000000000000000000000000081526004810183905260248101919091525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a66b327d90604401602060405180830381865afa158015611410573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a19190611b25565b5f61143f8284611bf1565b6110ed9085611c08565b5f84116114b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f4d617820676173206973207a65726f00000000000000000000000000000000006044820152606401610964565b5f831161151b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f47617320707269636520626964206973207a65726f00000000000000000000006044820152606401610964565b73ffffffffffffffffffffffffffffffffffffffff81166115bd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4761732070726963652041676772656761746f72206973207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610964565b60408051608081018252858152602080820186905281830185905273ffffffffffffffffffffffffffffffffffffffff84166060909201829052600487905560058690556006859055600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001683179055825187815290810186905290917f35674f8e28e701bef8f072d1034d588998f6966a59806b4299f6749c86b269e3910160405180910390a250505050565b600380548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183818111156116aa576116aa6118fb565b02179055508060018111156116c1576116c16118fb565b6040517fcc19f6868f2a8f851b1b59973487a53f0ac827f88698345b1529ef7c77b22bb5905f90a250565b3373ffffffffffffffffffffffffffffffffffffffff82160361176b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610964565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b73ffffffffffffffffffffffffffffffffffffffff8116811461054b575f80fd5b5f60208284031215611811575f80fd5b81356109cd816117e0565b5f81518084525f5b8181101561184057602081850181015186830182015201611824565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6109cd602083018461181c565b5f80604083850312156118a0575f80fd5b8235915060208301356118b2816117e0565b809150509250929050565b5f805f80608085870312156118d0575f80fd5b84359350602085013592506040850135915060608501356118f0816117e0565b939692955090935050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6020810160028310611961577f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91905290565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80604083850312156119a5575f80fd5b82356119b0816117e0565b9150602083013567ffffffffffffffff808211156119cc575f80fd5b818501915085601f8301126119df575f80fd5b8135818111156119f1576119f1611967565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611a3757611a37611967565b81604052828152886020848701011115611a4f575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215611a80575f80fd5b8135600281106109cd575f80fd5b5f805f8060808587031215611aa1575f80fd5b5050823594602084013594506040840135936060013592509050565b5f61010073ffffffffffffffffffffffffffffffffffffffff808c1684528a602085015289604085015280891660608501528088166080850152508560a08401528460c08401528060e0840152611b168184018561181c565b9b9a5050505050505050505050565b5f60208284031215611b35575f80fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff8416815260406020820152816040820152818360608301375f818301606090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010192915050565b5f60208284031215611bb5575f80fd5b815180151581146109cd575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820281158282048414176107a1576107a1611bc4565b808201808211156107a1576107a1611bc456fea164736f6c6343000818000a", +} + +var ArbitrumValidatorABI = ArbitrumValidatorMetaData.ABI + +var ArbitrumValidatorBin = ArbitrumValidatorMetaData.Bin + +func DeployArbitrumValidator(auth *bind.TransactOpts, backend bind.ContractBackend, crossDomainMessengerAddr common.Address, l2ArbitrumSequencerUptimeFeedAddr common.Address, configACAddr common.Address, maxGas *big.Int, gasPriceBid *big.Int, baseFee *big.Int, gasPriceL1FeedAddr common.Address, _paymentStrategy uint8) (common.Address, *types.Transaction, *ArbitrumValidator, error) { + parsed, err := ArbitrumValidatorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ArbitrumValidatorBin), backend, crossDomainMessengerAddr, l2ArbitrumSequencerUptimeFeedAddr, configACAddr, maxGas, gasPriceBid, baseFee, gasPriceL1FeedAddr, _paymentStrategy) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ArbitrumValidator{address: address, abi: *parsed, ArbitrumValidatorCaller: ArbitrumValidatorCaller{contract: contract}, ArbitrumValidatorTransactor: ArbitrumValidatorTransactor{contract: contract}, ArbitrumValidatorFilterer: ArbitrumValidatorFilterer{contract: contract}}, nil +} + +type ArbitrumValidator struct { + address common.Address + abi abi.ABI + ArbitrumValidatorCaller + ArbitrumValidatorTransactor + ArbitrumValidatorFilterer +} + +type ArbitrumValidatorCaller struct { + contract *bind.BoundContract +} + +type ArbitrumValidatorTransactor struct { + contract *bind.BoundContract +} + +type ArbitrumValidatorFilterer struct { + contract *bind.BoundContract +} + +type ArbitrumValidatorSession struct { + Contract *ArbitrumValidator + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ArbitrumValidatorCallerSession struct { + Contract *ArbitrumValidatorCaller + CallOpts bind.CallOpts +} + +type ArbitrumValidatorTransactorSession struct { + Contract *ArbitrumValidatorTransactor + TransactOpts bind.TransactOpts +} + +type ArbitrumValidatorRaw struct { + Contract *ArbitrumValidator +} + +type ArbitrumValidatorCallerRaw struct { + Contract *ArbitrumValidatorCaller +} + +type ArbitrumValidatorTransactorRaw struct { + Contract *ArbitrumValidatorTransactor +} + +func NewArbitrumValidator(address common.Address, backend bind.ContractBackend) (*ArbitrumValidator, error) { + abi, err := abi.JSON(strings.NewReader(ArbitrumValidatorABI)) + if err != nil { + return nil, err + } + contract, err := bindArbitrumValidator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ArbitrumValidator{address: address, abi: abi, ArbitrumValidatorCaller: ArbitrumValidatorCaller{contract: contract}, ArbitrumValidatorTransactor: ArbitrumValidatorTransactor{contract: contract}, ArbitrumValidatorFilterer: ArbitrumValidatorFilterer{contract: contract}}, nil +} + +func NewArbitrumValidatorCaller(address common.Address, caller bind.ContractCaller) (*ArbitrumValidatorCaller, error) { + contract, err := bindArbitrumValidator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ArbitrumValidatorCaller{contract: contract}, nil +} + +func NewArbitrumValidatorTransactor(address common.Address, transactor bind.ContractTransactor) (*ArbitrumValidatorTransactor, error) { + contract, err := bindArbitrumValidator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ArbitrumValidatorTransactor{contract: contract}, nil +} + +func NewArbitrumValidatorFilterer(address common.Address, filterer bind.ContractFilterer) (*ArbitrumValidatorFilterer, error) { + contract, err := bindArbitrumValidator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ArbitrumValidatorFilterer{contract: contract}, nil +} + +func bindArbitrumValidator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ArbitrumValidatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumValidator.Contract.ArbitrumValidatorCaller.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumValidator *ArbitrumValidatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.ArbitrumValidatorTransactor.contract.Transfer(opts) +} + +func (_ArbitrumValidator *ArbitrumValidatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.ArbitrumValidatorTransactor.contract.Transact(opts, method, params...) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ArbitrumValidator.Contract.contract.Call(opts, result, method, params...) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.contract.Transfer(opts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.contract.Transact(opts, method, params...) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) CROSSDOMAINMESSENGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "CROSS_DOMAIN_MESSENGER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) CROSSDOMAINMESSENGER() (common.Address, error) { + return _ArbitrumValidator.Contract.CROSSDOMAINMESSENGER(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) CROSSDOMAINMESSENGER() (common.Address, error) { + return _ArbitrumValidator.Contract.CROSSDOMAINMESSENGER(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) L2ALIAS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "L2_ALIAS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) L2ALIAS() (common.Address, error) { + return _ArbitrumValidator.Contract.L2ALIAS(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) L2ALIAS() (common.Address, error) { + return _ArbitrumValidator.Contract.L2ALIAS(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) L2SEQSTATUSRECORDER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "L2_SEQ_STATUS_RECORDER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) L2SEQSTATUSRECORDER() (common.Address, error) { + return _ArbitrumValidator.Contract.L2SEQSTATUSRECORDER(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) L2SEQSTATUSRECORDER() (common.Address, error) { + return _ArbitrumValidator.Contract.L2SEQSTATUSRECORDER(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) CheckEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "checkEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) CheckEnabled() (bool, error) { + return _ArbitrumValidator.Contract.CheckEnabled(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) CheckEnabled() (bool, error) { + return _ArbitrumValidator.Contract.CheckEnabled(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) ConfigAC(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "configAC") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) ConfigAC() (common.Address, error) { + return _ArbitrumValidator.Contract.ConfigAC(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) ConfigAC() (common.Address, error) { + return _ArbitrumValidator.Contract.ConfigAC(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) GasConfig(opts *bind.CallOpts) (ArbitrumValidatorGasConfig, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "gasConfig") + + if err != nil { + return *new(ArbitrumValidatorGasConfig), err + } + + out0 := *abi.ConvertType(out[0], new(ArbitrumValidatorGasConfig)).(*ArbitrumValidatorGasConfig) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) GasConfig() (ArbitrumValidatorGasConfig, error) { + return _ArbitrumValidator.Contract.GasConfig(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) GasConfig() (ArbitrumValidatorGasConfig, error) { + return _ArbitrumValidator.Contract.GasConfig(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) HasAccess(opts *bind.CallOpts, _user common.Address, arg1 []byte) (bool, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "hasAccess", _user, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) HasAccess(_user common.Address, arg1 []byte) (bool, error) { + return _ArbitrumValidator.Contract.HasAccess(&_ArbitrumValidator.CallOpts, _user, arg1) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) HasAccess(_user common.Address, arg1 []byte) (bool, error) { + return _ArbitrumValidator.Contract.HasAccess(&_ArbitrumValidator.CallOpts, _user, arg1) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) Owner() (common.Address, error) { + return _ArbitrumValidator.Contract.Owner(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) Owner() (common.Address, error) { + return _ArbitrumValidator.Contract.Owner(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) PaymentStrategy(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "paymentStrategy") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) PaymentStrategy() (uint8, error) { + return _ArbitrumValidator.Contract.PaymentStrategy(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) PaymentStrategy() (uint8, error) { + return _ArbitrumValidator.Contract.PaymentStrategy(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ArbitrumValidator.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) TypeAndVersion() (string, error) { + return _ArbitrumValidator.Contract.TypeAndVersion(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorCallerSession) TypeAndVersion() (string, error) { + return _ArbitrumValidator.Contract.TypeAndVersion(&_ArbitrumValidator.CallOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "acceptOwnership") +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.AcceptOwnership(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.AcceptOwnership(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "addAccess", _user) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.AddAccess(&_ArbitrumValidator.TransactOpts, _user) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.AddAccess(&_ArbitrumValidator.TransactOpts, _user) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "disableAccessCheck") +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) DisableAccessCheck() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.DisableAccessCheck(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) DisableAccessCheck() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.DisableAccessCheck(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "enableAccessCheck") +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) EnableAccessCheck() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.EnableAccessCheck(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) EnableAccessCheck() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.EnableAccessCheck(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "removeAccess", _user) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.RemoveAccess(&_ArbitrumValidator.TransactOpts, _user) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.RemoveAccess(&_ArbitrumValidator.TransactOpts, _user) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) SetConfigAC(opts *bind.TransactOpts, accessController common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "setConfigAC", accessController) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) SetConfigAC(accessController common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.SetConfigAC(&_ArbitrumValidator.TransactOpts, accessController) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) SetConfigAC(accessController common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.SetConfigAC(&_ArbitrumValidator.TransactOpts, accessController) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) SetGasConfig(opts *bind.TransactOpts, maxGas *big.Int, gasPriceBid *big.Int, baseFee *big.Int, gasPriceL1FeedAddr common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "setGasConfig", maxGas, gasPriceBid, baseFee, gasPriceL1FeedAddr) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) SetGasConfig(maxGas *big.Int, gasPriceBid *big.Int, baseFee *big.Int, gasPriceL1FeedAddr common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.SetGasConfig(&_ArbitrumValidator.TransactOpts, maxGas, gasPriceBid, baseFee, gasPriceL1FeedAddr) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) SetGasConfig(maxGas *big.Int, gasPriceBid *big.Int, baseFee *big.Int, gasPriceL1FeedAddr common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.SetGasConfig(&_ArbitrumValidator.TransactOpts, maxGas, gasPriceBid, baseFee, gasPriceL1FeedAddr) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) SetPaymentStrategy(opts *bind.TransactOpts, _paymentStrategy uint8) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "setPaymentStrategy", _paymentStrategy) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) SetPaymentStrategy(_paymentStrategy uint8) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.SetPaymentStrategy(&_ArbitrumValidator.TransactOpts, _paymentStrategy) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) SetPaymentStrategy(_paymentStrategy uint8) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.SetPaymentStrategy(&_ArbitrumValidator.TransactOpts, _paymentStrategy) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "transferOwnership", to) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.TransferOwnership(&_ArbitrumValidator.TransactOpts, to) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.TransferOwnership(&_ArbitrumValidator.TransactOpts, to) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) Validate(opts *bind.TransactOpts, previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "validate", previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) Validate(previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.Validate(&_ArbitrumValidator.TransactOpts, previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) Validate(previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.Validate(&_ArbitrumValidator.TransactOpts, previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) WithdrawFunds(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "withdrawFunds") +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) WithdrawFunds() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.WithdrawFunds(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) WithdrawFunds() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.WithdrawFunds(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) WithdrawFundsFromL2(opts *bind.TransactOpts, amount *big.Int, refundAddr common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "withdrawFundsFromL2", amount, refundAddr) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) WithdrawFundsFromL2(amount *big.Int, refundAddr common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.WithdrawFundsFromL2(&_ArbitrumValidator.TransactOpts, amount, refundAddr) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) WithdrawFundsFromL2(amount *big.Int, refundAddr common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.WithdrawFundsFromL2(&_ArbitrumValidator.TransactOpts, amount, refundAddr) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) WithdrawFundsTo(opts *bind.TransactOpts, recipient common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.contract.Transact(opts, "withdrawFundsTo", recipient) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) WithdrawFundsTo(recipient common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.WithdrawFundsTo(&_ArbitrumValidator.TransactOpts, recipient) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) WithdrawFundsTo(recipient common.Address) (*types.Transaction, error) { + return _ArbitrumValidator.Contract.WithdrawFundsTo(&_ArbitrumValidator.TransactOpts, recipient) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ArbitrumValidator.contract.RawTransact(opts, nil) +} + +func (_ArbitrumValidator *ArbitrumValidatorSession) Receive() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.Receive(&_ArbitrumValidator.TransactOpts) +} + +func (_ArbitrumValidator *ArbitrumValidatorTransactorSession) Receive() (*types.Transaction, error) { + return _ArbitrumValidator.Contract.Receive(&_ArbitrumValidator.TransactOpts) +} + +type ArbitrumValidatorAddedAccessIterator struct { + Event *ArbitrumValidatorAddedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorAddedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorAddedAccessIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorAddedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorAddedAccess struct { + User common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterAddedAccess(opts *bind.FilterOpts) (*ArbitrumValidatorAddedAccessIterator, error) { + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return &ArbitrumValidatorAddedAccessIterator{contract: _ArbitrumValidator.contract, event: "AddedAccess", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorAddedAccess) (event.Subscription, error) { + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorAddedAccess) + if err := _ArbitrumValidator.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseAddedAccess(log types.Log) (*ArbitrumValidatorAddedAccess, error) { + event := new(ArbitrumValidatorAddedAccess) + if err := _ArbitrumValidator.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorCheckAccessDisabledIterator struct { + Event *ArbitrumValidatorCheckAccessDisabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorCheckAccessDisabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorCheckAccessDisabledIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorCheckAccessDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorCheckAccessDisabled struct { + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ArbitrumValidatorCheckAccessDisabledIterator, error) { + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return &ArbitrumValidatorCheckAccessDisabledIterator{contract: _ArbitrumValidator.contract, event: "CheckAccessDisabled", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorCheckAccessDisabled) (event.Subscription, error) { + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorCheckAccessDisabled) + if err := _ArbitrumValidator.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseCheckAccessDisabled(log types.Log) (*ArbitrumValidatorCheckAccessDisabled, error) { + event := new(ArbitrumValidatorCheckAccessDisabled) + if err := _ArbitrumValidator.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorCheckAccessEnabledIterator struct { + Event *ArbitrumValidatorCheckAccessEnabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorCheckAccessEnabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorCheckAccessEnabledIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorCheckAccessEnabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorCheckAccessEnabled struct { + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ArbitrumValidatorCheckAccessEnabledIterator, error) { + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return &ArbitrumValidatorCheckAccessEnabledIterator{contract: _ArbitrumValidator.contract, event: "CheckAccessEnabled", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorCheckAccessEnabled) (event.Subscription, error) { + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorCheckAccessEnabled) + if err := _ArbitrumValidator.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseCheckAccessEnabled(log types.Log) (*ArbitrumValidatorCheckAccessEnabled, error) { + event := new(ArbitrumValidatorCheckAccessEnabled) + if err := _ArbitrumValidator.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorConfigACSetIterator struct { + Event *ArbitrumValidatorConfigACSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorConfigACSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorConfigACSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorConfigACSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorConfigACSetIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorConfigACSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorConfigACSet struct { + Previous common.Address + Current common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterConfigACSet(opts *bind.FilterOpts, previous []common.Address, current []common.Address) (*ArbitrumValidatorConfigACSetIterator, error) { + + var previousRule []interface{} + for _, previousItem := range previous { + previousRule = append(previousRule, previousItem) + } + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "ConfigACSet", previousRule, currentRule) + if err != nil { + return nil, err + } + return &ArbitrumValidatorConfigACSetIterator{contract: _ArbitrumValidator.contract, event: "ConfigACSet", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchConfigACSet(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorConfigACSet, previous []common.Address, current []common.Address) (event.Subscription, error) { + + var previousRule []interface{} + for _, previousItem := range previous { + previousRule = append(previousRule, previousItem) + } + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "ConfigACSet", previousRule, currentRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorConfigACSet) + if err := _ArbitrumValidator.contract.UnpackLog(event, "ConfigACSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseConfigACSet(log types.Log) (*ArbitrumValidatorConfigACSet, error) { + event := new(ArbitrumValidatorConfigACSet) + if err := _ArbitrumValidator.contract.UnpackLog(event, "ConfigACSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorGasConfigSetIterator struct { + Event *ArbitrumValidatorGasConfigSet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorGasConfigSetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorGasConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorGasConfigSet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorGasConfigSetIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorGasConfigSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorGasConfigSet struct { + MaxGas *big.Int + GasPriceBid *big.Int + GasPriceL1FeedAddr common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterGasConfigSet(opts *bind.FilterOpts, gasPriceL1FeedAddr []common.Address) (*ArbitrumValidatorGasConfigSetIterator, error) { + + var gasPriceL1FeedAddrRule []interface{} + for _, gasPriceL1FeedAddrItem := range gasPriceL1FeedAddr { + gasPriceL1FeedAddrRule = append(gasPriceL1FeedAddrRule, gasPriceL1FeedAddrItem) + } + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "GasConfigSet", gasPriceL1FeedAddrRule) + if err != nil { + return nil, err + } + return &ArbitrumValidatorGasConfigSetIterator{contract: _ArbitrumValidator.contract, event: "GasConfigSet", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchGasConfigSet(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorGasConfigSet, gasPriceL1FeedAddr []common.Address) (event.Subscription, error) { + + var gasPriceL1FeedAddrRule []interface{} + for _, gasPriceL1FeedAddrItem := range gasPriceL1FeedAddr { + gasPriceL1FeedAddrRule = append(gasPriceL1FeedAddrRule, gasPriceL1FeedAddrItem) + } + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "GasConfigSet", gasPriceL1FeedAddrRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorGasConfigSet) + if err := _ArbitrumValidator.contract.UnpackLog(event, "GasConfigSet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseGasConfigSet(log types.Log) (*ArbitrumValidatorGasConfigSet, error) { + event := new(ArbitrumValidatorGasConfigSet) + if err := _ArbitrumValidator.contract.UnpackLog(event, "GasConfigSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorL2WithdrawalRequestedIterator struct { + Event *ArbitrumValidatorL2WithdrawalRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorL2WithdrawalRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorL2WithdrawalRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorL2WithdrawalRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorL2WithdrawalRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorL2WithdrawalRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorL2WithdrawalRequested struct { + Id *big.Int + Amount *big.Int + RefundAddr common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterL2WithdrawalRequested(opts *bind.FilterOpts, id []*big.Int, refundAddr []common.Address) (*ArbitrumValidatorL2WithdrawalRequestedIterator, error) { + + var idRule []interface{} + for _, idItem := range id { + idRule = append(idRule, idItem) + } + + var refundAddrRule []interface{} + for _, refundAddrItem := range refundAddr { + refundAddrRule = append(refundAddrRule, refundAddrItem) + } + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "L2WithdrawalRequested", idRule, refundAddrRule) + if err != nil { + return nil, err + } + return &ArbitrumValidatorL2WithdrawalRequestedIterator{contract: _ArbitrumValidator.contract, event: "L2WithdrawalRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchL2WithdrawalRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorL2WithdrawalRequested, id []*big.Int, refundAddr []common.Address) (event.Subscription, error) { + + var idRule []interface{} + for _, idItem := range id { + idRule = append(idRule, idItem) + } + + var refundAddrRule []interface{} + for _, refundAddrItem := range refundAddr { + refundAddrRule = append(refundAddrRule, refundAddrItem) + } + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "L2WithdrawalRequested", idRule, refundAddrRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorL2WithdrawalRequested) + if err := _ArbitrumValidator.contract.UnpackLog(event, "L2WithdrawalRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseL2WithdrawalRequested(log types.Log) (*ArbitrumValidatorL2WithdrawalRequested, error) { + event := new(ArbitrumValidatorL2WithdrawalRequested) + if err := _ArbitrumValidator.contract.UnpackLog(event, "L2WithdrawalRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorOwnershipTransferRequestedIterator struct { + Event *ArbitrumValidatorOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumValidatorOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumValidatorOwnershipTransferRequestedIterator{contract: _ArbitrumValidator.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorOwnershipTransferRequested) + if err := _ArbitrumValidator.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseOwnershipTransferRequested(log types.Log) (*ArbitrumValidatorOwnershipTransferRequested, error) { + event := new(ArbitrumValidatorOwnershipTransferRequested) + if err := _ArbitrumValidator.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorOwnershipTransferredIterator struct { + Event *ArbitrumValidatorOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumValidatorOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ArbitrumValidatorOwnershipTransferredIterator{contract: _ArbitrumValidator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorOwnershipTransferred) + if err := _ArbitrumValidator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseOwnershipTransferred(log types.Log) (*ArbitrumValidatorOwnershipTransferred, error) { + event := new(ArbitrumValidatorOwnershipTransferred) + if err := _ArbitrumValidator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorPaymentStrategySetIterator struct { + Event *ArbitrumValidatorPaymentStrategySet + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorPaymentStrategySetIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorPaymentStrategySet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorPaymentStrategySet) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorPaymentStrategySetIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorPaymentStrategySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorPaymentStrategySet struct { + PaymentStrategy uint8 + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterPaymentStrategySet(opts *bind.FilterOpts, paymentStrategy []uint8) (*ArbitrumValidatorPaymentStrategySetIterator, error) { + + var paymentStrategyRule []interface{} + for _, paymentStrategyItem := range paymentStrategy { + paymentStrategyRule = append(paymentStrategyRule, paymentStrategyItem) + } + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "PaymentStrategySet", paymentStrategyRule) + if err != nil { + return nil, err + } + return &ArbitrumValidatorPaymentStrategySetIterator{contract: _ArbitrumValidator.contract, event: "PaymentStrategySet", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchPaymentStrategySet(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorPaymentStrategySet, paymentStrategy []uint8) (event.Subscription, error) { + + var paymentStrategyRule []interface{} + for _, paymentStrategyItem := range paymentStrategy { + paymentStrategyRule = append(paymentStrategyRule, paymentStrategyItem) + } + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "PaymentStrategySet", paymentStrategyRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorPaymentStrategySet) + if err := _ArbitrumValidator.contract.UnpackLog(event, "PaymentStrategySet", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParsePaymentStrategySet(log types.Log) (*ArbitrumValidatorPaymentStrategySet, error) { + event := new(ArbitrumValidatorPaymentStrategySet) + if err := _ArbitrumValidator.contract.UnpackLog(event, "PaymentStrategySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorRemovedAccessIterator struct { + Event *ArbitrumValidatorRemovedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorRemovedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorRemovedAccessIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorRemovedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorRemovedAccess struct { + User common.Address + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterRemovedAccess(opts *bind.FilterOpts) (*ArbitrumValidatorRemovedAccessIterator, error) { + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return &ArbitrumValidatorRemovedAccessIterator{contract: _ArbitrumValidator.contract, event: "RemovedAccess", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorRemovedAccess) (event.Subscription, error) { + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorRemovedAccess) + if err := _ArbitrumValidator.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseRemovedAccess(log types.Log) (*ArbitrumValidatorRemovedAccess, error) { + event := new(ArbitrumValidatorRemovedAccess) + if err := _ArbitrumValidator.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ArbitrumValidatorValidatedStatusIterator struct { + Event *ArbitrumValidatorValidatedStatus + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ArbitrumValidatorValidatedStatusIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorValidatedStatus) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ArbitrumValidatorValidatedStatus) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ArbitrumValidatorValidatedStatusIterator) Error() error { + return it.fail +} + +func (it *ArbitrumValidatorValidatedStatusIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ArbitrumValidatorValidatedStatus struct { + PreviousRoundId *big.Int + PreviousAnswer *big.Int + CurrentRoundId *big.Int + CurrentAnswer *big.Int + Raw types.Log +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) FilterValidatedStatus(opts *bind.FilterOpts) (*ArbitrumValidatorValidatedStatusIterator, error) { + + logs, sub, err := _ArbitrumValidator.contract.FilterLogs(opts, "ValidatedStatus") + if err != nil { + return nil, err + } + return &ArbitrumValidatorValidatedStatusIterator{contract: _ArbitrumValidator.contract, event: "ValidatedStatus", logs: logs, sub: sub}, nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) WatchValidatedStatus(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorValidatedStatus) (event.Subscription, error) { + + logs, sub, err := _ArbitrumValidator.contract.WatchLogs(opts, "ValidatedStatus") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ArbitrumValidatorValidatedStatus) + if err := _ArbitrumValidator.contract.UnpackLog(event, "ValidatedStatus", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ArbitrumValidator *ArbitrumValidatorFilterer) ParseValidatedStatus(log types.Log) (*ArbitrumValidatorValidatedStatus, error) { + event := new(ArbitrumValidatorValidatedStatus) + if err := _ArbitrumValidator.contract.UnpackLog(event, "ValidatedStatus", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (ArbitrumValidatorAddedAccess) Topic() common.Hash { + return common.HexToHash("0x87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db4") +} + +func (ArbitrumValidatorCheckAccessDisabled) Topic() common.Hash { + return common.HexToHash("0x3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638") +} + +func (ArbitrumValidatorCheckAccessEnabled) Topic() common.Hash { + return common.HexToHash("0xaebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480") +} + +func (ArbitrumValidatorConfigACSet) Topic() common.Hash { + return common.HexToHash("0x6b0ce63879b19fa36f93da30a36f44140d8c3c727b6c75a16165c2017037d2cc") +} + +func (ArbitrumValidatorGasConfigSet) Topic() common.Hash { + return common.HexToHash("0x35674f8e28e701bef8f072d1034d588998f6966a59806b4299f6749c86b269e3") +} + +func (ArbitrumValidatorL2WithdrawalRequested) Topic() common.Hash { + return common.HexToHash("0x06f76b16d832d9e442e96306c36f3f2a819b64bd28441aa14fef67308a95c716") +} + +func (ArbitrumValidatorOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ArbitrumValidatorOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (ArbitrumValidatorPaymentStrategySet) Topic() common.Hash { + return common.HexToHash("0xcc19f6868f2a8f851b1b59973487a53f0ac827f88698345b1529ef7c77b22bb5") +} + +func (ArbitrumValidatorRemovedAccess) Topic() common.Hash { + return common.HexToHash("0x3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d1") +} + +func (ArbitrumValidatorValidatedStatus) Topic() common.Hash { + return common.HexToHash("0xdf570e5bda6b7c0c0415ceeafd5f9321908b69023cae41e030a6df91cad90b03") +} + +func (_ArbitrumValidator *ArbitrumValidator) Address() common.Address { + return _ArbitrumValidator.address +} + +type ArbitrumValidatorInterface interface { + CROSSDOMAINMESSENGER(opts *bind.CallOpts) (common.Address, error) + + L2ALIAS(opts *bind.CallOpts) (common.Address, error) + + L2SEQSTATUSRECORDER(opts *bind.CallOpts) (common.Address, error) + + CheckEnabled(opts *bind.CallOpts) (bool, error) + + ConfigAC(opts *bind.CallOpts) (common.Address, error) + + GasConfig(opts *bind.CallOpts) (ArbitrumValidatorGasConfig, error) + + HasAccess(opts *bind.CallOpts, _user common.Address, arg1 []byte) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + PaymentStrategy(opts *bind.CallOpts) (uint8, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + SetConfigAC(opts *bind.TransactOpts, accessController common.Address) (*types.Transaction, error) + + SetGasConfig(opts *bind.TransactOpts, maxGas *big.Int, gasPriceBid *big.Int, baseFee *big.Int, gasPriceL1FeedAddr common.Address) (*types.Transaction, error) + + SetPaymentStrategy(opts *bind.TransactOpts, _paymentStrategy uint8) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + Validate(opts *bind.TransactOpts, previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) + + WithdrawFunds(opts *bind.TransactOpts) (*types.Transaction, error) + + WithdrawFundsFromL2(opts *bind.TransactOpts, amount *big.Int, refundAddr common.Address) (*types.Transaction, error) + + WithdrawFundsTo(opts *bind.TransactOpts, recipient common.Address) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterAddedAccess(opts *bind.FilterOpts) (*ArbitrumValidatorAddedAccessIterator, error) + + WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorAddedAccess) (event.Subscription, error) + + ParseAddedAccess(log types.Log) (*ArbitrumValidatorAddedAccess, error) + + FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ArbitrumValidatorCheckAccessDisabledIterator, error) + + WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorCheckAccessDisabled) (event.Subscription, error) + + ParseCheckAccessDisabled(log types.Log) (*ArbitrumValidatorCheckAccessDisabled, error) + + FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ArbitrumValidatorCheckAccessEnabledIterator, error) + + WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorCheckAccessEnabled) (event.Subscription, error) + + ParseCheckAccessEnabled(log types.Log) (*ArbitrumValidatorCheckAccessEnabled, error) + + FilterConfigACSet(opts *bind.FilterOpts, previous []common.Address, current []common.Address) (*ArbitrumValidatorConfigACSetIterator, error) + + WatchConfigACSet(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorConfigACSet, previous []common.Address, current []common.Address) (event.Subscription, error) + + ParseConfigACSet(log types.Log) (*ArbitrumValidatorConfigACSet, error) + + FilterGasConfigSet(opts *bind.FilterOpts, gasPriceL1FeedAddr []common.Address) (*ArbitrumValidatorGasConfigSetIterator, error) + + WatchGasConfigSet(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorGasConfigSet, gasPriceL1FeedAddr []common.Address) (event.Subscription, error) + + ParseGasConfigSet(log types.Log) (*ArbitrumValidatorGasConfigSet, error) + + FilterL2WithdrawalRequested(opts *bind.FilterOpts, id []*big.Int, refundAddr []common.Address) (*ArbitrumValidatorL2WithdrawalRequestedIterator, error) + + WatchL2WithdrawalRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorL2WithdrawalRequested, id []*big.Int, refundAddr []common.Address) (event.Subscription, error) + + ParseL2WithdrawalRequested(log types.Log) (*ArbitrumValidatorL2WithdrawalRequested, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumValidatorOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ArbitrumValidatorOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ArbitrumValidatorOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ArbitrumValidatorOwnershipTransferred, error) + + FilterPaymentStrategySet(opts *bind.FilterOpts, paymentStrategy []uint8) (*ArbitrumValidatorPaymentStrategySetIterator, error) + + WatchPaymentStrategySet(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorPaymentStrategySet, paymentStrategy []uint8) (event.Subscription, error) + + ParsePaymentStrategySet(log types.Log) (*ArbitrumValidatorPaymentStrategySet, error) + + FilterRemovedAccess(opts *bind.FilterOpts) (*ArbitrumValidatorRemovedAccessIterator, error) + + WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorRemovedAccess) (event.Subscription, error) + + ParseRemovedAccess(log types.Log) (*ArbitrumValidatorRemovedAccess, error) + + FilterValidatedStatus(opts *bind.FilterOpts) (*ArbitrumValidatorValidatedStatusIterator, error) + + WatchValidatedStatus(opts *bind.WatchOpts, sink chan<- *ArbitrumValidatorValidatedStatus) (event.Subscription, error) + + ParseValidatedStatus(log types.Log) (*ArbitrumValidatorValidatedStatus, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/v1_0_0/arbitrum_validator/arbitrum_validator_metadata.go b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_validator/arbitrum_validator_metadata.go new file mode 100644 index 0000000000..f6f0d98fac --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/arbitrum_validator/arbitrum_validator_metadata.go @@ -0,0 +1,7 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + + +package arbitrum_validator + +var SolidityStandardInput = "{\"version\":\"v0.8.24+commit.e11b9ed9\",\"language\":\"Solidity\",\"settings\":{\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":true,\"bytecodeHash\":\"none\",\"useLiteralContent\":false},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"outputSelection\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/arbitrum/ArbitrumValidator.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/base/BaseValidator.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/IArbitrumDelayedInbox.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/ISequencerUptimeFeed.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/SimpleWriteAccessController.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AccessControllerInterface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AggregatorValidatorInterface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/vendor/@arbitrum/nitro-contracts/src/precompiles/ArbSys.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/bridge/interfaces/IBridge.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/bridge/interfaces/IInbox.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/bridge/interfaces/IMessageProvider.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]}},\"remappings\":[\"forge-std/=src/v0.8/vendor/forge-std/src/\",\"@openzeppelin/contracts@4.7.3/=node_modules/@openzeppelin/contracts-4.7.3/\",\"@openzeppelin/contracts@4.8.3/=node_modules/@openzeppelin/contracts-4.8.3/\",\"@openzeppelin/contracts@4.9.6/=node_modules/@openzeppelin/contracts-4.9.6/\",\"@openzeppelin/contracts@5.0.2/=node_modules/@openzeppelin/contracts-5.0.2/\",\"@openzeppelin/contracts@5.1.0/=node_modules/@openzeppelin/contracts-5.1.0/\",\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@arbitrum/=node_modules/@arbitrum/\",\"hardhat/=node_modules/hardhat/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@zksync/=node_modules/@zksync/\"],\"viaIR\":false},\"sources\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length \\u003e 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance \\u003e= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance \\u003e= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length \\u003e 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"},\"src/v0.8/l2ep/arbitrum/ArbitrumValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport {SimpleWriteAccessController} from \\\"../../shared/access/SimpleWriteAccessController.sol\\\";\\nimport {AccessControllerInterface} from \\\"../../shared/interfaces/AccessControllerInterface.sol\\\";\\nimport {AggregatorValidatorInterface} from \\\"../../shared/interfaces/AggregatorValidatorInterface.sol\\\";\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\nimport {BaseValidator} from \\\"../base/BaseValidator.sol\\\";\\n\\n/* ./dev dependencies - to be moved from ./dev after audit */\\n\\nimport {ArbSys} from \\\"../../vendor/@arbitrum/nitro-contracts/src/precompiles/ArbSys.sol\\\";\\nimport {AddressAliasHelper} from \\\"../../vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol\\\";\\nimport {IArbitrumDelayedInbox} from \\\"../interfaces/IArbitrumDelayedInbox.sol\\\";\\nimport {ISequencerUptimeFeed} from \\\"../interfaces/ISequencerUptimeFeed.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts@4.7.3/utils/Address.sol\\\";\\n\\n/**\\n * @title ArbitrumValidator - makes xDomain L2 Flags contract call (using L2 xDomain Forwarder contract)\\n * @notice Allows to raise and lower Flags on the Arbitrum L2 network through L1 bridge\\n * - The internal AccessController controls the access of the validate method\\n * - Gas configuration is controlled by a configurable external SimpleWriteAccessController\\n * - Funds on the contract are managed by the owner\\n */\\ncontract ArbitrumValidator is ITypeAndVersion, AggregatorValidatorInterface, SimpleWriteAccessController {\\n enum PaymentStrategy {\\n L1,\\n L2\\n }\\n // Config for L1 -\\u003e L2 Arbitrum retryable ticket message\\n\\n struct GasConfig {\\n uint256 maxGas;\\n uint256 gasPriceBid;\\n uint256 baseFee; // Will use block.baseFee if set to 0\\n address gasPriceL1FeedAddr;\\n }\\n\\n /// @dev Precompiled contract that exists in every Arbitrum chain at address(100). Exposes a variety of system-level\\n /// functionality.\\n address internal constant ARBSYS_ADDR = address(0x0000000000000000000000000000000000000064);\\n\\n int256 private constant ANSWER_SEQ_OFFLINE = 1;\\n\\n /// @notice The address of Arbitrum's DelayedInbox\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n address public immutable CROSS_DOMAIN_MESSENGER;\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n address public immutable L2_SEQ_STATUS_RECORDER;\\n // L2 xDomain alias address of this contract\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n address public immutable L2_ALIAS = AddressAliasHelper.applyL1ToL2Alias(address(this));\\n\\n PaymentStrategy private s_paymentStrategy;\\n GasConfig private s_gasConfig;\\n AccessControllerInterface private s_configAC;\\n\\n /**\\n * @notice emitted when a new payment strategy is set\\n * @param paymentStrategy strategy describing how the contract pays for xDomain calls\\n */\\n event PaymentStrategySet(PaymentStrategy indexed paymentStrategy);\\n\\n /**\\n * @notice emitted when a new gas configuration is set\\n * @param maxGas gas limit for immediate L2 execution attempt.\\n * @param gasPriceBid maximum L2 gas price to pay\\n * @param gasPriceL1FeedAddr address of the L1 gas price feed (used to approximate Arbitrum retryable ticket\\n * submission cost)\\n */\\n event GasConfigSet(uint256 maxGas, uint256 gasPriceBid, address indexed gasPriceL1FeedAddr);\\n\\n /**\\n * @notice emitted when a new gas access-control contract is set\\n * @param previous the address prior to the current setting\\n * @param current the address of the new access-control contract\\n */\\n event ConfigACSet(address indexed previous, address indexed current);\\n\\n /**\\n * @notice emitted when a new ETH withdrawal from L2 was requested\\n * @param id unique id of the published retryable transaction (keccak256(requestID, uint(0))\\n * @param amount of funds to withdraw\\n */\\n event L2WithdrawalRequested(uint256 indexed id, uint256 amount, address indexed refundAddr);\\n\\n /**\\n * @param crossDomainMessengerAddr address the xDomain bridge messenger (Arbitrum Inbox L1) contract address\\n * @param l2ArbitrumSequencerUptimeFeedAddr the L2 Flags contract address\\n * @param configACAddr address of the access controller for managing gas price on Arbitrum\\n * @param maxGas gas limit for immediate L2 execution attempt. A value around 1M should be sufficient\\n * @param gasPriceBid maximum L2 gas price to pay\\n * @param gasPriceL1FeedAddr address of the L1 gas price feed (used to approximate Arbitrum retryable ticket\\n * submission cost)\\n * @param _paymentStrategy strategy describing how the contract pays for xDomain calls\\n */\\n constructor(\\n address crossDomainMessengerAddr,\\n address l2ArbitrumSequencerUptimeFeedAddr,\\n address configACAddr,\\n uint256 maxGas,\\n uint256 gasPriceBid,\\n uint256 baseFee,\\n address gasPriceL1FeedAddr,\\n PaymentStrategy _paymentStrategy\\n ) {\\n // solhint-disable-next-line gas-custom-errors\\n require(crossDomainMessengerAddr != address(0), \\\"Invalid xDomain Messenger address\\\");\\n // solhint-disable-next-line gas-custom-errors\\n require(l2ArbitrumSequencerUptimeFeedAddr != address(0), \\\"Invalid ArbitrumSequencerUptimeFeed contract address\\\");\\n CROSS_DOMAIN_MESSENGER = crossDomainMessengerAddr;\\n L2_SEQ_STATUS_RECORDER = l2ArbitrumSequencerUptimeFeedAddr;\\n // Additional L2 payment configuration\\n _setConfigAC(configACAddr);\\n _setGasConfig(maxGas, gasPriceBid, baseFee, gasPriceL1FeedAddr);\\n _setPaymentStrategy(_paymentStrategy);\\n }\\n\\n /**\\n * @notice versions:\\n *\\n * - ArbitrumValidator 0.1.0: initial release\\n * - ArbitrumValidator 0.2.0: critical Arbitrum network update\\n * - xDomain `msg.sender` backwards incompatible change (now an alias address)\\n * - new `withdrawFundsFromL2` fn that withdraws from L2 xDomain alias address\\n * - approximation of `maxSubmissionCost` using a L1 gas price feed\\n * - ArbitrumValidator 1.0.0: change target of L2 sequencer status update\\n * - now calls `updateStatus` on an L2 ArbitrumSequencerUptimeFeed contract instead of\\n * directly calling the Flags contract\\n * - ArbitrumValidator 2.0.0: change how maxSubmissionCost is calculated when sending cross chain messages\\n * - now calls `calculateRetryableSubmissionFee` instead of inlining equation to estimate\\n * the maxSubmissionCost required to send the message to L2\\n * @inheritdoc ITypeAndVersion\\n */\\n function typeAndVersion() external pure virtual override returns (string memory) {\\n return \\\"ArbitrumValidator 2.0.0\\\";\\n }\\n\\n /// @return stored PaymentStrategy\\n function paymentStrategy() external view virtual returns (PaymentStrategy) {\\n return s_paymentStrategy;\\n }\\n\\n /// @return stored GasConfig\\n function gasConfig() external view virtual returns (GasConfig memory) {\\n return s_gasConfig;\\n }\\n\\n /// @return config AccessControllerInterface contract address\\n function configAC() external view virtual returns (address) {\\n return address(s_configAC);\\n }\\n\\n /**\\n * @notice makes this contract payable\\n * @dev receives funds:\\n * - to use them (if configured) to pay for L2 execution on L1\\n * - when withdrawing funds from L2 xDomain alias address (pay for L2 execution on L2)\\n */\\n receive() external payable {}\\n\\n /**\\n * @notice withdraws all funds available in this contract to the msg.sender\\n * @dev only owner can call this\\n */\\n function withdrawFunds() external onlyOwner {\\n address payable recipient = payable(msg.sender);\\n uint256 amount = address(this).balance;\\n Address.sendValue(recipient, amount);\\n }\\n\\n /**\\n * @notice withdraws all funds available in this contract to the address specified\\n * @dev only owner can call this\\n * @param recipient address where to send the funds\\n */\\n function withdrawFundsTo(\\n address payable recipient\\n ) external onlyOwner {\\n uint256 amount = address(this).balance;\\n Address.sendValue(recipient, amount);\\n }\\n\\n /**\\n * @notice withdraws funds from L2 xDomain alias address (representing this L1 contract)\\n * @dev only owner can call this\\n * @param amount of funds to withdraws\\n * @param refundAddr address where gas excess on L2 will be sent\\n * WARNING: `refundAddr` is not aliased! Make sure you can recover the refunded funds on L2.\\n * @return id unique id of the published retryable transaction (keccak256(requestID, uint(0))\\n */\\n function withdrawFundsFromL2(uint256 amount, address refundAddr) external onlyOwner returns (uint256 id) {\\n // Build an xDomain message to trigger the ArbSys precompile, which will create a L2 -\\u003e L1 tx transferring `amount`\\n bytes memory message = abi.encodeWithSelector(ArbSys.withdrawEth.selector, address(this));\\n // Make the xDomain call\\n // NOTICE: We approximate the max submission cost of sending a retryable tx with specific calldata length.\\n uint256 maxSubmissionCost = _approximateMaxSubmissionCost(message.length);\\n uint256 maxGas = 120_000; // static `maxGas` for L2 -\\u003e L1 transfer\\n uint256 gasPriceBid = s_gasConfig.gasPriceBid;\\n uint256 l1PaymentValue =\\n s_paymentStrategy == PaymentStrategy.L1 ? _maxRetryableTicketCost(maxSubmissionCost, maxGas, gasPriceBid) : 0;\\n // NOTICE: In the case of PaymentStrategy.L2 the L2 xDomain alias address needs to be funded, as it will be paying\\n // the fee.\\n id = IArbitrumDelayedInbox(CROSS_DOMAIN_MESSENGER).createRetryableTicketNoRefundAliasRewrite{value: l1PaymentValue}(\\n ARBSYS_ADDR, // target\\n amount, // L2 call value (requested)\\n maxSubmissionCost,\\n refundAddr, // excessFeeRefundAddress\\n refundAddr, // callValueRefundAddress\\n maxGas,\\n gasPriceBid,\\n message\\n );\\n emit L2WithdrawalRequested(id, amount, refundAddr);\\n\\n return id;\\n }\\n\\n /**\\n * @notice sets config AccessControllerInterface contract\\n * @dev only owner can call this\\n * @param accessController new AccessControllerInterface contract address\\n */\\n function setConfigAC(\\n address accessController\\n ) external onlyOwner {\\n _setConfigAC(accessController);\\n }\\n\\n /**\\n * @notice sets Arbitrum gas configuration\\n * @dev access control provided by `configAC`\\n * @param maxGas gas limit for immediate L2 execution attempt. A value around 1M should be sufficient\\n * @param gasPriceBid maximum L2 gas price to pay\\n * @param gasPriceL1FeedAddr address of the L1 gas price feed (used to approximate Arbitrum retryable ticket\\n * submission cost)\\n */\\n function setGasConfig(\\n uint256 maxGas,\\n uint256 gasPriceBid,\\n uint256 baseFee,\\n address gasPriceL1FeedAddr\\n ) external onlyOwnerOrConfigAccess {\\n _setGasConfig(maxGas, gasPriceBid, baseFee, gasPriceL1FeedAddr);\\n }\\n\\n /**\\n * @notice sets the payment strategy\\n * @dev access control provided by `configAC`\\n * @param _paymentStrategy strategy describing how the contract pays for xDomain calls\\n */\\n function setPaymentStrategy(\\n PaymentStrategy _paymentStrategy\\n ) external onlyOwnerOrConfigAccess {\\n _setPaymentStrategy(_paymentStrategy);\\n }\\n\\n /**\\n * @notice validate method sends an xDomain L2 tx to update Flags contract, in case of change from `previousAnswer`.\\n * @dev A retryable ticket is created on the Arbitrum L1 Inbox contract. The tx gas fee can be paid from this\\n * contract providing a value, or if no L1 value is sent with the xDomain message the gas will be paid by\\n * the L2 xDomain alias account (generated from `address(this)`). This method is accessed controlled.\\n * @param previousAnswer previous aggregator answer\\n * @param currentAnswer new aggregator answer - value of 1 considers the service offline.\\n */\\n function validate(\\n uint256 previousRoundId,\\n int256 previousAnswer,\\n uint256 currentRoundId,\\n int256 currentAnswer\\n ) external override checkAccess returns (bool) {\\n // Avoids resending to L2 the same tx on every call\\n if (previousAnswer == currentAnswer) {\\n return true;\\n }\\n\\n // Excess gas on L2 will be sent to the L2 xDomain alias address of this contract\\n address refundAddr = L2_ALIAS;\\n // Encode the ArbitrumSequencerUptimeFeed call\\n bytes4 selector = ISequencerUptimeFeed.updateStatus.selector;\\n bool status = currentAnswer == ANSWER_SEQ_OFFLINE;\\n uint64 timestamp = uint64(block.timestamp);\\n // Encode `status` and `timestamp`\\n bytes memory message = abi.encodeWithSelector(selector, status, timestamp);\\n // Make the xDomain call\\n // NOTICE: We approximate the max submission cost of sending a retryable tx with specific calldata length.\\n uint256 maxSubmissionCost = _approximateMaxSubmissionCost(message.length);\\n uint256 maxGas = s_gasConfig.maxGas;\\n uint256 gasPriceBid = s_gasConfig.gasPriceBid;\\n uint256 l1PaymentValue =\\n s_paymentStrategy == PaymentStrategy.L1 ? _maxRetryableTicketCost(maxSubmissionCost, maxGas, gasPriceBid) : 0;\\n // NOTICE: In the case of PaymentStrategy.L2 the L2 xDomain alias address needs to be funded, as it will be paying\\n // the fee.\\n // We also ignore the returned msg number, that can be queried via the `InboxMessageDelivered` event.\\n IArbitrumDelayedInbox(CROSS_DOMAIN_MESSENGER).createRetryableTicketNoRefundAliasRewrite{value: l1PaymentValue}(\\n L2_SEQ_STATUS_RECORDER, // target\\n 0, // L2 call value\\n maxSubmissionCost,\\n refundAddr, // excessFeeRefundAddress\\n refundAddr, // callValueRefundAddress\\n maxGas,\\n gasPriceBid,\\n message\\n );\\n emit BaseValidator.ValidatedStatus(previousRoundId, previousAnswer, currentRoundId, currentAnswer);\\n // return success\\n return true;\\n }\\n\\n /// @notice internal method that stores the payment strategy\\n function _setPaymentStrategy(\\n PaymentStrategy _paymentStrategy\\n ) internal {\\n s_paymentStrategy = _paymentStrategy;\\n emit PaymentStrategySet(_paymentStrategy);\\n }\\n\\n /// @notice internal method that stores the gas configuration\\n function _setGasConfig(uint256 maxGas, uint256 gasPriceBid, uint256 baseFee, address gasPriceL1FeedAddr) internal {\\n // solhint-disable-next-line gas-custom-errors\\n require(maxGas \\u003e 0, \\\"Max gas is zero\\\");\\n // solhint-disable-next-line gas-custom-errors\\n require(gasPriceBid \\u003e 0, \\\"Gas price bid is zero\\\");\\n // solhint-disable-next-line gas-custom-errors\\n require(gasPriceL1FeedAddr != address(0), \\\"Gas price Aggregator is zero address\\\");\\n s_gasConfig = GasConfig(maxGas, gasPriceBid, baseFee, gasPriceL1FeedAddr);\\n emit GasConfigSet(maxGas, gasPriceBid, gasPriceL1FeedAddr);\\n }\\n\\n /// @notice Internal method that stores the configuration access controller\\n function _setConfigAC(\\n address accessController\\n ) internal {\\n address previousAccessController = address(s_configAC);\\n if (accessController != previousAccessController) {\\n s_configAC = AccessControllerInterface(accessController);\\n emit ConfigACSet(previousAccessController, accessController);\\n }\\n }\\n\\n /**\\n * @notice Internal method that approximates the `maxSubmissionCost`\\n * @dev This function estimates the max submission cost using the formula\\n * implemented in Arbitrum DelayedInbox's calculateRetryableSubmissionFee function\\n * @param calldataSizeInBytes xDomain message size in bytes\\n */\\n function _approximateMaxSubmissionCost(\\n uint256 calldataSizeInBytes\\n ) internal view returns (uint256) {\\n return IArbitrumDelayedInbox(CROSS_DOMAIN_MESSENGER).calculateRetryableSubmissionFee(\\n calldataSizeInBytes, s_gasConfig.baseFee\\n );\\n }\\n\\n /// @notice Internal helper method that calculates the total cost of the xDomain retryable ticket call\\n function _maxRetryableTicketCost(\\n uint256 maxSubmissionCost,\\n uint256 maxGas,\\n uint256 gasPriceBid\\n ) internal pure returns (uint256) {\\n return maxSubmissionCost + maxGas * gasPriceBid;\\n }\\n\\n /// @dev reverts if the caller does not have access to change the configuration\\n modifier onlyOwnerOrConfigAccess() {\\n // solhint-disable-next-line gas-custom-errors\\n require(\\n msg.sender == owner() || (address(s_configAC) != address(0) \\u0026\\u0026 s_configAC.hasAccess(msg.sender, msg.data)),\\n \\\"No access\\\"\\n );\\n _;\\n }\\n}\\n\"},\"src/v0.8/l2ep/base/BaseValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport {AggregatorValidatorInterface} from \\\"../../shared/interfaces/AggregatorValidatorInterface.sol\\\";\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\n\\nimport {SimpleWriteAccessController} from \\\"../../shared/access/SimpleWriteAccessController.sol\\\";\\n\\nabstract contract BaseValidator is SimpleWriteAccessController, AggregatorValidatorInterface, ITypeAndVersion {\\n /// @notice emitted when gas cost to spend on L2 is updated\\n /// @param gasLimit updated gas cost\\n event GasLimitUpdated(uint32 gasLimit);\\n\\n /// @notice emitted when the contract config is updated\\n /// @param l1CrossDomainMessengerAddress address the L1CrossDomainMessenger contract address\\n /// @param l2UptimeFeedAddr the address of the L2 SequencerUptimeFeed contract address\\n /// @param gasLimit the gasLimit to use for sending a message from L1 to L2\\n event ConfigUpdated(address l1CrossDomainMessengerAddress, address l2UptimeFeedAddr, uint32 gasLimit);\\n\\n /// @notice emitted when a validation is executed successfully\\n /// @param previousRoundId previous aggregator OCR round id\\n /// @param previousAnswer previous aggregator answer\\n /// @param currentRoundId current aggregator OCR round id\\n /// @param currentAnswer new aggregator answer - value of 1 considers the service offline.\\n event ValidatedStatus(uint256 previousRoundId, int256 previousAnswer, uint256 currentRoundId, int256 currentAnswer);\\n\\n error L1CrossDomainMessengerAddressZero();\\n error L2UptimeFeedAddrZero();\\n\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n address public immutable L1_CROSS_DOMAIN_MESSENGER_ADDRESS;\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n address public immutable L2_UPTIME_FEED_ADDR;\\n\\n int256 internal constant ANSWER_SEQ_OFFLINE = 1;\\n\\n uint32 internal s_gasLimit;\\n\\n /// @param l1CrossDomainMessengerAddress address the L1CrossDomainMessenger contract address\\n /// @param l2UptimeFeedAddr the address of the L2 SequencerUptimeFeed contract address\\n /// @param gasLimit the gasLimit to use for sending a message from L1 to L2\\n constructor(address l1CrossDomainMessengerAddress, address l2UptimeFeedAddr, uint32 gasLimit) {\\n if (l1CrossDomainMessengerAddress == address(0)) {\\n revert L1CrossDomainMessengerAddressZero();\\n }\\n if (l2UptimeFeedAddr == address(0)) {\\n revert L2UptimeFeedAddrZero();\\n }\\n\\n L1_CROSS_DOMAIN_MESSENGER_ADDRESS = l1CrossDomainMessengerAddress;\\n L2_UPTIME_FEED_ADDR = l2UptimeFeedAddr;\\n s_gasLimit = gasLimit;\\n emit ConfigUpdated(l1CrossDomainMessengerAddress, l2UptimeFeedAddr, gasLimit);\\n }\\n\\n /// @notice fetches the gas cost of sending a cross chain message\\n function getGasLimit() external view returns (uint32) {\\n return s_gasLimit;\\n }\\n\\n /// @notice sets the new gas cost to spend when sending cross chain message\\n /// @param gasLimit the updated gas cost\\n function setGasLimit(\\n uint32 gasLimit\\n ) external onlyOwner {\\n s_gasLimit = gasLimit;\\n emit GasLimitUpdated(gasLimit);\\n }\\n\\n /// @notice makes this contract payable\\n /// @dev receives funds:\\n /// - to use them (if configured) to pay for L2 execution on L1\\n /// - when withdrawing funds from L2 xDomain alias address (pay for L2 execution on L2)\\n receive() external payable {}\\n}\\n\"},\"src/v0.8/l2ep/interfaces/IArbitrumDelayedInbox.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IInbox} from \\\"../../vendor/arb-bridge-eth/v0.8.0-custom/contracts/bridge/interfaces/IInbox.sol\\\";\\n\\n/**\\n * @notice This interface extends Arbitrum's IInbox interface to include\\n * the calculateRetryableSubmissionFee. This new function was added as part\\n * of Arbitrum's Nitro migration but was excluded from the IInbox interface. This setup\\n * works for us as the team has added it as a public function to the IInbox proxy\\n * contract's implementation\\n */\\ninterface IArbitrumDelayedInbox is IInbox {\\n function calculateRetryableSubmissionFee(uint256 dataLength, uint256 baseFee) external view returns (uint256);\\n}\\n\"},\"src/v0.8/l2ep/interfaces/ISequencerUptimeFeed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ISequencerUptimeFeed {\\n function updateStatus(bool status, uint64 timestamp) external;\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(\\n address newOwner\\n ) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(\\n address to\\n ) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(\\n address to\\n ) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/access/SimpleWriteAccessController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {AccessControllerInterface} from \\\"../interfaces/AccessControllerInterface.sol\\\";\\nimport {ConfirmedOwner} from \\\"./ConfirmedOwner.sol\\\";\\n\\n/// @title SimpleWriteAccessController\\n/// @notice Gives access to accounts explicitly added to an access list by the controller's owner.\\n/// @dev does not make any special permissions for externally, see SimpleReadAccessController for that.\\ncontract SimpleWriteAccessController is AccessControllerInterface, ConfirmedOwner {\\n bool public checkEnabled;\\n mapping(address =\\u003e bool) internal s_accessList;\\n\\n event AddedAccess(address user);\\n event RemovedAccess(address user);\\n event CheckAccessEnabled();\\n event CheckAccessDisabled();\\n\\n constructor() ConfirmedOwner(msg.sender) {\\n checkEnabled = true;\\n }\\n\\n /// @notice Returns the access of an address\\n /// @param _user The address to query\\n function hasAccess(address _user, bytes memory) public view virtual override returns (bool) {\\n return s_accessList[_user] || !checkEnabled;\\n }\\n\\n /// @notice Adds an address to the access list\\n /// @param _user The address to add\\n function addAccess(\\n address _user\\n ) external onlyOwner {\\n if (!s_accessList[_user]) {\\n s_accessList[_user] = true;\\n\\n emit AddedAccess(_user);\\n }\\n }\\n\\n /// @notice Removes an address from the access list\\n /// @param _user The address to remove\\n function removeAccess(\\n address _user\\n ) external onlyOwner {\\n if (s_accessList[_user]) {\\n s_accessList[_user] = false;\\n\\n emit RemovedAccess(_user);\\n }\\n }\\n\\n /// @notice makes the access check enforced\\n function enableAccessCheck() external onlyOwner {\\n if (!checkEnabled) {\\n checkEnabled = true;\\n\\n emit CheckAccessEnabled();\\n }\\n }\\n\\n /// @notice makes the access check unenforced\\n function disableAccessCheck() external onlyOwner {\\n if (checkEnabled) {\\n checkEnabled = false;\\n\\n emit CheckAccessDisabled();\\n }\\n }\\n\\n /// @dev reverts if the caller does not have access\\n modifier checkAccess() {\\n // solhint-disable-next-line gas-custom-errors\\n require(hasAccess(msg.sender, msg.data), \\\"No access\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/interfaces/AccessControllerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AccessControllerInterface {\\n function hasAccess(address user, bytes calldata data) external view returns (bool);\\n}\\n\"},\"src/v0.8/shared/interfaces/AggregatorValidatorInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AggregatorValidatorInterface {\\n function validate(\\n uint256 previousRoundId,\\n int256 previousAnswer,\\n uint256 currentRoundId,\\n int256 currentAnswer\\n ) external returns (bool);\\n}\\n\"},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(\\n address recipient\\n ) external;\\n\\n function acceptOwnership() external;\\n}\\n\"},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ITypeAndVersion {\\n function typeAndVersion() external pure returns (string memory);\\n}\\n\"},\"src/v0.8/vendor/@arbitrum/nitro-contracts/src/precompiles/ArbSys.sol\":{\"content\":\"// Copyright 2021-2022, Offchain Labs, Inc.\\n// For license information, see https://github.com/nitro/blob/master/LICENSE\\n// SPDX-License-Identifier: BUSL-1.1\\n\\npragma solidity \\u003e=0.4.21 \\u003c0.9.0;\\n\\n/**\\n * @title System level functionality\\n * @notice For use by contracts to interact with core L2-specific functionality.\\n * Precompiled contract that exists in every Arbitrum chain at address(100), 0x0000000000000000000000000000000000000064.\\n */\\ninterface ArbSys {\\n /**\\n * @notice Get Arbitrum block number (distinct from L1 block number; Arbitrum genesis block has block number 0)\\n * @return block number as int\\n */\\n function arbBlockNumber() external view returns (uint256);\\n\\n /**\\n * @notice Get Arbitrum block hash (reverts unless currentBlockNum-256 \\u003c= arbBlockNum \\u003c currentBlockNum)\\n * @return block hash\\n */\\n function arbBlockHash(uint256 arbBlockNum) external view returns (bytes32);\\n\\n /**\\n * @notice Gets the rollup's unique chain identifier\\n * @return Chain identifier as int\\n */\\n function arbChainID() external view returns (uint256);\\n\\n /**\\n * @notice Get internal version number identifying an ArbOS build\\n * @return version number as int\\n */\\n function arbOSVersion() external view returns (uint256);\\n\\n /**\\n * @notice Returns 0 since Nitro has no concept of storage gas\\n * @return uint 0\\n */\\n function getStorageGasAvailable() external view returns (uint256);\\n\\n /**\\n * @notice (deprecated) check if current call is top level (meaning it was triggered by an EoA or a L1 contract)\\n * @dev this call has been deprecated and may be removed in a future release\\n * @return true if current execution frame is not a call by another L2 contract\\n */\\n function isTopLevelCall() external view returns (bool);\\n\\n /**\\n * @notice map L1 sender contract address to its L2 alias\\n * @param sender sender address\\n * @param unused argument no longer used\\n * @return aliased sender address\\n */\\n function mapL1SenderContractAddressToL2Alias(address sender, address unused)\\n external\\n pure\\n returns (address);\\n\\n /**\\n * @notice check if the caller (of this caller of this) is an aliased L1 contract address\\n * @return true iff the caller's address is an alias for an L1 contract address\\n */\\n function wasMyCallersAddressAliased() external view returns (bool);\\n\\n /**\\n * @notice return the address of the caller (of this caller of this), without applying L1 contract address aliasing\\n * @return address of the caller's caller, without applying L1 contract address aliasing\\n */\\n function myCallersAddressWithoutAliasing() external view returns (address);\\n\\n /**\\n * @notice Send given amount of Eth to dest from sender.\\n * This is a convenience function, which is equivalent to calling sendTxToL1 with empty data.\\n * @param destination recipient address on L1\\n * @return unique identifier for this L2-to-L1 transaction.\\n */\\n function withdrawEth(address destination)\\n external\\n payable\\n returns (uint256);\\n\\n /**\\n * @notice Send a transaction to L1\\n * @dev it is not possible to execute on the L1 any L2-to-L1 transaction which contains data\\n * to a contract address without any code (as enforced by the Bridge contract).\\n * @param destination recipient address on L1\\n * @param data (optional) calldata for L1 contract call\\n * @return a unique identifier for this L2-to-L1 transaction.\\n */\\n function sendTxToL1(address destination, bytes calldata data)\\n external\\n payable\\n returns (uint256);\\n\\n /**\\n * @notice Get send Merkle tree state\\n * @return size number of sends in the history\\n * @return root root hash of the send history\\n * @return partials hashes of partial subtrees in the send history tree\\n */\\n function sendMerkleTreeState()\\n external\\n view\\n returns (\\n uint256 size,\\n bytes32 root,\\n bytes32[] memory partials\\n );\\n\\n /**\\n * @notice creates a send txn from L2 to L1\\n * @param position = (level \\u003c\\u003c 192) + leaf = (0 \\u003c\\u003c 192) + leaf = leaf\\n */\\n event L2ToL1Tx(\\n address caller,\\n address indexed destination,\\n uint256 indexed hash,\\n uint256 indexed position,\\n uint256 arbBlockNum,\\n uint256 ethBlockNum,\\n uint256 timestamp,\\n uint256 callvalue,\\n bytes data\\n );\\n\\n /// @dev DEPRECATED in favour of the new L2ToL1Tx event above after the nitro upgrade\\n event L2ToL1Transaction(\\n address caller,\\n address indexed destination,\\n uint256 indexed uniqueId,\\n uint256 indexed batchNumber,\\n uint256 indexInBatch,\\n uint256 arbBlockNum,\\n uint256 ethBlockNum,\\n uint256 timestamp,\\n uint256 callvalue,\\n bytes data\\n );\\n\\n /**\\n * @notice logs a merkle branch for proof synthesis\\n * @param reserved an index meant only to align the 4th index with L2ToL1Transaction's 4th event\\n * @param hash the merkle hash\\n * @param position = (level \\u003c\\u003c 192) + leaf\\n */\\n event SendMerkleUpdate(\\n uint256 indexed reserved,\\n bytes32 indexed hash,\\n uint256 indexed position\\n );\\n}\\n\"},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/bridge/interfaces/IBridge.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\n\\n/*\\n * Copyright 2021, Offchain Labs, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n// NOTICE: pragma change from original (^0.6.11)\\npragma solidity ^0.8.0;\\n\\ninterface IBridge {\\n event MessageDelivered(\\n uint256 indexed messageIndex,\\n bytes32 indexed beforeInboxAcc,\\n address inbox,\\n uint8 kind,\\n address sender,\\n bytes32 messageDataHash\\n );\\n\\n function deliverMessageToInbox(\\n uint8 kind,\\n address sender,\\n bytes32 messageDataHash\\n ) external payable returns (uint256);\\n\\n function executeCall(\\n address destAddr,\\n uint256 amount,\\n bytes calldata data\\n ) external returns (bool success, bytes memory returnData);\\n\\n // These are only callable by the admin\\n function setInbox(address inbox, bool enabled) external;\\n\\n function setOutbox(address inbox, bool enabled) external;\\n\\n // View functions\\n\\n function activeOutbox() external view returns (address);\\n\\n function allowedInboxes(address inbox) external view returns (bool);\\n\\n function allowedOutboxes(address outbox) external view returns (bool);\\n\\n function inboxAccs(uint256 index) external view returns (bytes32);\\n\\n function messageCount() external view returns (uint256);\\n}\\n\"},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/bridge/interfaces/IInbox.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\n\\n/*\\n * Copyright 2021, Offchain Labs, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n// NOTICE: pragma change from original (^0.6.11)\\npragma solidity ^0.8.0;\\n\\nimport \\\"./IBridge.sol\\\";\\nimport \\\"./IMessageProvider.sol\\\";\\n\\ninterface IInbox is IMessageProvider {\\n function sendL2Message(bytes calldata messageData) external returns (uint256);\\n\\n function sendUnsignedTransaction(\\n uint256 maxGas,\\n uint256 gasPriceBid,\\n uint256 nonce,\\n address destAddr,\\n uint256 amount,\\n bytes calldata data\\n ) external returns (uint256);\\n\\n function sendContractTransaction(\\n uint256 maxGas,\\n uint256 gasPriceBid,\\n address destAddr,\\n uint256 amount,\\n bytes calldata data\\n ) external returns (uint256);\\n\\n function sendL1FundedUnsignedTransaction(\\n uint256 maxGas,\\n uint256 gasPriceBid,\\n uint256 nonce,\\n address destAddr,\\n bytes calldata data\\n ) external payable returns (uint256);\\n\\n function sendL1FundedContractTransaction(\\n uint256 maxGas,\\n uint256 gasPriceBid,\\n address destAddr,\\n bytes calldata data\\n ) external payable returns (uint256);\\n\\n function createRetryableTicketNoRefundAliasRewrite(\\n address destAddr,\\n uint256 arbTxCallValue,\\n uint256 maxSubmissionCost,\\n address submissionRefundAddress,\\n address valueRefundAddress,\\n uint256 maxGas,\\n uint256 gasPriceBid,\\n bytes calldata data\\n ) external payable returns (uint256);\\n\\n function createRetryableTicket(\\n address destAddr,\\n uint256 arbTxCallValue,\\n uint256 maxSubmissionCost,\\n address submissionRefundAddress,\\n address valueRefundAddress,\\n uint256 maxGas,\\n uint256 gasPriceBid,\\n bytes calldata data\\n ) external payable returns (uint256);\\n\\n function depositEth(address destAddr) external payable returns (uint256);\\n\\n function depositEthRetryable(\\n address destAddr,\\n uint256 maxSubmissionCost,\\n uint256 maxGas,\\n uint256 maxGasPrice\\n ) external payable returns (uint256);\\n\\n function bridge() external view returns (IBridge);\\n}\\n\"},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/bridge/interfaces/IMessageProvider.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\n\\n/*\\n * Copyright 2021, Offchain Labs, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n// NOTICE: pragma change from original (^0.6.11)\\npragma solidity ^0.8.0;\\n\\ninterface IMessageProvider {\\n event InboxMessageDelivered(uint256 indexed messageNum, bytes data);\\n\\n event InboxMessageDeliveredFromOrigin(uint256 indexed messageNum);\\n}\\n\"},\"src/v0.8/vendor/arb-bridge-eth/v0.8.0-custom/contracts/libraries/AddressAliasHelper.sol\":{\"content\":\"// SPDX-License-Identifier: Apache-2.0\\n\\n/*\\n * Copyright 2019-2021, Offchain Labs, Inc.\\n *\\n * Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n * you may not use this file except in compliance with the License.\\n * You may obtain a copy of the License at\\n *\\n * http://www.apache.org/licenses/LICENSE-2.0\\n *\\n * Unless required by applicable law or agreed to in writing, software\\n * distributed under the License is distributed on an \\\"AS IS\\\" BASIS,\\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n * See the License for the specific language governing permissions and\\n * limitations under the License.\\n */\\n\\n// NOTICE: pragma change from original (^0.6.11)\\npragma solidity ^0.8.0;\\n\\nlibrary AddressAliasHelper {\\n uint160 constant offset = uint160(0x1111000000000000000000000000000000001111);\\n\\n /// @notice Utility function that converts the msg.sender viewed in the L2 to the\\n /// address in the L1 that submitted a tx to the inbox\\n /// @param l1Address L2 address as viewed in msg.sender\\n /// @return l2Address the address in the L1 that triggered the tx to L2\\n function applyL1ToL2Alias(address l1Address) internal pure returns (address l2Address) {\\n unchecked {\\n l2Address = address(uint160(l1Address) + offset);\\n }\\n }\\n\\n /// @notice Utility function that converts the msg.sender viewed in the L2 to the\\n /// address in the L1 that submitted a tx to the inbox\\n /// @param l2Address L2 address as viewed in msg.sender\\n /// @return l1Address the address in the L1 that triggered the tx to L2\\n function undoL1ToL2Alias(address l2Address) internal pure returns (address l1Address) {\\n unchecked {\\n l1Address = address(uint160(l2Address) - offset);\\n }\\n }\\n}\\n\"}}}" diff --git a/gethwrappers/l2ep/generated/v1_0_0/optimism_cross_domain_forwarder/optimism_cross_domain_forwarder.go b/gethwrappers/l2ep/generated/v1_0_0/optimism_cross_domain_forwarder/optimism_cross_domain_forwarder.go new file mode 100644 index 0000000000..27f1a09b29 --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/optimism_cross_domain_forwarder/optimism_cross_domain_forwarder.go @@ -0,0 +1,928 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package optimism_cross_domain_forwarder + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var OptimismCrossDomainForwarderMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"crossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"contractiOVM_CrossDomainMessenger\"},{\"name\":\"l1OwnerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptL1Ownership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"crossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forward\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferL1Ownership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"L1OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", + Bin: "0x60a060405234801562000010575f80fd5b50604051620012c2380380620012c2833981016040819052620000339162000264565b8033805f816200008a5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000bc57620000bc8162000146565b505050620000d081620001f060201b60201c565b506001600160a01b038216620001335760405162461bcd60e51b815260206004820152602160248201527f496e76616c69642078446f6d61696e204d657373656e676572206164647265736044820152607360f81b606482015260840162000081565b506001600160a01b0316608052620002a1565b336001600160a01b03821603620001a05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000081565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600280546001600160a01b038381166001600160a01b03198084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b6001600160a01b038116811462000261575f80fd5b50565b5f806040838503121562000276575f80fd5b825162000283816200024c565b602084015190925062000296816200024c565b809150509250929050565b608051610fe5620002dd5f395f818161016a015281816101c6015281816102830152818161050a015281816105c201526106fe0152610fe55ff3fe608060405234801561000f575f80fd5b506004361061009f575f3560e01c806396b8d7c011610072578063d2db637211610058578063d2db637214610137578063f2fde38b14610155578063f43b361314610168575f80fd5b806396b8d7c01461011c578063b2ec07871461012f575f80fd5b8063181f5a77146100a35780636fadcf72146100c157806379ba5097146100d65780638da5cb5b146100de575b5f80fd5b6100ab61018e565b6040516100b89190610deb565b60405180910390f35b6100d46100cf366004610e89565b6101ae565b005b6100d46103f6565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100b8565b6100d461012a366004610f65565b6104f2565b6100d46106fc565b60025473ffffffffffffffffffffffffffffffffffffffff166100f7565b6100d4610163366004610f65565b6108cf565b7f00000000000000000000000000000000000000000000000000000000000000006100f7565b6060604051806060016040528060228152602001610fb760229139905090565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610252576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064015b60405180910390fd5b60025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061030e9190610f80565b73ffffffffffffffffffffffffffffffffffffffff16146103b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f65720000000000000000000000000000000000000000000000000000000000006064820152608401610249565b6103f182826040518060400160405280601781526020017f466f727761726465722063616c6c2072657665727465640000000000000000008152506108e0565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610249565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610591576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e67657200006044820152606401610249565b60025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610629573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061064d9190610f80565b73ffffffffffffffffffffffffffffffffffffffff16146106f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f65720000000000000000000000000000000000000000000000000000000000006064820152608401610249565b6106f9816108f8565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff8116331461079c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e67657200006044820152606401610249565b600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff92831692841691636e296e459160048083019260209291908290030181865afa15801561080c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108309190610f80565b73ffffffffffffffffffffffffffffffffffffffff16146108ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d7573742062652070726f706f736564204c31206f776e6572000000000000006044820152606401610249565b6003546106f99073ffffffffffffffffffffffffffffffffffffffff166109ed565b6108d7610a6e565b6106f981610af0565b60606108ee84845f85610be4565b90505b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff821603610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610249565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907f55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f905f90a350565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610aee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610249565b565b3373ffffffffffffffffffffffffffffffffffffffff821603610b6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610249565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b606082471015610c76576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610249565b73ffffffffffffffffffffffffffffffffffffffff85163b610cf4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610249565b5f808673ffffffffffffffffffffffffffffffffffffffff168587604051610d1c9190610f9b565b5f6040518083038185875af1925050503d805f8114610d56576040519150601f19603f3d011682016040523d82523d5f602084013e610d5b565b606091505b5091509150610d6b828286610d76565b979650505050505050565b60608315610d855750816108f1565b825115610d955782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102499190610deb565b5f5b83811015610de3578181015183820152602001610dcb565b50505f910152565b602081525f8251806020840152610e09816040850160208701610dc9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff811681146106f9575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610e9a575f80fd5b8235610ea581610e3b565b9150602083013567ffffffffffffffff80821115610ec1575f80fd5b818501915085601f830112610ed4575f80fd5b813581811115610ee657610ee6610e5c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610f2c57610f2c610e5c565b81604052828152886020848701011115610f44575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215610f75575f80fd5b81356108f181610e3b565b5f60208284031215610f90575f80fd5b81516108f181610e3b565b5f8251610fac818460208701610dc9565b919091019291505056fe4f7074696d69736d43726f7373446f6d61696e466f7277617264657220312e302e30a164736f6c6343000818000a", +} + +var OptimismCrossDomainForwarderABI = OptimismCrossDomainForwarderMetaData.ABI + +var OptimismCrossDomainForwarderBin = OptimismCrossDomainForwarderMetaData.Bin + +func DeployOptimismCrossDomainForwarder(auth *bind.TransactOpts, backend bind.ContractBackend, crossDomainMessengerAddr common.Address, l1OwnerAddr common.Address) (common.Address, *types.Transaction, *OptimismCrossDomainForwarder, error) { + parsed, err := OptimismCrossDomainForwarderMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OptimismCrossDomainForwarderBin), backend, crossDomainMessengerAddr, l1OwnerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OptimismCrossDomainForwarder{address: address, abi: *parsed, OptimismCrossDomainForwarderCaller: OptimismCrossDomainForwarderCaller{contract: contract}, OptimismCrossDomainForwarderTransactor: OptimismCrossDomainForwarderTransactor{contract: contract}, OptimismCrossDomainForwarderFilterer: OptimismCrossDomainForwarderFilterer{contract: contract}}, nil +} + +type OptimismCrossDomainForwarder struct { + address common.Address + abi abi.ABI + OptimismCrossDomainForwarderCaller + OptimismCrossDomainForwarderTransactor + OptimismCrossDomainForwarderFilterer +} + +type OptimismCrossDomainForwarderCaller struct { + contract *bind.BoundContract +} + +type OptimismCrossDomainForwarderTransactor struct { + contract *bind.BoundContract +} + +type OptimismCrossDomainForwarderFilterer struct { + contract *bind.BoundContract +} + +type OptimismCrossDomainForwarderSession struct { + Contract *OptimismCrossDomainForwarder + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type OptimismCrossDomainForwarderCallerSession struct { + Contract *OptimismCrossDomainForwarderCaller + CallOpts bind.CallOpts +} + +type OptimismCrossDomainForwarderTransactorSession struct { + Contract *OptimismCrossDomainForwarderTransactor + TransactOpts bind.TransactOpts +} + +type OptimismCrossDomainForwarderRaw struct { + Contract *OptimismCrossDomainForwarder +} + +type OptimismCrossDomainForwarderCallerRaw struct { + Contract *OptimismCrossDomainForwarderCaller +} + +type OptimismCrossDomainForwarderTransactorRaw struct { + Contract *OptimismCrossDomainForwarderTransactor +} + +func NewOptimismCrossDomainForwarder(address common.Address, backend bind.ContractBackend) (*OptimismCrossDomainForwarder, error) { + abi, err := abi.JSON(strings.NewReader(OptimismCrossDomainForwarderABI)) + if err != nil { + return nil, err + } + contract, err := bindOptimismCrossDomainForwarder(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarder{address: address, abi: abi, OptimismCrossDomainForwarderCaller: OptimismCrossDomainForwarderCaller{contract: contract}, OptimismCrossDomainForwarderTransactor: OptimismCrossDomainForwarderTransactor{contract: contract}, OptimismCrossDomainForwarderFilterer: OptimismCrossDomainForwarderFilterer{contract: contract}}, nil +} + +func NewOptimismCrossDomainForwarderCaller(address common.Address, caller bind.ContractCaller) (*OptimismCrossDomainForwarderCaller, error) { + contract, err := bindOptimismCrossDomainForwarder(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderCaller{contract: contract}, nil +} + +func NewOptimismCrossDomainForwarderTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismCrossDomainForwarderTransactor, error) { + contract, err := bindOptimismCrossDomainForwarder(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderTransactor{contract: contract}, nil +} + +func NewOptimismCrossDomainForwarderFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismCrossDomainForwarderFilterer, error) { + contract, err := bindOptimismCrossDomainForwarder(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderFilterer{contract: contract}, nil +} + +func bindOptimismCrossDomainForwarder(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := OptimismCrossDomainForwarderMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismCrossDomainForwarder.Contract.OptimismCrossDomainForwarderCaller.contract.Call(opts, result, method, params...) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.OptimismCrossDomainForwarderTransactor.contract.Transfer(opts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.OptimismCrossDomainForwarderTransactor.contract.Transact(opts, method, params...) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismCrossDomainForwarder.Contract.contract.Call(opts, result, method, params...) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.contract.Transfer(opts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.contract.Transact(opts, method, params...) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCaller) CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismCrossDomainForwarder.contract.Call(opts, &out, "crossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) CrossDomainMessenger() (common.Address, error) { + return _OptimismCrossDomainForwarder.Contract.CrossDomainMessenger(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCallerSession) CrossDomainMessenger() (common.Address, error) { + return _OptimismCrossDomainForwarder.Contract.CrossDomainMessenger(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCaller) L1Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismCrossDomainForwarder.contract.Call(opts, &out, "l1Owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) L1Owner() (common.Address, error) { + return _OptimismCrossDomainForwarder.Contract.L1Owner(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCallerSession) L1Owner() (common.Address, error) { + return _OptimismCrossDomainForwarder.Contract.L1Owner(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismCrossDomainForwarder.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) Owner() (common.Address, error) { + return _OptimismCrossDomainForwarder.Contract.Owner(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCallerSession) Owner() (common.Address, error) { + return _OptimismCrossDomainForwarder.Contract.Owner(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismCrossDomainForwarder.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) TypeAndVersion() (string, error) { + return _OptimismCrossDomainForwarder.Contract.TypeAndVersion(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderCallerSession) TypeAndVersion() (string, error) { + return _OptimismCrossDomainForwarder.Contract.TypeAndVersion(&_OptimismCrossDomainForwarder.CallOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactor) AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.contract.Transact(opts, "acceptL1Ownership") +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) AcceptL1Ownership() (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.AcceptL1Ownership(&_OptimismCrossDomainForwarder.TransactOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.AcceptL1Ownership(&_OptimismCrossDomainForwarder.TransactOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.contract.Transact(opts, "acceptOwnership") +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.AcceptOwnership(&_OptimismCrossDomainForwarder.TransactOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.AcceptOwnership(&_OptimismCrossDomainForwarder.TransactOpts) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactor) Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.contract.Transact(opts, "forward", target, data) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.Forward(&_OptimismCrossDomainForwarder.TransactOpts, target, data) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.Forward(&_OptimismCrossDomainForwarder.TransactOpts, target, data) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactor) TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.contract.Transact(opts, "transferL1Ownership", to) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.TransferL1Ownership(&_OptimismCrossDomainForwarder.TransactOpts, to) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.TransferL1Ownership(&_OptimismCrossDomainForwarder.TransactOpts, to) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.contract.Transact(opts, "transferOwnership", to) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.TransferOwnership(&_OptimismCrossDomainForwarder.TransactOpts, to) +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainForwarder.Contract.TransferOwnership(&_OptimismCrossDomainForwarder.TransactOpts, to) +} + +type OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator struct { + Event *OptimismCrossDomainForwarderL1OwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainForwarderL1OwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.FilterLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator{contract: _OptimismCrossDomainForwarder.contract, event: "L1OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.WatchLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainForwarderL1OwnershipTransferRequested) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) ParseL1OwnershipTransferRequested(log types.Log) (*OptimismCrossDomainForwarderL1OwnershipTransferRequested, error) { + event := new(OptimismCrossDomainForwarderL1OwnershipTransferRequested) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismCrossDomainForwarderL1OwnershipTransferredIterator struct { + Event *OptimismCrossDomainForwarderL1OwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainForwarderL1OwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainForwarderL1OwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainForwarderL1OwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainForwarderL1OwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderL1OwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.FilterLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderL1OwnershipTransferredIterator{contract: _OptimismCrossDomainForwarder.contract, event: "L1OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.WatchLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainForwarderL1OwnershipTransferred) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) ParseL1OwnershipTransferred(log types.Log) (*OptimismCrossDomainForwarderL1OwnershipTransferred, error) { + event := new(OptimismCrossDomainForwarderL1OwnershipTransferred) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismCrossDomainForwarderOwnershipTransferRequestedIterator struct { + Event *OptimismCrossDomainForwarderOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainForwarderOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainForwarderOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainForwarderOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainForwarderOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderOwnershipTransferRequestedIterator{contract: _OptimismCrossDomainForwarder.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainForwarderOwnershipTransferRequested) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) ParseOwnershipTransferRequested(log types.Log) (*OptimismCrossDomainForwarderOwnershipTransferRequested, error) { + event := new(OptimismCrossDomainForwarderOwnershipTransferRequested) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismCrossDomainForwarderOwnershipTransferredIterator struct { + Event *OptimismCrossDomainForwarderOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainForwarderOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainForwarderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainForwarderOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainForwarderOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainForwarderOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainForwarderOwnershipTransferredIterator{contract: _OptimismCrossDomainForwarder.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainForwarder.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainForwarderOwnershipTransferred) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarderFilterer) ParseOwnershipTransferred(log types.Log) (*OptimismCrossDomainForwarderOwnershipTransferred, error) { + event := new(OptimismCrossDomainForwarderOwnershipTransferred) + if err := _OptimismCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (OptimismCrossDomainForwarderL1OwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0x55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f") +} + +func (OptimismCrossDomainForwarderL1OwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0xb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272") +} + +func (OptimismCrossDomainForwarderOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (OptimismCrossDomainForwarderOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_OptimismCrossDomainForwarder *OptimismCrossDomainForwarder) Address() common.Address { + return _OptimismCrossDomainForwarder.address +} + +type OptimismCrossDomainForwarderInterface interface { + CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) + + L1Owner(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderL1OwnershipTransferRequestedIterator, error) + + WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferRequested(log types.Log) (*OptimismCrossDomainForwarderL1OwnershipTransferRequested, error) + + FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderL1OwnershipTransferredIterator, error) + + WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferred(log types.Log) (*OptimismCrossDomainForwarderL1OwnershipTransferred, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*OptimismCrossDomainForwarderOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainForwarderOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainForwarderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*OptimismCrossDomainForwarderOwnershipTransferred, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/v1_0_0/optimism_cross_domain_forwarder/optimism_cross_domain_forwarder_metadata.go b/gethwrappers/l2ep/generated/v1_0_0/optimism_cross_domain_forwarder/optimism_cross_domain_forwarder_metadata.go new file mode 100644 index 0000000000..f596af9c9a --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/optimism_cross_domain_forwarder/optimism_cross_domain_forwarder_metadata.go @@ -0,0 +1,7 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + + +package optimism_cross_domain_forwarder + +var SolidityStandardInput = "{\"version\":\"v0.8.24+commit.e11b9ed9\",\"language\":\"Solidity\",\"settings\":{\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":true,\"bytecodeHash\":\"none\",\"useLiteralContent\":false},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"outputSelection\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/CrossDomainForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/CrossDomainOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/ICrossDomainOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/IForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/optimism/OptimismCrossDomainForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/vendor/@eth-optimism/contracts/v0.4.7/contracts/optimistic-ethereum/iOVM/bridge/messaging/iOVM_CrossDomainMessenger.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]}},\"remappings\":[\"forge-std/=src/v0.8/vendor/forge-std/src/\",\"@openzeppelin/contracts@4.7.3/=node_modules/@openzeppelin/contracts-4.7.3/\",\"@openzeppelin/contracts@4.8.3/=node_modules/@openzeppelin/contracts-4.8.3/\",\"@openzeppelin/contracts@4.9.6/=node_modules/@openzeppelin/contracts-4.9.6/\",\"@openzeppelin/contracts@5.0.2/=node_modules/@openzeppelin/contracts-5.0.2/\",\"@openzeppelin/contracts@5.1.0/=node_modules/@openzeppelin/contracts-5.1.0/\",\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@arbitrum/=node_modules/@arbitrum/\",\"hardhat/=node_modules/hardhat/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@zksync/=node_modules/@zksync/\"],\"viaIR\":false},\"sources\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length \\u003e 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance \\u003e= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance \\u003e= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length \\u003e 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"},\"src/v0.8/l2ep/CrossDomainForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {CrossDomainOwnable} from \\\"./CrossDomainOwnable.sol\\\";\\nimport {IForwarder} from \\\"./interfaces/IForwarder.sol\\\";\\n\\n/**\\n * @title CrossDomainForwarder - L1 xDomain account representation\\n * @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n * destination.\\n * @dev Any other L2 contract which uses this contract's address as a privileged position,\\n * can consider that position to be held by the `l1Owner`\\n */\\nabstract contract CrossDomainForwarder is IForwarder, CrossDomainOwnable {}\\n\"},\"src/v0.8/l2ep/CrossDomainOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwner} from \\\"../shared/access/ConfirmedOwner.sol\\\";\\nimport {ICrossDomainOwnable} from \\\"./interfaces/ICrossDomainOwnable.sol\\\";\\n\\n/**\\n * @title The CrossDomainOwnable contract\\n * @notice A contract with helpers for cross-domain contract ownership.\\n */\\ncontract CrossDomainOwnable is ICrossDomainOwnable, ConfirmedOwner {\\n address internal s_l1Owner;\\n address internal s_l1PendingOwner;\\n\\n constructor(\\n address newl1Owner\\n ) ConfirmedOwner(msg.sender) {\\n _setL1Owner(newl1Owner);\\n }\\n\\n /**\\n * @notice transfer ownership of this account to a new L1 owner\\n * @param to new L1 owner that will be allowed to call the forward fn\\n */\\n function transferL1Ownership(\\n address to\\n ) public virtual override onlyL1Owner {\\n _transferL1Ownership(to);\\n }\\n\\n /**\\n * @notice accept ownership of this account to a new L1 owner\\n */\\n function acceptL1Ownership() public virtual override onlyProposedL1Owner {\\n _setL1Owner(s_l1PendingOwner);\\n }\\n\\n /**\\n * @notice Get the current owner\\n */\\n function l1Owner() public view override returns (address) {\\n return s_l1Owner;\\n }\\n\\n /**\\n * @notice validate, transfer ownership, and emit relevant events\\n */\\n function _transferL1Ownership(\\n address to\\n ) internal {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_l1PendingOwner = to;\\n\\n emit L1OwnershipTransferRequested(s_l1Owner, to);\\n }\\n\\n /**\\n * @notice set ownership, emit relevant events. Used in acceptOwnership()\\n */\\n function _setL1Owner(\\n address to\\n ) internal {\\n address oldOwner = s_l1Owner;\\n s_l1Owner = to;\\n s_l1PendingOwner = address(0);\\n\\n emit L1OwnershipTransferred(oldOwner, to);\\n }\\n\\n /**\\n * @notice Reverts if called by anyone other than the L1 owner.\\n */\\n modifier onlyL1Owner() virtual {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_l1Owner, \\\"Only callable by L1 owner\\\");\\n _;\\n }\\n\\n /**\\n * @notice Reverts if called by anyone other than the L1 owner.\\n */\\n modifier onlyProposedL1Owner() virtual {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_l1PendingOwner, \\\"Only callable by proposed L1 owner\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/l2ep/interfaces/ICrossDomainOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title A contract with helpers for cross-domain contract ownership\\ninterface ICrossDomainOwnable {\\n event L1OwnershipTransferRequested(address indexed from, address indexed to);\\n\\n event L1OwnershipTransferred(address indexed from, address indexed to);\\n\\n function l1Owner() external returns (address);\\n\\n function transferL1Ownership(\\n address recipient\\n ) external;\\n\\n function acceptL1Ownership() external;\\n}\\n\"},\"src/v0.8/l2ep/interfaces/IForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title Forwards a call to a target, under some conditions\\ninterface IForwarder {\\n /// @notice forward calls the `target` with `data`\\n /// @param target contract address to be called\\n /// @param data to send to target contract\\n function forward(address target, bytes memory data) external;\\n}\\n\"},\"src/v0.8/l2ep/optimism/OptimismCrossDomainForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\n// solhint-disable-next-line no-unused-import\\nimport {IForwarder} from \\\"../interfaces/IForwarder.sol\\\";\\n\\n/* ./dev dependencies - to be moved from ./dev after audit */\\nimport {CrossDomainForwarder} from \\\"../CrossDomainForwarder.sol\\\";\\nimport {CrossDomainOwnable} from \\\"../CrossDomainOwnable.sol\\\";\\n\\nimport {iOVM_CrossDomainMessenger} from\\n \\\"../../vendor/@eth-optimism/contracts/v0.4.7/contracts/optimistic-ethereum/iOVM/bridge/messaging/iOVM_CrossDomainMessenger.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts@4.7.3/utils/Address.sol\\\";\\n\\n/**\\n * @title OptimismCrossDomainForwarder - L1 xDomain account representation\\n * @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n * destination.\\n * @dev Any other L2 contract which uses this contract's address as a privileged position,\\n * can be considered to be owned by the `l1Owner`\\n */\\ncontract OptimismCrossDomainForwarder is ITypeAndVersion, CrossDomainForwarder {\\n // OVM_L2CrossDomainMessenger is a precompile usually deployed to 0x4200000000000000000000000000000000000007\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n iOVM_CrossDomainMessenger private immutable OVM_CROSS_DOMAIN_MESSENGER;\\n\\n /**\\n * @notice creates a new Optimism xDomain Forwarder contract\\n * @param crossDomainMessengerAddr the xDomain bridge messenger (Optimism bridge L2) contract address\\n * @param l1OwnerAddr the L1 owner address that will be allowed to call the forward fn\\n */\\n constructor(iOVM_CrossDomainMessenger crossDomainMessengerAddr, address l1OwnerAddr) CrossDomainOwnable(l1OwnerAddr) {\\n // solhint-disable-next-line gas-custom-errors\\n require(address(crossDomainMessengerAddr) != address(0), \\\"Invalid xDomain Messenger address\\\");\\n OVM_CROSS_DOMAIN_MESSENGER = crossDomainMessengerAddr;\\n }\\n\\n /**\\n * @notice versions:\\n *\\n * - OptimismCrossDomainForwarder 0.1.0: initial release\\n * - OptimismCrossDomainForwarder 1.0.0: Use OZ Address, CrossDomainOwnable\\n *\\n * @inheritdoc ITypeAndVersion\\n */\\n function typeAndVersion() external pure virtual override returns (string memory) {\\n return \\\"OptimismCrossDomainForwarder 1.0.0\\\";\\n }\\n\\n /**\\n * @dev forwarded only if L2 Messenger calls with `xDomainMessageSender` being the L1 owner address\\n * @inheritdoc IForwarder\\n */\\n function forward(address target, bytes memory data) external virtual override onlyL1Owner {\\n Address.functionCall(target, data, \\\"Forwarder call reverted\\\");\\n }\\n\\n /**\\n * @notice This is always the address of the OVM_L2CrossDomainMessenger contract\\n */\\n function crossDomainMessenger() public view returns (address) {\\n return address(OVM_CROSS_DOMAIN_MESSENGER);\\n }\\n\\n /**\\n * @notice The call MUST come from the L1 owner (via cross-chain message.) Reverts otherwise.\\n */\\n modifier onlyL1Owner() override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == crossDomainMessenger(), \\\"Sender is not the L2 messenger\\\");\\n // solhint-disable-next-line gas-custom-errors\\n require(\\n iOVM_CrossDomainMessenger(crossDomainMessenger()).xDomainMessageSender() == l1Owner(),\\n \\\"xDomain sender is not the L1 owner\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @notice The call MUST come from the proposed L1 owner (via cross-chain message.) Reverts otherwise.\\n */\\n modifier onlyProposedL1Owner() override {\\n address messenger = crossDomainMessenger();\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == messenger, \\\"Sender is not the L2 messenger\\\");\\n // solhint-disable-next-line gas-custom-errors\\n require(\\n iOVM_CrossDomainMessenger(messenger).xDomainMessageSender() == s_l1PendingOwner, \\\"Must be proposed L1 owner\\\"\\n );\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(\\n address newOwner\\n ) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(\\n address to\\n ) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(\\n address to\\n ) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(\\n address recipient\\n ) external;\\n\\n function acceptOwnership() external;\\n}\\n\"},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ITypeAndVersion {\\n function typeAndVersion() external pure returns (string memory);\\n}\\n\"},\"src/v0.8/vendor/@eth-optimism/contracts/v0.4.7/contracts/optimistic-ethereum/iOVM/bridge/messaging/iOVM_CrossDomainMessenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity \\u003e=0.7.6 \\u003c0.9.0;\\n\\n/**\\n * @title iOVM_CrossDomainMessenger\\n */\\ninterface iOVM_CrossDomainMessenger {\\n /**********\\n * Events *\\n **********/\\n\\n event SentMessage(bytes message);\\n event RelayedMessage(bytes32 msgHash);\\n event FailedRelayedMessage(bytes32 msgHash);\\n\\n /*************\\n * Variables *\\n *************/\\n\\n function xDomainMessageSender() external view returns (address);\\n\\n /********************\\n * Public Functions *\\n ********************/\\n\\n /**\\n * Sends a cross domain message to the target messenger.\\n * @param _target Target contract address.\\n * @param _message Message to send to the target.\\n * @param _gasLimit Gas limit for the provided message.\\n */\\n function sendMessage(address _target, bytes calldata _message, uint32 _gasLimit) external;\\n}\\n\"}}}" diff --git a/gethwrappers/l2ep/generated/v1_0_0/optimism_cross_domain_governor/optimism_cross_domain_governor.go b/gethwrappers/l2ep/generated/v1_0_0/optimism_cross_domain_governor/optimism_cross_domain_governor.go new file mode 100644 index 0000000000..88cf50c6da --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/optimism_cross_domain_governor/optimism_cross_domain_governor.go @@ -0,0 +1,942 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package optimism_cross_domain_governor + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var OptimismCrossDomainGovernorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"crossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"contractiOVM_CrossDomainMessenger\"},{\"name\":\"l1OwnerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptL1Ownership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"crossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forward\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forwardDelegate\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferL1Ownership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"L1OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", + Bin: "0x60a060405234801562000010575f80fd5b50604051620016e0380380620016e0833981016040819052620000339162000269565b81818033805f816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be816200014b565b505050620000d281620001f560201b60201c565b506001600160a01b038216620001355760405162461bcd60e51b815260206004820152602160248201527f496e76616c69642078446f6d61696e204d657373656e676572206164647265736044820152607360f81b606482015260840162000083565b506001600160a01b031660805250620002a69050565b336001600160a01b03821603620001a55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600280546001600160a01b038381166001600160a01b03198084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b6001600160a01b038116811462000266575f80fd5b50565b5f80604083850312156200027b575f80fd5b8251620002888162000251565b60208401519092506200029b8162000251565b809150509250929050565b6080516113fe620002e25f395f8181610197015281816101dd0152818161046b01528181610800015281816108b801526109f401526113fe5ff3fe608060405234801561000f575f80fd5b50600436106100b9575f3560e01c806396b8d7c011610072578063d2db637211610058578063d2db637214610164578063f2fde38b14610182578063f43b361314610195575f80fd5b806396b8d7c014610149578063b2ec07871461015c575f80fd5b80636fadcf72116100a25780636fadcf72146100f057806379ba5097146101035780638da5cb5b1461010b575f80fd5b8063181f5a77146100bd57806326929eb6146100db575b5f80fd5b6100c56101bb565b6040516100d29190611205565b60405180910390f35b6100ee6100e93660046112a3565b6101db565b005b6100ee6100fe3660046112a3565b610469565b6100ee6106ec565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100d2565b6100ee61015736600461137f565b6107e8565b6100ee6109f2565b60025473ffffffffffffffffffffffffffffffffffffffff16610124565b6100ee61019036600461137f565b610bc5565b7f0000000000000000000000000000000000000000000000000000000000000000610124565b60606040518060600160405280602181526020016113d160219139905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff811633148061023657505f5473ffffffffffffffffffffffffffffffffffffffff1633145b6102c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572206f60448201527f72206f776e65720000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff811633036104235760025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561035c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610380919061139a565b73ffffffffffffffffffffffffffffffffffffffff1614610423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084016102be565b61046383836040518060400160405280601e81526020017f476f7665726e6f722064656c656761746563616c6c2072657665727465640000815250610bd6565b50505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff81163314806104c457505f5473ffffffffffffffffffffffffffffffffffffffff1633145b610550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572206f60448201527f72206f776e65720000000000000000000000000000000000000000000000000060648201526084016102be565b73ffffffffffffffffffffffffffffffffffffffff811633036106ac5760025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105e5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610609919061139a565b73ffffffffffffffffffffffffffffffffffffffff16146106ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084016102be565b61046383836040518060400160405280601681526020017f476f7665726e6f722063616c6c20726576657274656400000000000000000000815250610cfc565b60015473ffffffffffffffffffffffffffffffffffffffff16331461076d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016102be565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064016102be565b60025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561091f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610943919061139a565b73ffffffffffffffffffffffffffffffffffffffff16146109e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084016102be565b6109ef81610d12565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff81163314610a92576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064016102be565b600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff92831692841691636e296e459160048083019260209291908290030181865afa158015610b02573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b26919061139a565b73ffffffffffffffffffffffffffffffffffffffff1614610ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d7573742062652070726f706f736564204c31206f776e65720000000000000060448201526064016102be565b6003546109ef9073ffffffffffffffffffffffffffffffffffffffff16610e07565b610bcd610e88565b6109ef81610f0a565b606073ffffffffffffffffffffffffffffffffffffffff84163b610c7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016102be565b5f808573ffffffffffffffffffffffffffffffffffffffff1685604051610ca391906113b5565b5f60405180830381855af49150503d805f8114610cdb576040519150601f19603f3d011682016040523d82523d5f602084013e610ce0565b606091505b5091509150610cf0828286610ffe565b925050505b9392505050565b6060610d0a84845f85611051565b949350505050565b3373ffffffffffffffffffffffffffffffffffffffff821603610d91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016102be565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907f55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f905f90a350565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610f08576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016102be565b565b3373ffffffffffffffffffffffffffffffffffffffff821603610f89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016102be565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6060831561100d575081610cf5565b82511561101d5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102be9190611205565b6060824710156110e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102be565b73ffffffffffffffffffffffffffffffffffffffff85163b611161576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102be565b5f808673ffffffffffffffffffffffffffffffffffffffff16858760405161118991906113b5565b5f6040518083038185875af1925050503d805f81146111c3576040519150601f19603f3d011682016040523d82523d5f602084013e6111c8565b606091505b50915091506111d8828286610ffe565b979650505050505050565b5f5b838110156111fd5781810151838201526020016111e5565b50505f910152565b602081525f82518060208401526112238160408501602087016111e3565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff811681146109ef575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80604083850312156112b4575f80fd5b82356112bf81611255565b9150602083013567ffffffffffffffff808211156112db575f80fd5b818501915085601f8301126112ee575f80fd5b81358181111561130057611300611276565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561134657611346611276565b8160405282815288602084870101111561135e575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f6020828403121561138f575f80fd5b8135610cf581611255565b5f602082840312156113aa575f80fd5b8151610cf581611255565b5f82516113c68184602087016111e3565b919091019291505056fe4f7074696d69736d43726f7373446f6d61696e476f7665726e6f7220312e302e30a164736f6c6343000818000a", +} + +var OptimismCrossDomainGovernorABI = OptimismCrossDomainGovernorMetaData.ABI + +var OptimismCrossDomainGovernorBin = OptimismCrossDomainGovernorMetaData.Bin + +func DeployOptimismCrossDomainGovernor(auth *bind.TransactOpts, backend bind.ContractBackend, crossDomainMessengerAddr common.Address, l1OwnerAddr common.Address) (common.Address, *types.Transaction, *OptimismCrossDomainGovernor, error) { + parsed, err := OptimismCrossDomainGovernorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OptimismCrossDomainGovernorBin), backend, crossDomainMessengerAddr, l1OwnerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OptimismCrossDomainGovernor{address: address, abi: *parsed, OptimismCrossDomainGovernorCaller: OptimismCrossDomainGovernorCaller{contract: contract}, OptimismCrossDomainGovernorTransactor: OptimismCrossDomainGovernorTransactor{contract: contract}, OptimismCrossDomainGovernorFilterer: OptimismCrossDomainGovernorFilterer{contract: contract}}, nil +} + +type OptimismCrossDomainGovernor struct { + address common.Address + abi abi.ABI + OptimismCrossDomainGovernorCaller + OptimismCrossDomainGovernorTransactor + OptimismCrossDomainGovernorFilterer +} + +type OptimismCrossDomainGovernorCaller struct { + contract *bind.BoundContract +} + +type OptimismCrossDomainGovernorTransactor struct { + contract *bind.BoundContract +} + +type OptimismCrossDomainGovernorFilterer struct { + contract *bind.BoundContract +} + +type OptimismCrossDomainGovernorSession struct { + Contract *OptimismCrossDomainGovernor + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type OptimismCrossDomainGovernorCallerSession struct { + Contract *OptimismCrossDomainGovernorCaller + CallOpts bind.CallOpts +} + +type OptimismCrossDomainGovernorTransactorSession struct { + Contract *OptimismCrossDomainGovernorTransactor + TransactOpts bind.TransactOpts +} + +type OptimismCrossDomainGovernorRaw struct { + Contract *OptimismCrossDomainGovernor +} + +type OptimismCrossDomainGovernorCallerRaw struct { + Contract *OptimismCrossDomainGovernorCaller +} + +type OptimismCrossDomainGovernorTransactorRaw struct { + Contract *OptimismCrossDomainGovernorTransactor +} + +func NewOptimismCrossDomainGovernor(address common.Address, backend bind.ContractBackend) (*OptimismCrossDomainGovernor, error) { + abi, err := abi.JSON(strings.NewReader(OptimismCrossDomainGovernorABI)) + if err != nil { + return nil, err + } + contract, err := bindOptimismCrossDomainGovernor(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernor{address: address, abi: abi, OptimismCrossDomainGovernorCaller: OptimismCrossDomainGovernorCaller{contract: contract}, OptimismCrossDomainGovernorTransactor: OptimismCrossDomainGovernorTransactor{contract: contract}, OptimismCrossDomainGovernorFilterer: OptimismCrossDomainGovernorFilterer{contract: contract}}, nil +} + +func NewOptimismCrossDomainGovernorCaller(address common.Address, caller bind.ContractCaller) (*OptimismCrossDomainGovernorCaller, error) { + contract, err := bindOptimismCrossDomainGovernor(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorCaller{contract: contract}, nil +} + +func NewOptimismCrossDomainGovernorTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismCrossDomainGovernorTransactor, error) { + contract, err := bindOptimismCrossDomainGovernor(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorTransactor{contract: contract}, nil +} + +func NewOptimismCrossDomainGovernorFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismCrossDomainGovernorFilterer, error) { + contract, err := bindOptimismCrossDomainGovernor(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorFilterer{contract: contract}, nil +} + +func bindOptimismCrossDomainGovernor(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := OptimismCrossDomainGovernorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismCrossDomainGovernor.Contract.OptimismCrossDomainGovernorCaller.contract.Call(opts, result, method, params...) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.OptimismCrossDomainGovernorTransactor.contract.Transfer(opts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.OptimismCrossDomainGovernorTransactor.contract.Transact(opts, method, params...) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismCrossDomainGovernor.Contract.contract.Call(opts, result, method, params...) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.contract.Transfer(opts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.contract.Transact(opts, method, params...) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCaller) CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismCrossDomainGovernor.contract.Call(opts, &out, "crossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) CrossDomainMessenger() (common.Address, error) { + return _OptimismCrossDomainGovernor.Contract.CrossDomainMessenger(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCallerSession) CrossDomainMessenger() (common.Address, error) { + return _OptimismCrossDomainGovernor.Contract.CrossDomainMessenger(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCaller) L1Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismCrossDomainGovernor.contract.Call(opts, &out, "l1Owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) L1Owner() (common.Address, error) { + return _OptimismCrossDomainGovernor.Contract.L1Owner(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCallerSession) L1Owner() (common.Address, error) { + return _OptimismCrossDomainGovernor.Contract.L1Owner(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismCrossDomainGovernor.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) Owner() (common.Address, error) { + return _OptimismCrossDomainGovernor.Contract.Owner(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCallerSession) Owner() (common.Address, error) { + return _OptimismCrossDomainGovernor.Contract.Owner(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismCrossDomainGovernor.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) TypeAndVersion() (string, error) { + return _OptimismCrossDomainGovernor.Contract.TypeAndVersion(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorCallerSession) TypeAndVersion() (string, error) { + return _OptimismCrossDomainGovernor.Contract.TypeAndVersion(&_OptimismCrossDomainGovernor.CallOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactor) AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.contract.Transact(opts, "acceptL1Ownership") +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.AcceptL1Ownership(&_OptimismCrossDomainGovernor.TransactOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.AcceptL1Ownership(&_OptimismCrossDomainGovernor.TransactOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.contract.Transact(opts, "acceptOwnership") +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.AcceptOwnership(&_OptimismCrossDomainGovernor.TransactOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.AcceptOwnership(&_OptimismCrossDomainGovernor.TransactOpts) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactor) Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.contract.Transact(opts, "forward", target, data) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.Forward(&_OptimismCrossDomainGovernor.TransactOpts, target, data) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.Forward(&_OptimismCrossDomainGovernor.TransactOpts, target, data) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactor) ForwardDelegate(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.contract.Transact(opts, "forwardDelegate", target, data) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) ForwardDelegate(target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.ForwardDelegate(&_OptimismCrossDomainGovernor.TransactOpts, target, data) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorSession) ForwardDelegate(target common.Address, data []byte) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.ForwardDelegate(&_OptimismCrossDomainGovernor.TransactOpts, target, data) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactor) TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.contract.Transact(opts, "transferL1Ownership", to) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.TransferL1Ownership(&_OptimismCrossDomainGovernor.TransactOpts, to) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.TransferL1Ownership(&_OptimismCrossDomainGovernor.TransactOpts, to) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.contract.Transact(opts, "transferOwnership", to) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.TransferOwnership(&_OptimismCrossDomainGovernor.TransactOpts, to) +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismCrossDomainGovernor.Contract.TransferOwnership(&_OptimismCrossDomainGovernor.TransactOpts, to) +} + +type OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator struct { + Event *OptimismCrossDomainGovernorL1OwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainGovernorL1OwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.FilterLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator{contract: _OptimismCrossDomainGovernor.contract, event: "L1OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.WatchLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainGovernorL1OwnershipTransferRequested) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) ParseL1OwnershipTransferRequested(log types.Log) (*OptimismCrossDomainGovernorL1OwnershipTransferRequested, error) { + event := new(OptimismCrossDomainGovernorL1OwnershipTransferRequested) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismCrossDomainGovernorL1OwnershipTransferredIterator struct { + Event *OptimismCrossDomainGovernorL1OwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainGovernorL1OwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainGovernorL1OwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainGovernorL1OwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainGovernorL1OwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorL1OwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.FilterLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorL1OwnershipTransferredIterator{contract: _OptimismCrossDomainGovernor.contract, event: "L1OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.WatchLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainGovernorL1OwnershipTransferred) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) ParseL1OwnershipTransferred(log types.Log) (*OptimismCrossDomainGovernorL1OwnershipTransferred, error) { + event := new(OptimismCrossDomainGovernorL1OwnershipTransferred) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismCrossDomainGovernorOwnershipTransferRequestedIterator struct { + Event *OptimismCrossDomainGovernorOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainGovernorOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainGovernorOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainGovernorOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainGovernorOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorOwnershipTransferRequestedIterator{contract: _OptimismCrossDomainGovernor.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainGovernorOwnershipTransferRequested) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) ParseOwnershipTransferRequested(log types.Log) (*OptimismCrossDomainGovernorOwnershipTransferRequested, error) { + event := new(OptimismCrossDomainGovernorOwnershipTransferRequested) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismCrossDomainGovernorOwnershipTransferredIterator struct { + Event *OptimismCrossDomainGovernorOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismCrossDomainGovernorOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismCrossDomainGovernorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismCrossDomainGovernorOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismCrossDomainGovernorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismCrossDomainGovernorOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismCrossDomainGovernorOwnershipTransferredIterator{contract: _OptimismCrossDomainGovernor.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismCrossDomainGovernor.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismCrossDomainGovernorOwnershipTransferred) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernorFilterer) ParseOwnershipTransferred(log types.Log) (*OptimismCrossDomainGovernorOwnershipTransferred, error) { + event := new(OptimismCrossDomainGovernorOwnershipTransferred) + if err := _OptimismCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (OptimismCrossDomainGovernorL1OwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0x55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f") +} + +func (OptimismCrossDomainGovernorL1OwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0xb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272") +} + +func (OptimismCrossDomainGovernorOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (OptimismCrossDomainGovernorOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_OptimismCrossDomainGovernor *OptimismCrossDomainGovernor) Address() common.Address { + return _OptimismCrossDomainGovernor.address +} + +type OptimismCrossDomainGovernorInterface interface { + CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) + + L1Owner(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + ForwardDelegate(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorL1OwnershipTransferRequestedIterator, error) + + WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferRequested(log types.Log) (*OptimismCrossDomainGovernorL1OwnershipTransferRequested, error) + + FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorL1OwnershipTransferredIterator, error) + + WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferred(log types.Log) (*OptimismCrossDomainGovernorL1OwnershipTransferred, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*OptimismCrossDomainGovernorOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismCrossDomainGovernorOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismCrossDomainGovernorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*OptimismCrossDomainGovernorOwnershipTransferred, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/v1_0_0/optimism_cross_domain_governor/optimism_cross_domain_governor_metadata.go b/gethwrappers/l2ep/generated/v1_0_0/optimism_cross_domain_governor/optimism_cross_domain_governor_metadata.go new file mode 100644 index 0000000000..c0e6071285 --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/optimism_cross_domain_governor/optimism_cross_domain_governor_metadata.go @@ -0,0 +1,7 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + + +package optimism_cross_domain_governor + +var SolidityStandardInput = "{\"version\":\"v0.8.24+commit.e11b9ed9\",\"language\":\"Solidity\",\"settings\":{\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":true,\"bytecodeHash\":\"none\",\"useLiteralContent\":false},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"outputSelection\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/CrossDomainForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/CrossDomainOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/ICrossDomainOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/IDelegateForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/IForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/optimism/OptimismCrossDomainForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/optimism/OptimismCrossDomainGovernor.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/vendor/@eth-optimism/contracts/v0.4.7/contracts/optimistic-ethereum/iOVM/bridge/messaging/iOVM_CrossDomainMessenger.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]}},\"remappings\":[\"forge-std/=src/v0.8/vendor/forge-std/src/\",\"@openzeppelin/contracts@4.7.3/=node_modules/@openzeppelin/contracts-4.7.3/\",\"@openzeppelin/contracts@4.8.3/=node_modules/@openzeppelin/contracts-4.8.3/\",\"@openzeppelin/contracts@4.9.6/=node_modules/@openzeppelin/contracts-4.9.6/\",\"@openzeppelin/contracts@5.0.2/=node_modules/@openzeppelin/contracts-5.0.2/\",\"@openzeppelin/contracts@5.1.0/=node_modules/@openzeppelin/contracts-5.1.0/\",\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@arbitrum/=node_modules/@arbitrum/\",\"hardhat/=node_modules/hardhat/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@zksync/=node_modules/@zksync/\"],\"viaIR\":false},\"sources\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length \\u003e 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance \\u003e= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance \\u003e= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length \\u003e 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"},\"src/v0.8/l2ep/CrossDomainForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {CrossDomainOwnable} from \\\"./CrossDomainOwnable.sol\\\";\\nimport {IForwarder} from \\\"./interfaces/IForwarder.sol\\\";\\n\\n/**\\n * @title CrossDomainForwarder - L1 xDomain account representation\\n * @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n * destination.\\n * @dev Any other L2 contract which uses this contract's address as a privileged position,\\n * can consider that position to be held by the `l1Owner`\\n */\\nabstract contract CrossDomainForwarder is IForwarder, CrossDomainOwnable {}\\n\"},\"src/v0.8/l2ep/CrossDomainOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwner} from \\\"../shared/access/ConfirmedOwner.sol\\\";\\nimport {ICrossDomainOwnable} from \\\"./interfaces/ICrossDomainOwnable.sol\\\";\\n\\n/**\\n * @title The CrossDomainOwnable contract\\n * @notice A contract with helpers for cross-domain contract ownership.\\n */\\ncontract CrossDomainOwnable is ICrossDomainOwnable, ConfirmedOwner {\\n address internal s_l1Owner;\\n address internal s_l1PendingOwner;\\n\\n constructor(\\n address newl1Owner\\n ) ConfirmedOwner(msg.sender) {\\n _setL1Owner(newl1Owner);\\n }\\n\\n /**\\n * @notice transfer ownership of this account to a new L1 owner\\n * @param to new L1 owner that will be allowed to call the forward fn\\n */\\n function transferL1Ownership(\\n address to\\n ) public virtual override onlyL1Owner {\\n _transferL1Ownership(to);\\n }\\n\\n /**\\n * @notice accept ownership of this account to a new L1 owner\\n */\\n function acceptL1Ownership() public virtual override onlyProposedL1Owner {\\n _setL1Owner(s_l1PendingOwner);\\n }\\n\\n /**\\n * @notice Get the current owner\\n */\\n function l1Owner() public view override returns (address) {\\n return s_l1Owner;\\n }\\n\\n /**\\n * @notice validate, transfer ownership, and emit relevant events\\n */\\n function _transferL1Ownership(\\n address to\\n ) internal {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_l1PendingOwner = to;\\n\\n emit L1OwnershipTransferRequested(s_l1Owner, to);\\n }\\n\\n /**\\n * @notice set ownership, emit relevant events. Used in acceptOwnership()\\n */\\n function _setL1Owner(\\n address to\\n ) internal {\\n address oldOwner = s_l1Owner;\\n s_l1Owner = to;\\n s_l1PendingOwner = address(0);\\n\\n emit L1OwnershipTransferred(oldOwner, to);\\n }\\n\\n /**\\n * @notice Reverts if called by anyone other than the L1 owner.\\n */\\n modifier onlyL1Owner() virtual {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_l1Owner, \\\"Only callable by L1 owner\\\");\\n _;\\n }\\n\\n /**\\n * @notice Reverts if called by anyone other than the L1 owner.\\n */\\n modifier onlyProposedL1Owner() virtual {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_l1PendingOwner, \\\"Only callable by proposed L1 owner\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/l2ep/interfaces/ICrossDomainOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title A contract with helpers for cross-domain contract ownership\\ninterface ICrossDomainOwnable {\\n event L1OwnershipTransferRequested(address indexed from, address indexed to);\\n\\n event L1OwnershipTransferred(address indexed from, address indexed to);\\n\\n function l1Owner() external returns (address);\\n\\n function transferL1Ownership(\\n address recipient\\n ) external;\\n\\n function acceptL1Ownership() external;\\n}\\n\"},\"src/v0.8/l2ep/interfaces/IDelegateForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title Forwards a delegatecall to a target, under some conditions\\ninterface IDelegateForwarder {\\n /// @notice forward delegatecalls the `target` with `data`\\n /// @param target contract address to be delegatecalled\\n /// @param data to send to target contract\\n function forwardDelegate(address target, bytes memory data) external;\\n}\\n\"},\"src/v0.8/l2ep/interfaces/IForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title Forwards a call to a target, under some conditions\\ninterface IForwarder {\\n /// @notice forward calls the `target` with `data`\\n /// @param target contract address to be called\\n /// @param data to send to target contract\\n function forward(address target, bytes memory data) external;\\n}\\n\"},\"src/v0.8/l2ep/optimism/OptimismCrossDomainForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\n// solhint-disable-next-line no-unused-import\\nimport {IForwarder} from \\\"../interfaces/IForwarder.sol\\\";\\n\\n/* ./dev dependencies - to be moved from ./dev after audit */\\nimport {CrossDomainForwarder} from \\\"../CrossDomainForwarder.sol\\\";\\nimport {CrossDomainOwnable} from \\\"../CrossDomainOwnable.sol\\\";\\n\\nimport {iOVM_CrossDomainMessenger} from\\n \\\"../../vendor/@eth-optimism/contracts/v0.4.7/contracts/optimistic-ethereum/iOVM/bridge/messaging/iOVM_CrossDomainMessenger.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts@4.7.3/utils/Address.sol\\\";\\n\\n/**\\n * @title OptimismCrossDomainForwarder - L1 xDomain account representation\\n * @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n * destination.\\n * @dev Any other L2 contract which uses this contract's address as a privileged position,\\n * can be considered to be owned by the `l1Owner`\\n */\\ncontract OptimismCrossDomainForwarder is ITypeAndVersion, CrossDomainForwarder {\\n // OVM_L2CrossDomainMessenger is a precompile usually deployed to 0x4200000000000000000000000000000000000007\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n iOVM_CrossDomainMessenger private immutable OVM_CROSS_DOMAIN_MESSENGER;\\n\\n /**\\n * @notice creates a new Optimism xDomain Forwarder contract\\n * @param crossDomainMessengerAddr the xDomain bridge messenger (Optimism bridge L2) contract address\\n * @param l1OwnerAddr the L1 owner address that will be allowed to call the forward fn\\n */\\n constructor(iOVM_CrossDomainMessenger crossDomainMessengerAddr, address l1OwnerAddr) CrossDomainOwnable(l1OwnerAddr) {\\n // solhint-disable-next-line gas-custom-errors\\n require(address(crossDomainMessengerAddr) != address(0), \\\"Invalid xDomain Messenger address\\\");\\n OVM_CROSS_DOMAIN_MESSENGER = crossDomainMessengerAddr;\\n }\\n\\n /**\\n * @notice versions:\\n *\\n * - OptimismCrossDomainForwarder 0.1.0: initial release\\n * - OptimismCrossDomainForwarder 1.0.0: Use OZ Address, CrossDomainOwnable\\n *\\n * @inheritdoc ITypeAndVersion\\n */\\n function typeAndVersion() external pure virtual override returns (string memory) {\\n return \\\"OptimismCrossDomainForwarder 1.0.0\\\";\\n }\\n\\n /**\\n * @dev forwarded only if L2 Messenger calls with `xDomainMessageSender` being the L1 owner address\\n * @inheritdoc IForwarder\\n */\\n function forward(address target, bytes memory data) external virtual override onlyL1Owner {\\n Address.functionCall(target, data, \\\"Forwarder call reverted\\\");\\n }\\n\\n /**\\n * @notice This is always the address of the OVM_L2CrossDomainMessenger contract\\n */\\n function crossDomainMessenger() public view returns (address) {\\n return address(OVM_CROSS_DOMAIN_MESSENGER);\\n }\\n\\n /**\\n * @notice The call MUST come from the L1 owner (via cross-chain message.) Reverts otherwise.\\n */\\n modifier onlyL1Owner() override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == crossDomainMessenger(), \\\"Sender is not the L2 messenger\\\");\\n // solhint-disable-next-line gas-custom-errors\\n require(\\n iOVM_CrossDomainMessenger(crossDomainMessenger()).xDomainMessageSender() == l1Owner(),\\n \\\"xDomain sender is not the L1 owner\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @notice The call MUST come from the proposed L1 owner (via cross-chain message.) Reverts otherwise.\\n */\\n modifier onlyProposedL1Owner() override {\\n address messenger = crossDomainMessenger();\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == messenger, \\\"Sender is not the L2 messenger\\\");\\n // solhint-disable-next-line gas-custom-errors\\n require(\\n iOVM_CrossDomainMessenger(messenger).xDomainMessageSender() == s_l1PendingOwner, \\\"Must be proposed L1 owner\\\"\\n );\\n _;\\n }\\n}\\n\"},\"src/v0.8/l2ep/optimism/OptimismCrossDomainGovernor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.24;\\n\\nimport {IDelegateForwarder} from \\\"../interfaces/IDelegateForwarder.sol\\\";\\n// solhint-disable-next-line no-unused-import\\nimport {IForwarder} from \\\"../interfaces/IForwarder.sol\\\";\\n\\nimport {OptimismCrossDomainForwarder} from \\\"./OptimismCrossDomainForwarder.sol\\\";\\n\\nimport {iOVM_CrossDomainMessenger} from\\n \\\"../../vendor/@eth-optimism/contracts/v0.4.7/contracts/optimistic-ethereum/iOVM/bridge/messaging/iOVM_CrossDomainMessenger.sol\\\";\\nimport {Address} from \\\"@openzeppelin/contracts@4.7.3/utils/Address.sol\\\";\\n\\n/**\\n * @title OptimismCrossDomainGovernor - L1 xDomain account representation (with delegatecall support) for Optimism\\n * @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n * destination.\\n * @dev Any other L2 contract which uses this contract's address as a privileged position,\\n * can be considered to be simultaneously owned by the `l1Owner` and L2 `owner`\\n */\\ncontract OptimismCrossDomainGovernor is IDelegateForwarder, OptimismCrossDomainForwarder {\\n /**\\n * @notice creates a new Optimism xDomain Forwarder contract\\n * @param crossDomainMessengerAddr the xDomain bridge messenger (Optimism bridge L2) contract address\\n * @param l1OwnerAddr the L1 owner address that will be allowed to call the forward fn\\n * @dev Empty constructor required due to inheriting from abstract contract CrossDomainForwarder\\n */\\n constructor(\\n iOVM_CrossDomainMessenger crossDomainMessengerAddr,\\n address l1OwnerAddr\\n ) OptimismCrossDomainForwarder(crossDomainMessengerAddr, l1OwnerAddr) {}\\n\\n /**\\n * @notice versions:\\n *\\n * - OptimismCrossDomainForwarder 1.0.0: initial release\\n */\\n function typeAndVersion() external pure virtual override returns (string memory) {\\n return \\\"OptimismCrossDomainGovernor 1.0.0\\\";\\n }\\n\\n /**\\n * @dev forwarded only if L2 Messenger calls with `msg.sender` being the L1 owner address, or called by the L2 owner\\n * @inheritdoc IForwarder\\n */\\n function forward(address target, bytes memory data) external override onlyLocalOrCrossDomainOwner {\\n Address.functionCall(target, data, \\\"Governor call reverted\\\");\\n }\\n\\n /**\\n * @dev forwarded only if L2 Messenger calls with `msg.sender` being the L1 owner address, or called by the L2 owner\\n * @inheritdoc IDelegateForwarder\\n */\\n function forwardDelegate(address target, bytes memory data) external override onlyLocalOrCrossDomainOwner {\\n Address.functionDelegateCall(target, data, \\\"Governor delegatecall reverted\\\");\\n }\\n\\n /**\\n * @notice The call MUST come from either the L1 owner (via cross-chain message) or the L2 owner. Reverts otherwise.\\n */\\n modifier onlyLocalOrCrossDomainOwner() {\\n address messenger = crossDomainMessenger();\\n // 1. The delegatecall MUST come from either the L1 owner (via cross-chain message) or the L2 owner\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == messenger || msg.sender == owner(), \\\"Sender is not the L2 messenger or owner\\\");\\n // 2. The L2 Messenger's caller MUST be the L1 Owner\\n if (msg.sender == messenger) {\\n // solhint-disable-next-line gas-custom-errors\\n require(\\n iOVM_CrossDomainMessenger(messenger).xDomainMessageSender() == l1Owner(), \\\"xDomain sender is not the L1 owner\\\"\\n );\\n }\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(\\n address newOwner\\n ) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(\\n address to\\n ) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(\\n address to\\n ) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(\\n address recipient\\n ) external;\\n\\n function acceptOwnership() external;\\n}\\n\"},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ITypeAndVersion {\\n function typeAndVersion() external pure returns (string memory);\\n}\\n\"},\"src/v0.8/vendor/@eth-optimism/contracts/v0.4.7/contracts/optimistic-ethereum/iOVM/bridge/messaging/iOVM_CrossDomainMessenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity \\u003e=0.7.6 \\u003c0.9.0;\\n\\n/**\\n * @title iOVM_CrossDomainMessenger\\n */\\ninterface iOVM_CrossDomainMessenger {\\n /**********\\n * Events *\\n **********/\\n\\n event SentMessage(bytes message);\\n event RelayedMessage(bytes32 msgHash);\\n event FailedRelayedMessage(bytes32 msgHash);\\n\\n /*************\\n * Variables *\\n *************/\\n\\n function xDomainMessageSender() external view returns (address);\\n\\n /********************\\n * Public Functions *\\n ********************/\\n\\n /**\\n * Sends a cross domain message to the target messenger.\\n * @param _target Target contract address.\\n * @param _message Message to send to the target.\\n * @param _gasLimit Gas limit for the provided message.\\n */\\n function sendMessage(address _target, bytes calldata _message, uint32 _gasLimit) external;\\n}\\n\"}}}" diff --git a/gethwrappers/l2ep/generated/v1_0_0/optimism_sequencer_uptime_feed/optimism_sequencer_uptime_feed.go b/gethwrappers/l2ep/generated/v1_0_0/optimism_sequencer_uptime_feed/optimism_sequencer_uptime_feed.go new file mode 100644 index 0000000000..106c5ce7d2 --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/optimism_sequencer_uptime_feed/optimism_sequencer_uptime_feed.go @@ -0,0 +1,2187 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package optimism_sequencer_uptime_feed + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var OptimismSequencerUptimeFeedMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"l1SenderAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2CrossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStatus\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"description\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAnswer\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoundData\",\"inputs\":[{\"name\":\"_roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"outputs\":[{\"name\":\"roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"},{\"name\":\"answer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"answeredInRound\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTimestamp\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_calldata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestAnswer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestRound\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestRoundData\",\"inputs\":[],\"outputs\":[{\"name\":\"roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"},{\"name\":\"answer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"answeredInRound\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferL1Sender\",\"inputs\":[{\"name\":\"newSender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AddedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AnswerUpdated\",\"inputs\":[{\"name\":\"current\",\"type\":\"int256\",\"indexed\":true,\"internalType\":\"int256\"},{\"name\":\"roundId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1SenderTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewRound\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"startedBy\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemovedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoundUpdated\",\"inputs\":[{\"name\":\"status\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"updatedAt\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdateIgnored\",\"inputs\":[{\"name\":\"latestStatus\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"latestTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"incomingStatus\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"incomingTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoDataPresent\",\"inputs\":[]}]", + Bin: "0x6101206040525f60a081905260c081905260e081905261010052600480546001600160d81b031916905534801562000035575f80fd5b5060405162001ea138038062001ea18339810160408190526200005891620003eb565b828133805f81620000b05760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000e257620000e28162000127565b50506001805460ff60a01b1916600160a01b179055506200010382620001d1565b62000111600182426200023a565b5050506001600160a01b03166080525062000439565b336001600160a01b03821603620001815760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620000a7565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6003546001600160a01b0390811690821681146200023657600380546001600160a01b0319166001600160a01b0384811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18905f90a35b5050565b60408051606080820183526001600160401b0384811680845242821660208086018281528915158789018181526001600160501b038d165f818152600586528b902099518a54945192511515600160801b0260ff60801b19938a1668010000000000000000026001600160801b03199096169190991617939093171695909517909655865160808101885286815280820184905280880183905290940183905260048054600160d01b90940260ff60d01b19600160901b90930292909216600160901b600160d81b03196a010000000000000000000085026001600160901b0319909616881795909517949094169390931717909155925192835233927f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271910160405180910390a36001600160501b0383166200037783620003b8565b6040516001600160401b03841681527f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f9060200160405180910390a3505050565b5f81620003c6575f620003c9565b60015b92915050565b80516001600160a01b0381168114620003e6575f80fd5b919050565b5f805f60608486031215620003fe575f80fd5b6200040984620003cf565b92506200041960208501620003cf565b9150604084015180151581146200042e575f80fd5b809150509250925092565b608051611a48620004595f395f818161124601526112870152611a485ff3fe608060405234801561000f575f80fd5b5060043610610184575f3560e01c80638205bf6a116100dd578063b633620c11610088578063ed8378f511610063578063ed8378f514610390578063f2fde38b146103a3578063feaf968c146103b6575f80fd5b8063b633620c1461033a578063b7558b7a1461034d578063dc7f01241461036b575f80fd5b80639a6fc8f5116100b85780639a6fc8f5146102ca578063a118f24914610314578063b5ab58dc14610327575f80fd5b80638205bf6a146102715780638823da6c146102795780638da5cb5b1461028c575f80fd5b806354fd4d501161013d5780637284e416116101185780637284e4161461022557806379ba5097146102615780638038e4a114610269575f80fd5b806354fd4d50146101f2578063668a0f02146101fa5780636b14daf814610202575f80fd5b8063284afc081161016d578063284afc08146101b0578063313ce567146101c357806350d25bcd146101dc575f80fd5b80630a75698314610188578063181f5a7714610192575b5f80fd5b6101906103be565b005b61019a61043c565b6040516101a79190611776565b60405180910390f35b6101906101be366004611801565b610458565b6101ca5f81565b60405160ff90911681526020016101a7565b6101e461046c565b6040519081526020016101a7565b6101e4600181565b6101e4610549565b610215610210366004611849565b610602565b60405190151581526020016101a7565b61019a6040518060400160405280601f81526020017f4c322053657175656e63657220557074696d652053746174757320466565640081525081565b610190610634565b610190610730565b6101e46107c3565b610190610287366004611801565b610888565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a7565b6102dd6102d8366004611925565b61093f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a7565b610190610322366004611801565b610a9f565b6101e461033536600461194e565b610b51565b6101e461034836600461194e565b610c77565b60035473ffffffffffffffffffffffffffffffffffffffff166102a5565b6001546102159074010000000000000000000000000000000000000000900460ff1681565b61019061039e366004611965565b610d84565b6101906103b1366004611801565b610f32565b6102dd610f43565b6103c6611076565b60015474010000000000000000000000000000000000000000900460ff161561043a57600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638905f90a15b565b604051806060016040528060258152602001611a176025913981565b610460611076565b610469816110f6565b50565b5f6104ac335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600454610544907a010000000000000000000000000000000000000000000000000000900460ff16611190565b905090565b5f610589335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b6105ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b5060045469ffffffffffffffffffff1690565b5f61060d83836111a4565b8061062d575073ffffffffffffffffffffffffffffffffffffffff831632145b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161050e565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610738611076565b60015474010000000000000000000000000000000000000000900460ff1661043a57600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480905f90a1565b5f610803335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b506004546a0100000000000000000000900467ffffffffffffffff1690565b610890611076565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff16156104695773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d191015b60405180910390a150565b5f805f805f610983335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b6109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b6109fe8669ffffffffffffffffffff166111f8565b610a34576040517fbb25870000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b69ffffffffffffffffffff86165f90815260056020526040902080548790610a7290700100000000000000000000000000000000900460ff16611190565b91549098919767ffffffffffffffff80831698506801000000000000000090920490911695509350915050565b610aa7611076565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff166104695773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49101610934565b5f610b91335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b610c00826111f8565b610c36576040517fbb25870000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b69ffffffffffffffffffff82165f90815260056020526040902054610c7190700100000000000000000000000000000000900460ff16611190565b92915050565b5f610cb7335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b610d26826111f8565b610d5c576040517fbb25870000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5069ffffffffffffffffffff165f9081526005602052604090205467ffffffffffffffff1690565b600354610da69073ffffffffffffffffffffffffffffffffffffffff1661122e565b5f610e53604080516080810182525f808252602082018190529181018290526060810191909152506040805160808101825260045469ffffffffffffffffffff811682526a0100000000000000000000810467ffffffffffffffff90811660208401527201000000000000000000000000000000000000820416928201929092527a01000000000000000000000000000000000000000000000000000090910460ff161515606082015290565b90508167ffffffffffffffff16816020015167ffffffffffffffff161115610ee4577fe4a6e16301740042c17431042adb8f60454c18fb5934dd4c456269c0dc388fdf816060015182602001518585604051610ed79493929190931515845267ffffffffffffffff9283166020850152901515604084015216606082015260800190565b60405180910390a1505050565b8215158160600151151503610f04578051610eff9084611362565b505050565b6001815f01818151610f1691906119ac565b69ffffffffffffffffffff169052508051610eff908484611450565b610f3a611076565b61046981611682565b5f805f805f610f87335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610fed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b6004805469ffffffffffffffffffff811690611029907a010000000000000000000000000000000000000000000000000000900460ff16611190565b9154909791965067ffffffffffffffff6a01000000000000000000008204811696507201000000000000000000000000000000000000820416945069ffffffffffffffffffff1692509050565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461043a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161050e565b60035473ffffffffffffffffffffffffffffffffffffffff908116908216811461118c57600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18905f90a35b5050565b5f8161119c575f610c71565b600192915050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081205460ff168061062d57505060015474010000000000000000000000000000000000000000900460ff161592915050565b5f8082118015611212575069ffffffffffffffffffff8211155b8015610c7157505060045469ffffffffffffffffffff16101590565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614158061132b57508073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131291906119fb565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610469576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b69ffffffffffffffffffff82165f90815260056020526040902080547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff1690810291909117909155600480547fffffffffffff0000000000000000ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000009092029190911790557f297642343ed2faefb1a411b39fc449eae700e54223d5d0499a9421eb6f68f66a61142c82611190565b6040805191825267ffffffffffffffff421660208301520160405180910390a15050565b604080516060808201835267ffffffffffffffff848116808452428216602080860182815289151587890181815269ffffffffffffffffffff8d165f818152600586528b902099518a54945192511515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff938a1668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090961691909916179390931716959095179096558651608081018852868152808201849052808801839052909401839052600480547a0100000000000000000000000000000000000000000000000000009094027fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff7201000000000000000000000000000000000000909302929092167fffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff6a010000000000000000000085027fffffffffffffffffffffffffffff000000000000000000000000000000000000909616881795909517949094169390931717909155925192835233927f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271910160405180910390a38269ffffffffffffffffffff1661164083611190565b60405167ffffffffffffffff841681527f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f9060200160405180910390a3505050565b3373ffffffffffffffffffffffffffffffffffffffff821603611701576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161050e565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f602080835283518060208501525f5b818110156117a257858101830151858201604001528201611786565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610469575f80fd5b5f60208284031215611811575f80fd5b813561062d816117e0565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f806040838503121561185a575f80fd5b8235611865816117e0565b9150602083013567ffffffffffffffff80821115611881575f80fd5b818501915085601f830112611894575f80fd5b8135818111156118a6576118a661181c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156118ec576118ec61181c565b81604052828152886020848701011115611904575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215611935575f80fd5b813569ffffffffffffffffffff8116811461062d575f80fd5b5f6020828403121561195e575f80fd5b5035919050565b5f8060408385031215611976575f80fd5b82358015158114611985575f80fd5b9150602083013567ffffffffffffffff811681146119a1575f80fd5b809150509250929050565b69ffffffffffffffffffff8181168382160190808211156119f4577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5092915050565b5f60208284031215611a0b575f80fd5b815161062d816117e056fe4f7074696d69736d53657175656e636572557074696d654665656420312e312e302d646576a164736f6c6343000818000a", +} + +var OptimismSequencerUptimeFeedABI = OptimismSequencerUptimeFeedMetaData.ABI + +var OptimismSequencerUptimeFeedBin = OptimismSequencerUptimeFeedMetaData.Bin + +func DeployOptimismSequencerUptimeFeed(auth *bind.TransactOpts, backend bind.ContractBackend, l1SenderAddress common.Address, l2CrossDomainMessengerAddr common.Address, initialStatus bool) (common.Address, *types.Transaction, *OptimismSequencerUptimeFeed, error) { + parsed, err := OptimismSequencerUptimeFeedMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OptimismSequencerUptimeFeedBin), backend, l1SenderAddress, l2CrossDomainMessengerAddr, initialStatus) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OptimismSequencerUptimeFeed{address: address, abi: *parsed, OptimismSequencerUptimeFeedCaller: OptimismSequencerUptimeFeedCaller{contract: contract}, OptimismSequencerUptimeFeedTransactor: OptimismSequencerUptimeFeedTransactor{contract: contract}, OptimismSequencerUptimeFeedFilterer: OptimismSequencerUptimeFeedFilterer{contract: contract}}, nil +} + +type OptimismSequencerUptimeFeed struct { + address common.Address + abi abi.ABI + OptimismSequencerUptimeFeedCaller + OptimismSequencerUptimeFeedTransactor + OptimismSequencerUptimeFeedFilterer +} + +type OptimismSequencerUptimeFeedCaller struct { + contract *bind.BoundContract +} + +type OptimismSequencerUptimeFeedTransactor struct { + contract *bind.BoundContract +} + +type OptimismSequencerUptimeFeedFilterer struct { + contract *bind.BoundContract +} + +type OptimismSequencerUptimeFeedSession struct { + Contract *OptimismSequencerUptimeFeed + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type OptimismSequencerUptimeFeedCallerSession struct { + Contract *OptimismSequencerUptimeFeedCaller + CallOpts bind.CallOpts +} + +type OptimismSequencerUptimeFeedTransactorSession struct { + Contract *OptimismSequencerUptimeFeedTransactor + TransactOpts bind.TransactOpts +} + +type OptimismSequencerUptimeFeedRaw struct { + Contract *OptimismSequencerUptimeFeed +} + +type OptimismSequencerUptimeFeedCallerRaw struct { + Contract *OptimismSequencerUptimeFeedCaller +} + +type OptimismSequencerUptimeFeedTransactorRaw struct { + Contract *OptimismSequencerUptimeFeedTransactor +} + +func NewOptimismSequencerUptimeFeed(address common.Address, backend bind.ContractBackend) (*OptimismSequencerUptimeFeed, error) { + abi, err := abi.JSON(strings.NewReader(OptimismSequencerUptimeFeedABI)) + if err != nil { + return nil, err + } + contract, err := bindOptimismSequencerUptimeFeed(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeed{address: address, abi: abi, OptimismSequencerUptimeFeedCaller: OptimismSequencerUptimeFeedCaller{contract: contract}, OptimismSequencerUptimeFeedTransactor: OptimismSequencerUptimeFeedTransactor{contract: contract}, OptimismSequencerUptimeFeedFilterer: OptimismSequencerUptimeFeedFilterer{contract: contract}}, nil +} + +func NewOptimismSequencerUptimeFeedCaller(address common.Address, caller bind.ContractCaller) (*OptimismSequencerUptimeFeedCaller, error) { + contract, err := bindOptimismSequencerUptimeFeed(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedCaller{contract: contract}, nil +} + +func NewOptimismSequencerUptimeFeedTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismSequencerUptimeFeedTransactor, error) { + contract, err := bindOptimismSequencerUptimeFeed(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedTransactor{contract: contract}, nil +} + +func NewOptimismSequencerUptimeFeedFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismSequencerUptimeFeedFilterer, error) { + contract, err := bindOptimismSequencerUptimeFeed(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedFilterer{contract: contract}, nil +} + +func bindOptimismSequencerUptimeFeed(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := OptimismSequencerUptimeFeedMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismSequencerUptimeFeed.Contract.OptimismSequencerUptimeFeedCaller.contract.Call(opts, result, method, params...) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.OptimismSequencerUptimeFeedTransactor.contract.Transfer(opts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.OptimismSequencerUptimeFeedTransactor.contract.Transact(opts, method, params...) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismSequencerUptimeFeed.Contract.contract.Call(opts, result, method, params...) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.contract.Transfer(opts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.contract.Transact(opts, method, params...) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) CheckEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "checkEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) CheckEnabled() (bool, error) { + return _OptimismSequencerUptimeFeed.Contract.CheckEnabled(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) CheckEnabled() (bool, error) { + return _OptimismSequencerUptimeFeed.Contract.CheckEnabled(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) Decimals() (uint8, error) { + return _OptimismSequencerUptimeFeed.Contract.Decimals(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) Decimals() (uint8, error) { + return _OptimismSequencerUptimeFeed.Contract.Decimals(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) Description(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "description") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) Description() (string, error) { + return _OptimismSequencerUptimeFeed.Contract.Description(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) Description() (string, error) { + return _OptimismSequencerUptimeFeed.Contract.Description(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) GetAnswer(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "getAnswer", roundId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) GetAnswer(roundId *big.Int) (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.GetAnswer(&_OptimismSequencerUptimeFeed.CallOpts, roundId) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) GetAnswer(roundId *big.Int) (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.GetAnswer(&_OptimismSequencerUptimeFeed.CallOpts, roundId) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "getRoundData", _roundId) + + outstruct := new(GetRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _OptimismSequencerUptimeFeed.Contract.GetRoundData(&_OptimismSequencerUptimeFeed.CallOpts, _roundId) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _OptimismSequencerUptimeFeed.Contract.GetRoundData(&_OptimismSequencerUptimeFeed.CallOpts, _roundId) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) GetTimestamp(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "getTimestamp", roundId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) GetTimestamp(roundId *big.Int) (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.GetTimestamp(&_OptimismSequencerUptimeFeed.CallOpts, roundId) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) GetTimestamp(roundId *big.Int) (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.GetTimestamp(&_OptimismSequencerUptimeFeed.CallOpts, roundId) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) HasAccess(opts *bind.CallOpts, _user common.Address, _calldata []byte) (bool, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "hasAccess", _user, _calldata) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) HasAccess(_user common.Address, _calldata []byte) (bool, error) { + return _OptimismSequencerUptimeFeed.Contract.HasAccess(&_OptimismSequencerUptimeFeed.CallOpts, _user, _calldata) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) HasAccess(_user common.Address, _calldata []byte) (bool, error) { + return _OptimismSequencerUptimeFeed.Contract.HasAccess(&_OptimismSequencerUptimeFeed.CallOpts, _user, _calldata) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) L1Sender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "l1Sender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) L1Sender() (common.Address, error) { + return _OptimismSequencerUptimeFeed.Contract.L1Sender(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) L1Sender() (common.Address, error) { + return _OptimismSequencerUptimeFeed.Contract.L1Sender(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) LatestAnswer(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "latestAnswer") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) LatestAnswer() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.LatestAnswer(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) LatestAnswer() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.LatestAnswer(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) LatestRound(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "latestRound") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) LatestRound() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.LatestRound(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) LatestRound() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.LatestRound(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "latestRoundData") + + outstruct := new(LatestRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) LatestRoundData() (LatestRoundData, + + error) { + return _OptimismSequencerUptimeFeed.Contract.LatestRoundData(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) LatestRoundData() (LatestRoundData, + + error) { + return _OptimismSequencerUptimeFeed.Contract.LatestRoundData(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "latestTimestamp") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) LatestTimestamp() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.LatestTimestamp(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) LatestTimestamp() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.LatestTimestamp(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) Owner() (common.Address, error) { + return _OptimismSequencerUptimeFeed.Contract.Owner(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) Owner() (common.Address, error) { + return _OptimismSequencerUptimeFeed.Contract.Owner(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) TypeAndVersion() (string, error) { + return _OptimismSequencerUptimeFeed.Contract.TypeAndVersion(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) TypeAndVersion() (string, error) { + return _OptimismSequencerUptimeFeed.Contract.TypeAndVersion(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCaller) Version(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _OptimismSequencerUptimeFeed.contract.Call(opts, &out, "version") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) Version() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.Version(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedCallerSession) Version() (*big.Int, error) { + return _OptimismSequencerUptimeFeed.Contract.Version(&_OptimismSequencerUptimeFeed.CallOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "acceptOwnership") +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.AcceptOwnership(&_OptimismSequencerUptimeFeed.TransactOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.AcceptOwnership(&_OptimismSequencerUptimeFeed.TransactOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "addAccess", _user) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.AddAccess(&_OptimismSequencerUptimeFeed.TransactOpts, _user) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.AddAccess(&_OptimismSequencerUptimeFeed.TransactOpts, _user) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "disableAccessCheck") +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) DisableAccessCheck() (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.DisableAccessCheck(&_OptimismSequencerUptimeFeed.TransactOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) DisableAccessCheck() (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.DisableAccessCheck(&_OptimismSequencerUptimeFeed.TransactOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "enableAccessCheck") +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) EnableAccessCheck() (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.EnableAccessCheck(&_OptimismSequencerUptimeFeed.TransactOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) EnableAccessCheck() (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.EnableAccessCheck(&_OptimismSequencerUptimeFeed.TransactOpts) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "removeAccess", _user) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.RemoveAccess(&_OptimismSequencerUptimeFeed.TransactOpts, _user) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.RemoveAccess(&_OptimismSequencerUptimeFeed.TransactOpts, _user) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) TransferL1Sender(opts *bind.TransactOpts, newSender common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "transferL1Sender", newSender) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) TransferL1Sender(newSender common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.TransferL1Sender(&_OptimismSequencerUptimeFeed.TransactOpts, newSender) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) TransferL1Sender(newSender common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.TransferL1Sender(&_OptimismSequencerUptimeFeed.TransactOpts, newSender) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "transferOwnership", to) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.TransferOwnership(&_OptimismSequencerUptimeFeed.TransactOpts, to) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.TransferOwnership(&_OptimismSequencerUptimeFeed.TransactOpts, to) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactor) UpdateStatus(opts *bind.TransactOpts, status bool, timestamp uint64) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.contract.Transact(opts, "updateStatus", status, timestamp) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedSession) UpdateStatus(status bool, timestamp uint64) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.UpdateStatus(&_OptimismSequencerUptimeFeed.TransactOpts, status, timestamp) +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedTransactorSession) UpdateStatus(status bool, timestamp uint64) (*types.Transaction, error) { + return _OptimismSequencerUptimeFeed.Contract.UpdateStatus(&_OptimismSequencerUptimeFeed.TransactOpts, status, timestamp) +} + +type OptimismSequencerUptimeFeedAddedAccessIterator struct { + Event *OptimismSequencerUptimeFeedAddedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedAddedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedAddedAccessIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedAddedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedAddedAccess struct { + User common.Address + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterAddedAccess(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedAddedAccessIterator, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedAddedAccessIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "AddedAccess", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedAddedAccess) (event.Subscription, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedAddedAccess) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseAddedAccess(log types.Log) (*OptimismSequencerUptimeFeedAddedAccess, error) { + event := new(OptimismSequencerUptimeFeedAddedAccess) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedAnswerUpdatedIterator struct { + Event *OptimismSequencerUptimeFeedAnswerUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedAnswerUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedAnswerUpdatedIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedAnswerUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedAnswerUpdated struct { + Current *big.Int + RoundId *big.Int + UpdatedAt *big.Int + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*OptimismSequencerUptimeFeedAnswerUpdatedIterator, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedAnswerUpdatedIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "AnswerUpdated", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedAnswerUpdated) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "AnswerUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseAnswerUpdated(log types.Log) (*OptimismSequencerUptimeFeedAnswerUpdated, error) { + event := new(OptimismSequencerUptimeFeedAnswerUpdated) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "AnswerUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedCheckAccessDisabledIterator struct { + Event *OptimismSequencerUptimeFeedCheckAccessDisabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedCheckAccessDisabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedCheckAccessDisabledIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedCheckAccessDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedCheckAccessDisabled struct { + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterCheckAccessDisabled(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedCheckAccessDisabledIterator, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedCheckAccessDisabledIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "CheckAccessDisabled", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedCheckAccessDisabled) (event.Subscription, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedCheckAccessDisabled) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseCheckAccessDisabled(log types.Log) (*OptimismSequencerUptimeFeedCheckAccessDisabled, error) { + event := new(OptimismSequencerUptimeFeedCheckAccessDisabled) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedCheckAccessEnabledIterator struct { + Event *OptimismSequencerUptimeFeedCheckAccessEnabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedCheckAccessEnabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedCheckAccessEnabledIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedCheckAccessEnabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedCheckAccessEnabled struct { + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterCheckAccessEnabled(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedCheckAccessEnabledIterator, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedCheckAccessEnabledIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "CheckAccessEnabled", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedCheckAccessEnabled) (event.Subscription, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedCheckAccessEnabled) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseCheckAccessEnabled(log types.Log) (*OptimismSequencerUptimeFeedCheckAccessEnabled, error) { + event := new(OptimismSequencerUptimeFeedCheckAccessEnabled) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedL1SenderTransferredIterator struct { + Event *OptimismSequencerUptimeFeedL1SenderTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedL1SenderTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedL1SenderTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedL1SenderTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedL1SenderTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedL1SenderTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedL1SenderTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterL1SenderTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismSequencerUptimeFeedL1SenderTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "L1SenderTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedL1SenderTransferredIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "L1SenderTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchL1SenderTransferred(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedL1SenderTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "L1SenderTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedL1SenderTransferred) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "L1SenderTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseL1SenderTransferred(log types.Log) (*OptimismSequencerUptimeFeedL1SenderTransferred, error) { + event := new(OptimismSequencerUptimeFeedL1SenderTransferred) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "L1SenderTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedNewRoundIterator struct { + Event *OptimismSequencerUptimeFeedNewRound + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedNewRoundIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedNewRoundIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedNewRoundIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedNewRound struct { + RoundId *big.Int + StartedBy common.Address + StartedAt *big.Int + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*OptimismSequencerUptimeFeedNewRoundIterator, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedNewRoundIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "NewRound", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchNewRound(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedNewRound) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "NewRound", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseNewRound(log types.Log) (*OptimismSequencerUptimeFeedNewRound, error) { + event := new(OptimismSequencerUptimeFeedNewRound) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "NewRound", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator struct { + Event *OptimismSequencerUptimeFeedOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedOwnershipTransferRequested) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseOwnershipTransferRequested(log types.Log) (*OptimismSequencerUptimeFeedOwnershipTransferRequested, error) { + event := new(OptimismSequencerUptimeFeedOwnershipTransferRequested) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedOwnershipTransferredIterator struct { + Event *OptimismSequencerUptimeFeedOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismSequencerUptimeFeedOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedOwnershipTransferredIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedOwnershipTransferred) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseOwnershipTransferred(log types.Log) (*OptimismSequencerUptimeFeedOwnershipTransferred, error) { + event := new(OptimismSequencerUptimeFeedOwnershipTransferred) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedRemovedAccessIterator struct { + Event *OptimismSequencerUptimeFeedRemovedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedRemovedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedRemovedAccessIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedRemovedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedRemovedAccess struct { + User common.Address + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterRemovedAccess(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedRemovedAccessIterator, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedRemovedAccessIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "RemovedAccess", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedRemovedAccess) (event.Subscription, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedRemovedAccess) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseRemovedAccess(log types.Log) (*OptimismSequencerUptimeFeedRemovedAccess, error) { + event := new(OptimismSequencerUptimeFeedRemovedAccess) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedRoundUpdatedIterator struct { + Event *OptimismSequencerUptimeFeedRoundUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedRoundUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedRoundUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedRoundUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedRoundUpdatedIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedRoundUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedRoundUpdated struct { + Status *big.Int + UpdatedAt uint64 + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterRoundUpdated(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedRoundUpdatedIterator, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "RoundUpdated") + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedRoundUpdatedIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "RoundUpdated", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchRoundUpdated(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedRoundUpdated) (event.Subscription, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "RoundUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedRoundUpdated) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "RoundUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseRoundUpdated(log types.Log) (*OptimismSequencerUptimeFeedRoundUpdated, error) { + event := new(OptimismSequencerUptimeFeedRoundUpdated) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "RoundUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismSequencerUptimeFeedUpdateIgnoredIterator struct { + Event *OptimismSequencerUptimeFeedUpdateIgnored + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismSequencerUptimeFeedUpdateIgnoredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedUpdateIgnored) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismSequencerUptimeFeedUpdateIgnored) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismSequencerUptimeFeedUpdateIgnoredIterator) Error() error { + return it.fail +} + +func (it *OptimismSequencerUptimeFeedUpdateIgnoredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismSequencerUptimeFeedUpdateIgnored struct { + LatestStatus bool + LatestTimestamp uint64 + IncomingStatus bool + IncomingTimestamp uint64 + Raw types.Log +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) FilterUpdateIgnored(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedUpdateIgnoredIterator, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.FilterLogs(opts, "UpdateIgnored") + if err != nil { + return nil, err + } + return &OptimismSequencerUptimeFeedUpdateIgnoredIterator{contract: _OptimismSequencerUptimeFeed.contract, event: "UpdateIgnored", logs: logs, sub: sub}, nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) WatchUpdateIgnored(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedUpdateIgnored) (event.Subscription, error) { + + logs, sub, err := _OptimismSequencerUptimeFeed.contract.WatchLogs(opts, "UpdateIgnored") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismSequencerUptimeFeedUpdateIgnored) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "UpdateIgnored", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeedFilterer) ParseUpdateIgnored(log types.Log) (*OptimismSequencerUptimeFeedUpdateIgnored, error) { + event := new(OptimismSequencerUptimeFeedUpdateIgnored) + if err := _OptimismSequencerUptimeFeed.contract.UnpackLog(event, "UpdateIgnored", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} +type LatestRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} + +func (OptimismSequencerUptimeFeedAddedAccess) Topic() common.Hash { + return common.HexToHash("0x87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db4") +} + +func (OptimismSequencerUptimeFeedAnswerUpdated) Topic() common.Hash { + return common.HexToHash("0x0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f") +} + +func (OptimismSequencerUptimeFeedCheckAccessDisabled) Topic() common.Hash { + return common.HexToHash("0x3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638") +} + +func (OptimismSequencerUptimeFeedCheckAccessEnabled) Topic() common.Hash { + return common.HexToHash("0xaebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480") +} + +func (OptimismSequencerUptimeFeedL1SenderTransferred) Topic() common.Hash { + return common.HexToHash("0x8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18") +} + +func (OptimismSequencerUptimeFeedNewRound) Topic() common.Hash { + return common.HexToHash("0x0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271") +} + +func (OptimismSequencerUptimeFeedOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (OptimismSequencerUptimeFeedOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (OptimismSequencerUptimeFeedRemovedAccess) Topic() common.Hash { + return common.HexToHash("0x3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d1") +} + +func (OptimismSequencerUptimeFeedRoundUpdated) Topic() common.Hash { + return common.HexToHash("0x297642343ed2faefb1a411b39fc449eae700e54223d5d0499a9421eb6f68f66a") +} + +func (OptimismSequencerUptimeFeedUpdateIgnored) Topic() common.Hash { + return common.HexToHash("0xe4a6e16301740042c17431042adb8f60454c18fb5934dd4c456269c0dc388fdf") +} + +func (_OptimismSequencerUptimeFeed *OptimismSequencerUptimeFeed) Address() common.Address { + return _OptimismSequencerUptimeFeed.address +} + +type OptimismSequencerUptimeFeedInterface interface { + CheckEnabled(opts *bind.CallOpts) (bool, error) + + Decimals(opts *bind.CallOpts) (uint8, error) + + Description(opts *bind.CallOpts) (string, error) + + GetAnswer(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) + + GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) + + GetTimestamp(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) + + HasAccess(opts *bind.CallOpts, _user common.Address, _calldata []byte) (bool, error) + + L1Sender(opts *bind.CallOpts) (common.Address, error) + + LatestAnswer(opts *bind.CallOpts) (*big.Int, error) + + LatestRound(opts *bind.CallOpts) (*big.Int, error) + + LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) + + LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + Version(opts *bind.CallOpts) (*big.Int, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + TransferL1Sender(opts *bind.TransactOpts, newSender common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + UpdateStatus(opts *bind.TransactOpts, status bool, timestamp uint64) (*types.Transaction, error) + + FilterAddedAccess(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedAddedAccessIterator, error) + + WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedAddedAccess) (event.Subscription, error) + + ParseAddedAccess(log types.Log) (*OptimismSequencerUptimeFeedAddedAccess, error) + + FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*OptimismSequencerUptimeFeedAnswerUpdatedIterator, error) + + WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) + + ParseAnswerUpdated(log types.Log) (*OptimismSequencerUptimeFeedAnswerUpdated, error) + + FilterCheckAccessDisabled(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedCheckAccessDisabledIterator, error) + + WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedCheckAccessDisabled) (event.Subscription, error) + + ParseCheckAccessDisabled(log types.Log) (*OptimismSequencerUptimeFeedCheckAccessDisabled, error) + + FilterCheckAccessEnabled(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedCheckAccessEnabledIterator, error) + + WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedCheckAccessEnabled) (event.Subscription, error) + + ParseCheckAccessEnabled(log types.Log) (*OptimismSequencerUptimeFeedCheckAccessEnabled, error) + + FilterL1SenderTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismSequencerUptimeFeedL1SenderTransferredIterator, error) + + WatchL1SenderTransferred(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedL1SenderTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1SenderTransferred(log types.Log) (*OptimismSequencerUptimeFeedL1SenderTransferred, error) + + FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*OptimismSequencerUptimeFeedNewRoundIterator, error) + + WatchNewRound(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) + + ParseNewRound(log types.Log) (*OptimismSequencerUptimeFeedNewRound, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismSequencerUptimeFeedOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*OptimismSequencerUptimeFeedOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismSequencerUptimeFeedOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*OptimismSequencerUptimeFeedOwnershipTransferred, error) + + FilterRemovedAccess(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedRemovedAccessIterator, error) + + WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedRemovedAccess) (event.Subscription, error) + + ParseRemovedAccess(log types.Log) (*OptimismSequencerUptimeFeedRemovedAccess, error) + + FilterRoundUpdated(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedRoundUpdatedIterator, error) + + WatchRoundUpdated(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedRoundUpdated) (event.Subscription, error) + + ParseRoundUpdated(log types.Log) (*OptimismSequencerUptimeFeedRoundUpdated, error) + + FilterUpdateIgnored(opts *bind.FilterOpts) (*OptimismSequencerUptimeFeedUpdateIgnoredIterator, error) + + WatchUpdateIgnored(opts *bind.WatchOpts, sink chan<- *OptimismSequencerUptimeFeedUpdateIgnored) (event.Subscription, error) + + ParseUpdateIgnored(log types.Log) (*OptimismSequencerUptimeFeedUpdateIgnored, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/v1_0_0/optimism_sequencer_uptime_feed/optimism_sequencer_uptime_feed_metadata.go b/gethwrappers/l2ep/generated/v1_0_0/optimism_sequencer_uptime_feed/optimism_sequencer_uptime_feed_metadata.go new file mode 100644 index 0000000000..c2f052f63d --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/optimism_sequencer_uptime_feed/optimism_sequencer_uptime_feed_metadata.go @@ -0,0 +1,7 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + + +package optimism_sequencer_uptime_feed + +var SolidityStandardInput = "{\"version\":\"v0.8.24+commit.e11b9ed9\",\"language\":\"Solidity\",\"settings\":{\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":true,\"bytecodeHash\":\"none\",\"useLiteralContent\":false},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"outputSelection\":{\"node_modules/@eth-optimism/contracts/L2/messaging/IL2CrossDomainMessenger.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"node_modules/@eth-optimism/contracts/libraries/bridge/ICrossDomainMessenger.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/base/BaseSequencerUptimeFeed.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/ISequencerUptimeFeed.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/optimism/OptimismSequencerUptimeFeed.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/SimpleReadAccessController.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/SimpleWriteAccessController.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AccessControllerInterface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AggregatorInterface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]}},\"remappings\":[\"forge-std/=src/v0.8/vendor/forge-std/src/\",\"@openzeppelin/contracts@4.7.3/=node_modules/@openzeppelin/contracts-4.7.3/\",\"@openzeppelin/contracts@4.8.3/=node_modules/@openzeppelin/contracts-4.8.3/\",\"@openzeppelin/contracts@4.9.6/=node_modules/@openzeppelin/contracts-4.9.6/\",\"@openzeppelin/contracts@5.0.2/=node_modules/@openzeppelin/contracts-5.0.2/\",\"@openzeppelin/contracts@5.1.0/=node_modules/@openzeppelin/contracts-5.1.0/\",\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@arbitrum/=node_modules/@arbitrum/\",\"hardhat/=node_modules/hardhat/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@zksync/=node_modules/@zksync/\"],\"viaIR\":false},\"sources\":{\"node_modules/@eth-optimism/contracts/L2/messaging/IL2CrossDomainMessenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\n/* Interface Imports */\\nimport { ICrossDomainMessenger } from \\\"../../libraries/bridge/ICrossDomainMessenger.sol\\\";\\n\\n/**\\n * @title IL2CrossDomainMessenger\\n */\\ninterface IL2CrossDomainMessenger is ICrossDomainMessenger {\\n /********************\\n * Public Functions *\\n ********************/\\n\\n /**\\n * Relays a cross domain message to a contract.\\n * @param _target Target contract address.\\n * @param _sender Message sender address.\\n * @param _message Message to send to the target.\\n * @param _messageNonce Nonce for the provided message.\\n */\\n function relayMessage(\\n address _target,\\n address _sender,\\n bytes memory _message,\\n uint256 _messageNonce\\n ) external;\\n}\\n\"},\"node_modules/@eth-optimism/contracts/libraries/bridge/ICrossDomainMessenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity \\u003e0.5.0 \\u003c0.9.0;\\n\\n/**\\n * @title ICrossDomainMessenger\\n */\\ninterface ICrossDomainMessenger {\\n /**********\\n * Events *\\n **********/\\n\\n event SentMessage(\\n address indexed target,\\n address sender,\\n bytes message,\\n uint256 messageNonce,\\n uint256 gasLimit\\n );\\n event RelayedMessage(bytes32 indexed msgHash);\\n event FailedRelayedMessage(bytes32 indexed msgHash);\\n\\n /*************\\n * Variables *\\n *************/\\n\\n function xDomainMessageSender() external view returns (address);\\n\\n /********************\\n * Public Functions *\\n ********************/\\n\\n /**\\n * Sends a cross domain message to the target messenger.\\n * @param _target Target contract address.\\n * @param _message Message to send to the target.\\n * @param _gasLimit Gas limit for the provided message.\\n */\\n function sendMessage(\\n address _target,\\n bytes calldata _message,\\n uint32 _gasLimit\\n ) external;\\n}\\n\"},\"src/v0.8/l2ep/base/BaseSequencerUptimeFeed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport {AggregatorInterface} from \\\"../../shared/interfaces/AggregatorInterface.sol\\\";\\n\\nimport {AggregatorV2V3Interface} from \\\"../../shared/interfaces/AggregatorV2V3Interface.sol\\\";\\nimport {AggregatorV3Interface} from \\\"../../shared/interfaces/AggregatorV3Interface.sol\\\";\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\n\\nimport {ISequencerUptimeFeed} from \\\"./../interfaces/ISequencerUptimeFeed.sol\\\";\\n\\nimport {SimpleReadAccessController} from \\\"../../shared/access/SimpleReadAccessController.sol\\\";\\n\\n/// @title L2 sequencer uptime status aggregator\\n/// @notice L2 contract that receives status updates from a specific L1 address,\\n/// records a new answer if the status changed\\nabstract contract BaseSequencerUptimeFeed is\\n ITypeAndVersion,\\n AggregatorV2V3Interface,\\n ISequencerUptimeFeed,\\n SimpleReadAccessController\\n{\\n /// @dev Round info for uptime history\\n struct Round {\\n uint64 startedAt; // ─╮ The timestamp at which the round started\\n uint64 updatedAt; // │ The timestamp at which the round was updated\\n bool status; // ──────╯ The sequencer status for the round\\n }\\n\\n struct FeedState {\\n uint80 latestRoundId; // ─╮ The ID of the latest round\\n uint64 startedAt; // │ The date at which the latest round started\\n uint64 updatedAt; // │ The date at which the latest round was updated\\n bool latestStatus; // ────╯ The status of the latest round\\n }\\n\\n /// @notice Sender is not the L2 messenger\\n error InvalidSender();\\n /// @notice Replacement for AggregatorV3Interface \\\"No data present\\\"\\n error NoDataPresent();\\n\\n event L1SenderTransferred(address indexed from, address indexed to);\\n /// @dev Emitted when an `updateStatus` call is ignored due to unchanged status or stale timestamp\\n event UpdateIgnored(bool latestStatus, uint64 latestTimestamp, bool incomingStatus, uint64 incomingTimestamp);\\n /// @dev Emitted when a updateStatus is called without the status changing\\n event RoundUpdated(int256 status, uint64 updatedAt);\\n\\n // solhint-disable-next-line chainlink-solidity/all-caps-constant-storage-variables\\n uint8 public constant override decimals = 0;\\n // solhint-disable-next-line chainlink-solidity/all-caps-constant-storage-variables\\n string public constant override description = \\\"L2 Sequencer Uptime Status Feed\\\";\\n // solhint-disable-next-line chainlink-solidity/all-caps-constant-storage-variables\\n uint256 public constant override version = 1;\\n\\n /// @dev L1 address\\n address private s_l1Sender;\\n /// @dev s_latestRoundId == 0 means this contract is uninitialized.\\n FeedState private s_feedState = FeedState({latestRoundId: 0, latestStatus: false, startedAt: 0, updatedAt: 0});\\n mapping(uint80 roundId =\\u003e Round round) private s_rounds;\\n\\n /// @param l1SenderAddress Address of the L1 contract that is permissioned to call this contract\\n /// @param initialStatus The initial status of the feed\\n constructor(address l1SenderAddress, bool initialStatus) {\\n // We need to allow l1SenderAddress to be zero because this contract is deployed first\\n // After deploying the validator contract, this contract will be updated with the correct L1 sender address\\n _setL1Sender(l1SenderAddress);\\n\\n // Initialise roundId == 1 as the first round\\n _recordRound(1, initialStatus, uint64(block.timestamp));\\n }\\n\\n /// @notice Check if a roundId is valid in this current contract state\\n /// @dev Mainly used for AggregatorV2V3Interface functions\\n /// @param roundId Round ID to check\\n function _isValidRound(\\n uint256 roundId\\n ) private view returns (bool) {\\n return roundId \\u003e 0 \\u0026\\u0026 roundId \\u003c= type(uint80).max \\u0026\\u0026 s_feedState.latestRoundId \\u003e= roundId;\\n }\\n\\n /// @return L1 sender address\\n function l1Sender() public view virtual returns (address) {\\n return s_l1Sender;\\n }\\n\\n /// @notice Set the allowed L1 sender for this contract to a new L1 sender\\n /// @dev Can be disabled by setting the L1 sender as `address(0)`. Accessible only by owner.\\n /// @param newSender new L1 sender that will be allowed to call `updateStatus` on this contract\\n function transferL1Sender(\\n address newSender\\n ) external virtual onlyOwner {\\n _setL1Sender(newSender);\\n }\\n\\n /// @notice internal method that stores the L1 sender\\n function _setL1Sender(\\n address newSender\\n ) internal {\\n address oldSender = s_l1Sender;\\n if (oldSender != newSender) {\\n s_l1Sender = newSender;\\n emit L1SenderTransferred(oldSender, newSender);\\n }\\n }\\n\\n /// @dev Returns an AggregatorV2V3Interface compatible answer from status flag\\n /// @param status The status flag to convert to an aggregator-compatible answer\\n function _getStatusAnswer(\\n bool status\\n ) internal pure returns (int256) {\\n return status ? int256(1) : int256(0);\\n }\\n\\n /// @notice Helper function to record a round and set the latest feed state.\\n /// @param roundId The round ID to record\\n /// @param status Sequencer status\\n /// @param timestamp The L1 block timestamp of status update\\n function _recordRound(uint80 roundId, bool status, uint64 timestamp) internal {\\n s_rounds[roundId] = Round({status: status, startedAt: timestamp, updatedAt: uint64(block.timestamp)});\\n s_feedState = FeedState({\\n latestRoundId: roundId,\\n latestStatus: status,\\n startedAt: timestamp,\\n updatedAt: uint64(block.timestamp)\\n });\\n\\n emit NewRound(roundId, msg.sender, timestamp);\\n emit AnswerUpdated(_getStatusAnswer(status), roundId, timestamp);\\n }\\n\\n /// @notice Helper function to update when a round was last updated\\n /// @param roundId The round ID to update\\n /// @param status Sequencer status\\n function _updateRound(uint80 roundId, bool status) internal {\\n s_rounds[roundId].updatedAt = uint64(block.timestamp);\\n s_feedState.updatedAt = uint64(block.timestamp);\\n emit RoundUpdated(_getStatusAnswer(status), uint64(block.timestamp));\\n }\\n\\n function _getFeedState() internal view returns (FeedState memory) {\\n return s_feedState;\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function latestAnswer() external view override checkAccess returns (int256) {\\n return _getStatusAnswer(s_feedState.latestStatus);\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function latestTimestamp() external view override checkAccess returns (uint256) {\\n return s_feedState.startedAt;\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function latestRound() external view override checkAccess returns (uint256) {\\n return s_feedState.latestRoundId;\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function getAnswer(\\n uint256 roundId\\n ) external view override checkAccess returns (int256) {\\n if (!_isValidRound(roundId)) {\\n revert NoDataPresent();\\n }\\n\\n return _getStatusAnswer(s_rounds[uint80(roundId)].status);\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function getTimestamp(\\n uint256 roundId\\n ) external view override checkAccess returns (uint256) {\\n if (!_isValidRound(roundId)) {\\n revert NoDataPresent();\\n }\\n\\n return s_rounds[uint80(roundId)].startedAt;\\n }\\n\\n /// @notice Record a new status and timestamp if it has changed since the last round.\\n /// @dev This function will revert if not called from `l1Sender` via the L1-\\u003eL2 messenger.\\n /// @param status Sequencer status\\n /// @param timestamp Block timestamp of status update\\n function updateStatus(bool status, uint64 timestamp) external override {\\n _validateSender(s_l1Sender);\\n\\n FeedState memory feedState = _getFeedState();\\n // Ignore if latest recorded timestamp is newer\\n if (feedState.startedAt \\u003e timestamp) {\\n emit UpdateIgnored(feedState.latestStatus, feedState.startedAt, status, timestamp);\\n return;\\n }\\n\\n if (feedState.latestStatus == status) {\\n _updateRound(feedState.latestRoundId, status);\\n } else {\\n feedState.latestRoundId += 1;\\n _recordRound(feedState.latestRoundId, status, timestamp);\\n }\\n }\\n\\n function _validateSender(\\n address l1Sender\\n ) internal virtual;\\n\\n /// @inheritdoc AggregatorV3Interface\\n function getRoundData(\\n uint80 _roundId\\n )\\n public\\n view\\n override\\n checkAccess\\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)\\n {\\n if (!_isValidRound(_roundId)) {\\n revert NoDataPresent();\\n }\\n\\n Round storage round = s_rounds[_roundId];\\n\\n return (_roundId, _getStatusAnswer(round.status), uint256(round.startedAt), uint256(round.updatedAt), _roundId);\\n }\\n\\n /// @inheritdoc AggregatorV3Interface\\n function latestRoundData()\\n external\\n view\\n override\\n checkAccess\\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)\\n {\\n FeedState storage feedState = s_feedState;\\n\\n return (\\n feedState.latestRoundId,\\n _getStatusAnswer(feedState.latestStatus),\\n feedState.startedAt,\\n feedState.updatedAt,\\n feedState.latestRoundId\\n );\\n }\\n}\\n\"},\"src/v0.8/l2ep/interfaces/ISequencerUptimeFeed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ISequencerUptimeFeed {\\n function updateStatus(bool status, uint64 timestamp) external;\\n}\\n\"},\"src/v0.8/l2ep/optimism/OptimismSequencerUptimeFeed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport {BaseSequencerUptimeFeed} from \\\"../base/BaseSequencerUptimeFeed.sol\\\";\\n\\nimport {IL2CrossDomainMessenger} from \\\"@eth-optimism/contracts/L2/messaging/IL2CrossDomainMessenger.sol\\\";\\n\\n/**\\n * @title OptimismSequencerUptimeFeed - L2 sequencer uptime status aggregator\\n * @notice L2 contract that receives status updates from a specific L1 address,\\n * records a new answer if the status changed\\n */\\ncontract OptimismSequencerUptimeFeed is BaseSequencerUptimeFeed {\\n string public constant override typeAndVersion = \\\"OptimismSequencerUptimeFeed 1.1.0-dev\\\";\\n\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n IL2CrossDomainMessenger private immutable s_l2CrossDomainMessenger;\\n\\n /**\\n * @param l1SenderAddress Address of the L1 contract that is permissioned to call this contract\\n * @param l2CrossDomainMessengerAddr Address of the L2CrossDomainMessenger contract\\n * @param initialStatus The initial status of the feed\\n */\\n constructor(\\n address l1SenderAddress,\\n address l2CrossDomainMessengerAddr,\\n bool initialStatus\\n ) BaseSequencerUptimeFeed(l1SenderAddress, initialStatus) {\\n s_l2CrossDomainMessenger = IL2CrossDomainMessenger(l2CrossDomainMessengerAddr);\\n }\\n\\n function _validateSender(\\n address l1Sender\\n ) internal view override {\\n if (msg.sender != address(s_l2CrossDomainMessenger) || s_l2CrossDomainMessenger.xDomainMessageSender() != l1Sender)\\n {\\n revert InvalidSender();\\n }\\n }\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(\\n address newOwner\\n ) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(\\n address to\\n ) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(\\n address to\\n ) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/access/SimpleReadAccessController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {SimpleWriteAccessController} from \\\"./SimpleWriteAccessController.sol\\\";\\n\\n/// @title SimpleReadAccessController\\n/// @notice Gives access to:\\n/// - any externally owned account (note that off-chain actors can always read\\n/// any contract storage regardless of on-chain access control measures, so this\\n/// does not weaken the access control while improving usability)\\n/// - accounts explicitly added to an access list\\n/// @dev SimpleReadAccessController is not suitable for access controlling writes\\n/// since it grants any externally owned account access! See\\n/// SimpleWriteAccessController for that.\\ncontract SimpleReadAccessController is SimpleWriteAccessController {\\n /// @notice Returns the access of an address\\n /// @param _user The address to query\\n function hasAccess(address _user, bytes memory _calldata) public view virtual override returns (bool) {\\n // solhint-disable-next-line avoid-tx-origin\\n return super.hasAccess(_user, _calldata) || _user == tx.origin;\\n }\\n}\\n\"},\"src/v0.8/shared/access/SimpleWriteAccessController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {AccessControllerInterface} from \\\"../interfaces/AccessControllerInterface.sol\\\";\\nimport {ConfirmedOwner} from \\\"./ConfirmedOwner.sol\\\";\\n\\n/// @title SimpleWriteAccessController\\n/// @notice Gives access to accounts explicitly added to an access list by the controller's owner.\\n/// @dev does not make any special permissions for externally, see SimpleReadAccessController for that.\\ncontract SimpleWriteAccessController is AccessControllerInterface, ConfirmedOwner {\\n bool public checkEnabled;\\n mapping(address =\\u003e bool) internal s_accessList;\\n\\n event AddedAccess(address user);\\n event RemovedAccess(address user);\\n event CheckAccessEnabled();\\n event CheckAccessDisabled();\\n\\n constructor() ConfirmedOwner(msg.sender) {\\n checkEnabled = true;\\n }\\n\\n /// @notice Returns the access of an address\\n /// @param _user The address to query\\n function hasAccess(address _user, bytes memory) public view virtual override returns (bool) {\\n return s_accessList[_user] || !checkEnabled;\\n }\\n\\n /// @notice Adds an address to the access list\\n /// @param _user The address to add\\n function addAccess(\\n address _user\\n ) external onlyOwner {\\n if (!s_accessList[_user]) {\\n s_accessList[_user] = true;\\n\\n emit AddedAccess(_user);\\n }\\n }\\n\\n /// @notice Removes an address from the access list\\n /// @param _user The address to remove\\n function removeAccess(\\n address _user\\n ) external onlyOwner {\\n if (s_accessList[_user]) {\\n s_accessList[_user] = false;\\n\\n emit RemovedAccess(_user);\\n }\\n }\\n\\n /// @notice makes the access check enforced\\n function enableAccessCheck() external onlyOwner {\\n if (!checkEnabled) {\\n checkEnabled = true;\\n\\n emit CheckAccessEnabled();\\n }\\n }\\n\\n /// @notice makes the access check unenforced\\n function disableAccessCheck() external onlyOwner {\\n if (checkEnabled) {\\n checkEnabled = false;\\n\\n emit CheckAccessDisabled();\\n }\\n }\\n\\n /// @dev reverts if the caller does not have access\\n modifier checkAccess() {\\n // solhint-disable-next-line gas-custom-errors\\n require(hasAccess(msg.sender, msg.data), \\\"No access\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/interfaces/AccessControllerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AccessControllerInterface {\\n function hasAccess(address user, bytes calldata data) external view returns (bool);\\n}\\n\"},\"src/v0.8/shared/interfaces/AggregatorInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AggregatorInterface {\\n function latestAnswer() external view returns (int256);\\n\\n function latestTimestamp() external view returns (uint256);\\n\\n function latestRound() external view returns (uint256);\\n\\n function getAnswer(\\n uint256 roundId\\n ) external view returns (int256);\\n\\n function getTimestamp(\\n uint256 roundId\\n ) external view returns (uint256);\\n\\n event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\\n\\n event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);\\n}\\n\"},\"src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {AggregatorInterface} from \\\"./AggregatorInterface.sol\\\";\\nimport {AggregatorV3Interface} from \\\"./AggregatorV3Interface.sol\\\";\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AggregatorV2V3Interface is AggregatorInterface, AggregatorV3Interface {}\\n\"},\"src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AggregatorV3Interface {\\n function decimals() external view returns (uint8);\\n\\n function description() external view returns (string memory);\\n\\n function version() external view returns (uint256);\\n\\n function getRoundData(\\n uint80 _roundId\\n ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);\\n\\n function latestRoundData()\\n external\\n view\\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);\\n}\\n\"},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(\\n address recipient\\n ) external;\\n\\n function acceptOwnership() external;\\n}\\n\"},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ITypeAndVersion {\\n function typeAndVersion() external pure returns (string memory);\\n}\\n\"}}}" diff --git a/gethwrappers/l2ep/generated/v1_0_0/optimism_validator/optimism_validator.go b/gethwrappers/l2ep/generated/v1_0_0/optimism_validator/optimism_validator.go new file mode 100644 index 0000000000..ba4a45cbeb --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/optimism_validator/optimism_validator.go @@ -0,0 +1,1656 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package optimism_validator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var OptimismValidatorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"l1CrossDomainMessengerAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2UptimeFeedAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_UPTIME_FEED_ADDR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validate\",\"inputs\":[{\"name\":\"previousRoundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"previousAnswer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"currentRoundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"currentAnswer\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AddedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConfigUpdated\",\"inputs\":[{\"name\":\"l1CrossDomainMessengerAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"l2UptimeFeedAddr\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GasLimitUpdated\",\"inputs\":[{\"name\":\"gasLimit\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemovedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatedStatus\",\"inputs\":[{\"name\":\"previousRoundId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"previousAnswer\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"currentRoundId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"currentAnswer\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"L1CrossDomainMessengerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2UptimeFeedAddrZero\",\"inputs\":[]}]", + Bin: "0x60c060405234801562000010575f80fd5b50604051620010f6380380620010f6833981016040819052620000339162000266565b82828233805f816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620001a0565b50506001805460ff60a01b1916600160a01b179055506001600160a01b038316620000fc57604051639c9087c160e01b815260040160405180910390fd5b6001600160a01b0382166200012457604051632ef8090560e01b815260040160405180910390fd5b6001600160a01b03838116608081905290831660a08190526003805463ffffffff191663ffffffff8516908117909155604080519384526020840192909252908201527f50ac1a0ab48727faf611b51ad202bb80d8cc334ca8e64154c3d430fbb23040cb9060600160405180910390a1505050505050620002b8565b336001600160a01b03821603620001fa5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b038116811462000261575f80fd5b919050565b5f805f6060848603121562000279575f80fd5b62000284846200024a565b925062000294602085016200024a565b9150604084015163ffffffff81168114620002ad575f80fd5b809150509250925092565b60805160a051610e0e620002e85f395f8181610119015261097501525f818161031c01526109480152610e0e5ff3fe6080604052600436106100e7575f3560e01c80638038e4a111610087578063beed9b5111610057578063beed9b51146102bb578063dc7f0124146102da578063eda066f71461030b578063f2fde38b1461033e575f80fd5b80638038e4a1146102405780638823da6c146102545780638da5cb5b14610273578063a118f2491461029c575f80fd5b80631a93d1c3116100c25780631a93d1c3146101ba57806352d84c62146101de5780636b14daf8146101fd57806379ba50971461022c575f80fd5b80630a756983146100f2578063122555ff14610108578063181f5a7714610165575f80fd5b366100ee57005b5f80fd5b3480156100fd575f80fd5b5061010661035d565b005b348015610113575f80fd5b5061013b7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b348015610170575f80fd5b506101ad6040518060400160405280601b81526020017f4f7074696d69736d56616c696461746f7220312e312e302d646576000000000081525081565b60405161015c9190610c11565b3480156101c5575f80fd5b5060035460405163ffffffff909116815260200161015c565b3480156101e9575f80fd5b506101066101f8366004610c23565b6103db565b348015610208575f80fd5b5061021c610217366004610c9b565b61044d565b604051901515815260200161015c565b348015610237575f80fd5b506101066104a2565b34801561024b575f80fd5b506101066105a3565b34801561025f575f80fd5b5061010661026e366004610d75565b610636565b34801561027e575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff1661013b565b3480156102a7575f80fd5b506101066102b6366004610d75565b6106e9565b3480156102c6575f80fd5b5061021c6102d5366004610d8e565b61079b565b3480156102e5575f80fd5b5060015461021c9074010000000000000000000000000000000000000000900460ff1681565b348015610316575f80fd5b5061013b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610349575f80fd5b50610106610358366004610d75565b610a2b565b610365610a3c565b60015474010000000000000000000000000000000000000000900460ff16156103d957600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638905f90a15b565b6103e3610a3c565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff83169081179091556040519081527f501c51f34bf3d8589156f7fd37055e69375b40034d9f99365cb3290b5d983c91906020015b60405180910390a150565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081205460ff168061049b575060015474010000000000000000000000000000000000000000900460ff16155b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6105ab610a3c565b60015474010000000000000000000000000000000000000000900460ff166103d957600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480905f90a1565b61063e610a3c565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff16156106e65773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d19101610442565b50565b6106f1610a3c565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff166106e65773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49101610442565b5f6107db335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061044d92505050565b610841576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161051f565b60405160018314602482018190524267ffffffffffffffff811660448401527fed8378f500000000000000000000000000000000000000000000000000000000925f908490606401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925260035491517f3dbb202b00000000000000000000000000000000000000000000000000000000815290925073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001691633dbb202b916109a6917f000000000000000000000000000000000000000000000000000000000000000091869163ffffffff1690600401610dbd565b5f604051808303815f87803b1580156109bd575f80fd5b505af11580156109cf573d5f803e3d5ffd5b5050604080518c8152602081018c90529081018a9052606081018990527fdf570e5bda6b7c0c0415ceeafd5f9321908b69023cae41e030a6df91cad90b039250608001905060405180910390a150600198975050505050505050565b610a33610a3c565b6106e681610abc565b5f5473ffffffffffffffffffffffffffffffffffffffff1633146103d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161051f565b3373ffffffffffffffffffffffffffffffffffffffff821603610b3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161051f565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f81518084525f5b81811015610bd457602081850181015186830182015201610bb8565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f61049b6020830184610bb0565b5f60208284031215610c33575f80fd5b813563ffffffff8116811461049b575f80fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610c69575f80fd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610cac575f80fd5b610cb583610c46565b9150602083013567ffffffffffffffff80821115610cd1575f80fd5b818501915085601f830112610ce4575f80fd5b813581811115610cf657610cf6610c6e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610d3c57610d3c610c6e565b81604052828152886020848701011115610d54575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215610d85575f80fd5b61049b82610c46565b5f805f8060808587031215610da1575f80fd5b5050823594602084013594506040840135936060013592509050565b73ffffffffffffffffffffffffffffffffffffffff84168152606060208201525f610deb6060830185610bb0565b905063ffffffff8316604083015294935050505056fea164736f6c6343000818000a", +} + +var OptimismValidatorABI = OptimismValidatorMetaData.ABI + +var OptimismValidatorBin = OptimismValidatorMetaData.Bin + +func DeployOptimismValidator(auth *bind.TransactOpts, backend bind.ContractBackend, l1CrossDomainMessengerAddress common.Address, l2UptimeFeedAddr common.Address, gasLimit uint32) (common.Address, *types.Transaction, *OptimismValidator, error) { + parsed, err := OptimismValidatorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OptimismValidatorBin), backend, l1CrossDomainMessengerAddress, l2UptimeFeedAddr, gasLimit) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &OptimismValidator{address: address, abi: *parsed, OptimismValidatorCaller: OptimismValidatorCaller{contract: contract}, OptimismValidatorTransactor: OptimismValidatorTransactor{contract: contract}, OptimismValidatorFilterer: OptimismValidatorFilterer{contract: contract}}, nil +} + +type OptimismValidator struct { + address common.Address + abi abi.ABI + OptimismValidatorCaller + OptimismValidatorTransactor + OptimismValidatorFilterer +} + +type OptimismValidatorCaller struct { + contract *bind.BoundContract +} + +type OptimismValidatorTransactor struct { + contract *bind.BoundContract +} + +type OptimismValidatorFilterer struct { + contract *bind.BoundContract +} + +type OptimismValidatorSession struct { + Contract *OptimismValidator + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type OptimismValidatorCallerSession struct { + Contract *OptimismValidatorCaller + CallOpts bind.CallOpts +} + +type OptimismValidatorTransactorSession struct { + Contract *OptimismValidatorTransactor + TransactOpts bind.TransactOpts +} + +type OptimismValidatorRaw struct { + Contract *OptimismValidator +} + +type OptimismValidatorCallerRaw struct { + Contract *OptimismValidatorCaller +} + +type OptimismValidatorTransactorRaw struct { + Contract *OptimismValidatorTransactor +} + +func NewOptimismValidator(address common.Address, backend bind.ContractBackend) (*OptimismValidator, error) { + abi, err := abi.JSON(strings.NewReader(OptimismValidatorABI)) + if err != nil { + return nil, err + } + contract, err := bindOptimismValidator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &OptimismValidator{address: address, abi: abi, OptimismValidatorCaller: OptimismValidatorCaller{contract: contract}, OptimismValidatorTransactor: OptimismValidatorTransactor{contract: contract}, OptimismValidatorFilterer: OptimismValidatorFilterer{contract: contract}}, nil +} + +func NewOptimismValidatorCaller(address common.Address, caller bind.ContractCaller) (*OptimismValidatorCaller, error) { + contract, err := bindOptimismValidator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &OptimismValidatorCaller{contract: contract}, nil +} + +func NewOptimismValidatorTransactor(address common.Address, transactor bind.ContractTransactor) (*OptimismValidatorTransactor, error) { + contract, err := bindOptimismValidator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &OptimismValidatorTransactor{contract: contract}, nil +} + +func NewOptimismValidatorFilterer(address common.Address, filterer bind.ContractFilterer) (*OptimismValidatorFilterer, error) { + contract, err := bindOptimismValidator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &OptimismValidatorFilterer{contract: contract}, nil +} + +func bindOptimismValidator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := OptimismValidatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_OptimismValidator *OptimismValidatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismValidator.Contract.OptimismValidatorCaller.contract.Call(opts, result, method, params...) +} + +func (_OptimismValidator *OptimismValidatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismValidator.Contract.OptimismValidatorTransactor.contract.Transfer(opts) +} + +func (_OptimismValidator *OptimismValidatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismValidator.Contract.OptimismValidatorTransactor.contract.Transact(opts, method, params...) +} + +func (_OptimismValidator *OptimismValidatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _OptimismValidator.Contract.contract.Call(opts, result, method, params...) +} + +func (_OptimismValidator *OptimismValidatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismValidator.Contract.contract.Transfer(opts) +} + +func (_OptimismValidator *OptimismValidatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _OptimismValidator.Contract.contract.Transact(opts, method, params...) +} + +func (_OptimismValidator *OptimismValidatorCaller) L1CROSSDOMAINMESSENGERADDRESS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "L1_CROSS_DOMAIN_MESSENGER_ADDRESS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) L1CROSSDOMAINMESSENGERADDRESS() (common.Address, error) { + return _OptimismValidator.Contract.L1CROSSDOMAINMESSENGERADDRESS(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) L1CROSSDOMAINMESSENGERADDRESS() (common.Address, error) { + return _OptimismValidator.Contract.L1CROSSDOMAINMESSENGERADDRESS(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCaller) L2UPTIMEFEEDADDR(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "L2_UPTIME_FEED_ADDR") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) L2UPTIMEFEEDADDR() (common.Address, error) { + return _OptimismValidator.Contract.L2UPTIMEFEEDADDR(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) L2UPTIMEFEEDADDR() (common.Address, error) { + return _OptimismValidator.Contract.L2UPTIMEFEEDADDR(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCaller) CheckEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "checkEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) CheckEnabled() (bool, error) { + return _OptimismValidator.Contract.CheckEnabled(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) CheckEnabled() (bool, error) { + return _OptimismValidator.Contract.CheckEnabled(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCaller) GetGasLimit(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "getGasLimit") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) GetGasLimit() (uint32, error) { + return _OptimismValidator.Contract.GetGasLimit(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) GetGasLimit() (uint32, error) { + return _OptimismValidator.Contract.GetGasLimit(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCaller) HasAccess(opts *bind.CallOpts, _user common.Address, arg1 []byte) (bool, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "hasAccess", _user, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) HasAccess(_user common.Address, arg1 []byte) (bool, error) { + return _OptimismValidator.Contract.HasAccess(&_OptimismValidator.CallOpts, _user, arg1) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) HasAccess(_user common.Address, arg1 []byte) (bool, error) { + return _OptimismValidator.Contract.HasAccess(&_OptimismValidator.CallOpts, _user, arg1) +} + +func (_OptimismValidator *OptimismValidatorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) Owner() (common.Address, error) { + return _OptimismValidator.Contract.Owner(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) Owner() (common.Address, error) { + return _OptimismValidator.Contract.Owner(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _OptimismValidator.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_OptimismValidator *OptimismValidatorSession) TypeAndVersion() (string, error) { + return _OptimismValidator.Contract.TypeAndVersion(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorCallerSession) TypeAndVersion() (string, error) { + return _OptimismValidator.Contract.TypeAndVersion(&_OptimismValidator.CallOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "acceptOwnership") +} + +func (_OptimismValidator *OptimismValidatorSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismValidator.Contract.AcceptOwnership(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _OptimismValidator.Contract.AcceptOwnership(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactor) AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "addAccess", _user) +} + +func (_OptimismValidator *OptimismValidatorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismValidator.Contract.AddAccess(&_OptimismValidator.TransactOpts, _user) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismValidator.Contract.AddAccess(&_OptimismValidator.TransactOpts, _user) +} + +func (_OptimismValidator *OptimismValidatorTransactor) DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "disableAccessCheck") +} + +func (_OptimismValidator *OptimismValidatorSession) DisableAccessCheck() (*types.Transaction, error) { + return _OptimismValidator.Contract.DisableAccessCheck(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) DisableAccessCheck() (*types.Transaction, error) { + return _OptimismValidator.Contract.DisableAccessCheck(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactor) EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "enableAccessCheck") +} + +func (_OptimismValidator *OptimismValidatorSession) EnableAccessCheck() (*types.Transaction, error) { + return _OptimismValidator.Contract.EnableAccessCheck(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) EnableAccessCheck() (*types.Transaction, error) { + return _OptimismValidator.Contract.EnableAccessCheck(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactor) RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "removeAccess", _user) +} + +func (_OptimismValidator *OptimismValidatorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismValidator.Contract.RemoveAccess(&_OptimismValidator.TransactOpts, _user) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _OptimismValidator.Contract.RemoveAccess(&_OptimismValidator.TransactOpts, _user) +} + +func (_OptimismValidator *OptimismValidatorTransactor) SetGasLimit(opts *bind.TransactOpts, gasLimit uint32) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "setGasLimit", gasLimit) +} + +func (_OptimismValidator *OptimismValidatorSession) SetGasLimit(gasLimit uint32) (*types.Transaction, error) { + return _OptimismValidator.Contract.SetGasLimit(&_OptimismValidator.TransactOpts, gasLimit) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) SetGasLimit(gasLimit uint32) (*types.Transaction, error) { + return _OptimismValidator.Contract.SetGasLimit(&_OptimismValidator.TransactOpts, gasLimit) +} + +func (_OptimismValidator *OptimismValidatorTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "transferOwnership", to) +} + +func (_OptimismValidator *OptimismValidatorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismValidator.Contract.TransferOwnership(&_OptimismValidator.TransactOpts, to) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _OptimismValidator.Contract.TransferOwnership(&_OptimismValidator.TransactOpts, to) +} + +func (_OptimismValidator *OptimismValidatorTransactor) Validate(opts *bind.TransactOpts, previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _OptimismValidator.contract.Transact(opts, "validate", previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_OptimismValidator *OptimismValidatorSession) Validate(previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _OptimismValidator.Contract.Validate(&_OptimismValidator.TransactOpts, previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) Validate(previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _OptimismValidator.Contract.Validate(&_OptimismValidator.TransactOpts, previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_OptimismValidator *OptimismValidatorTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _OptimismValidator.contract.RawTransact(opts, nil) +} + +func (_OptimismValidator *OptimismValidatorSession) Receive() (*types.Transaction, error) { + return _OptimismValidator.Contract.Receive(&_OptimismValidator.TransactOpts) +} + +func (_OptimismValidator *OptimismValidatorTransactorSession) Receive() (*types.Transaction, error) { + return _OptimismValidator.Contract.Receive(&_OptimismValidator.TransactOpts) +} + +type OptimismValidatorAddedAccessIterator struct { + Event *OptimismValidatorAddedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorAddedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorAddedAccessIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorAddedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorAddedAccess struct { + User common.Address + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterAddedAccess(opts *bind.FilterOpts) (*OptimismValidatorAddedAccessIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return &OptimismValidatorAddedAccessIterator{contract: _OptimismValidator.contract, event: "AddedAccess", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *OptimismValidatorAddedAccess) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorAddedAccess) + if err := _OptimismValidator.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseAddedAccess(log types.Log) (*OptimismValidatorAddedAccess, error) { + event := new(OptimismValidatorAddedAccess) + if err := _OptimismValidator.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorCheckAccessDisabledIterator struct { + Event *OptimismValidatorCheckAccessDisabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorCheckAccessDisabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorCheckAccessDisabledIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorCheckAccessDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorCheckAccessDisabled struct { + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterCheckAccessDisabled(opts *bind.FilterOpts) (*OptimismValidatorCheckAccessDisabledIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return &OptimismValidatorCheckAccessDisabledIterator{contract: _OptimismValidator.contract, event: "CheckAccessDisabled", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *OptimismValidatorCheckAccessDisabled) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorCheckAccessDisabled) + if err := _OptimismValidator.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseCheckAccessDisabled(log types.Log) (*OptimismValidatorCheckAccessDisabled, error) { + event := new(OptimismValidatorCheckAccessDisabled) + if err := _OptimismValidator.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorCheckAccessEnabledIterator struct { + Event *OptimismValidatorCheckAccessEnabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorCheckAccessEnabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorCheckAccessEnabledIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorCheckAccessEnabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorCheckAccessEnabled struct { + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterCheckAccessEnabled(opts *bind.FilterOpts) (*OptimismValidatorCheckAccessEnabledIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return &OptimismValidatorCheckAccessEnabledIterator{contract: _OptimismValidator.contract, event: "CheckAccessEnabled", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *OptimismValidatorCheckAccessEnabled) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorCheckAccessEnabled) + if err := _OptimismValidator.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseCheckAccessEnabled(log types.Log) (*OptimismValidatorCheckAccessEnabled, error) { + event := new(OptimismValidatorCheckAccessEnabled) + if err := _OptimismValidator.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorConfigUpdatedIterator struct { + Event *OptimismValidatorConfigUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorConfigUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorConfigUpdatedIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorConfigUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorConfigUpdated struct { + L1CrossDomainMessengerAddress common.Address + L2UptimeFeedAddr common.Address + GasLimit uint32 + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterConfigUpdated(opts *bind.FilterOpts) (*OptimismValidatorConfigUpdatedIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "ConfigUpdated") + if err != nil { + return nil, err + } + return &OptimismValidatorConfigUpdatedIterator{contract: _OptimismValidator.contract, event: "ConfigUpdated", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchConfigUpdated(opts *bind.WatchOpts, sink chan<- *OptimismValidatorConfigUpdated) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "ConfigUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorConfigUpdated) + if err := _OptimismValidator.contract.UnpackLog(event, "ConfigUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseConfigUpdated(log types.Log) (*OptimismValidatorConfigUpdated, error) { + event := new(OptimismValidatorConfigUpdated) + if err := _OptimismValidator.contract.UnpackLog(event, "ConfigUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorGasLimitUpdatedIterator struct { + Event *OptimismValidatorGasLimitUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorGasLimitUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorGasLimitUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorGasLimitUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorGasLimitUpdatedIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorGasLimitUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorGasLimitUpdated struct { + GasLimit uint32 + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterGasLimitUpdated(opts *bind.FilterOpts) (*OptimismValidatorGasLimitUpdatedIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "GasLimitUpdated") + if err != nil { + return nil, err + } + return &OptimismValidatorGasLimitUpdatedIterator{contract: _OptimismValidator.contract, event: "GasLimitUpdated", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchGasLimitUpdated(opts *bind.WatchOpts, sink chan<- *OptimismValidatorGasLimitUpdated) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "GasLimitUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorGasLimitUpdated) + if err := _OptimismValidator.contract.UnpackLog(event, "GasLimitUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseGasLimitUpdated(log types.Log) (*OptimismValidatorGasLimitUpdated, error) { + event := new(OptimismValidatorGasLimitUpdated) + if err := _OptimismValidator.contract.UnpackLog(event, "GasLimitUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorOwnershipTransferRequestedIterator struct { + Event *OptimismValidatorOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismValidatorOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismValidatorOwnershipTransferRequestedIterator{contract: _OptimismValidator.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismValidatorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorOwnershipTransferRequested) + if err := _OptimismValidator.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseOwnershipTransferRequested(log types.Log) (*OptimismValidatorOwnershipTransferRequested, error) { + event := new(OptimismValidatorOwnershipTransferRequested) + if err := _OptimismValidator.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorOwnershipTransferredIterator struct { + Event *OptimismValidatorOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismValidatorOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &OptimismValidatorOwnershipTransferredIterator{contract: _OptimismValidator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismValidatorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorOwnershipTransferred) + if err := _OptimismValidator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseOwnershipTransferred(log types.Log) (*OptimismValidatorOwnershipTransferred, error) { + event := new(OptimismValidatorOwnershipTransferred) + if err := _OptimismValidator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorRemovedAccessIterator struct { + Event *OptimismValidatorRemovedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorRemovedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorRemovedAccessIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorRemovedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorRemovedAccess struct { + User common.Address + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterRemovedAccess(opts *bind.FilterOpts) (*OptimismValidatorRemovedAccessIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return &OptimismValidatorRemovedAccessIterator{contract: _OptimismValidator.contract, event: "RemovedAccess", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *OptimismValidatorRemovedAccess) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorRemovedAccess) + if err := _OptimismValidator.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseRemovedAccess(log types.Log) (*OptimismValidatorRemovedAccess, error) { + event := new(OptimismValidatorRemovedAccess) + if err := _OptimismValidator.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type OptimismValidatorValidatedStatusIterator struct { + Event *OptimismValidatorValidatedStatus + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *OptimismValidatorValidatedStatusIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorValidatedStatus) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(OptimismValidatorValidatedStatus) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *OptimismValidatorValidatedStatusIterator) Error() error { + return it.fail +} + +func (it *OptimismValidatorValidatedStatusIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type OptimismValidatorValidatedStatus struct { + PreviousRoundId *big.Int + PreviousAnswer *big.Int + CurrentRoundId *big.Int + CurrentAnswer *big.Int + Raw types.Log +} + +func (_OptimismValidator *OptimismValidatorFilterer) FilterValidatedStatus(opts *bind.FilterOpts) (*OptimismValidatorValidatedStatusIterator, error) { + + logs, sub, err := _OptimismValidator.contract.FilterLogs(opts, "ValidatedStatus") + if err != nil { + return nil, err + } + return &OptimismValidatorValidatedStatusIterator{contract: _OptimismValidator.contract, event: "ValidatedStatus", logs: logs, sub: sub}, nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) WatchValidatedStatus(opts *bind.WatchOpts, sink chan<- *OptimismValidatorValidatedStatus) (event.Subscription, error) { + + logs, sub, err := _OptimismValidator.contract.WatchLogs(opts, "ValidatedStatus") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(OptimismValidatorValidatedStatus) + if err := _OptimismValidator.contract.UnpackLog(event, "ValidatedStatus", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_OptimismValidator *OptimismValidatorFilterer) ParseValidatedStatus(log types.Log) (*OptimismValidatorValidatedStatus, error) { + event := new(OptimismValidatorValidatedStatus) + if err := _OptimismValidator.contract.UnpackLog(event, "ValidatedStatus", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (OptimismValidatorAddedAccess) Topic() common.Hash { + return common.HexToHash("0x87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db4") +} + +func (OptimismValidatorCheckAccessDisabled) Topic() common.Hash { + return common.HexToHash("0x3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638") +} + +func (OptimismValidatorCheckAccessEnabled) Topic() common.Hash { + return common.HexToHash("0xaebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480") +} + +func (OptimismValidatorConfigUpdated) Topic() common.Hash { + return common.HexToHash("0x50ac1a0ab48727faf611b51ad202bb80d8cc334ca8e64154c3d430fbb23040cb") +} + +func (OptimismValidatorGasLimitUpdated) Topic() common.Hash { + return common.HexToHash("0x501c51f34bf3d8589156f7fd37055e69375b40034d9f99365cb3290b5d983c91") +} + +func (OptimismValidatorOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (OptimismValidatorOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (OptimismValidatorRemovedAccess) Topic() common.Hash { + return common.HexToHash("0x3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d1") +} + +func (OptimismValidatorValidatedStatus) Topic() common.Hash { + return common.HexToHash("0xdf570e5bda6b7c0c0415ceeafd5f9321908b69023cae41e030a6df91cad90b03") +} + +func (_OptimismValidator *OptimismValidator) Address() common.Address { + return _OptimismValidator.address +} + +type OptimismValidatorInterface interface { + L1CROSSDOMAINMESSENGERADDRESS(opts *bind.CallOpts) (common.Address, error) + + L2UPTIMEFEEDADDR(opts *bind.CallOpts) (common.Address, error) + + CheckEnabled(opts *bind.CallOpts) (bool, error) + + GetGasLimit(opts *bind.CallOpts) (uint32, error) + + HasAccess(opts *bind.CallOpts, _user common.Address, arg1 []byte) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + SetGasLimit(opts *bind.TransactOpts, gasLimit uint32) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + Validate(opts *bind.TransactOpts, previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterAddedAccess(opts *bind.FilterOpts) (*OptimismValidatorAddedAccessIterator, error) + + WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *OptimismValidatorAddedAccess) (event.Subscription, error) + + ParseAddedAccess(log types.Log) (*OptimismValidatorAddedAccess, error) + + FilterCheckAccessDisabled(opts *bind.FilterOpts) (*OptimismValidatorCheckAccessDisabledIterator, error) + + WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *OptimismValidatorCheckAccessDisabled) (event.Subscription, error) + + ParseCheckAccessDisabled(log types.Log) (*OptimismValidatorCheckAccessDisabled, error) + + FilterCheckAccessEnabled(opts *bind.FilterOpts) (*OptimismValidatorCheckAccessEnabledIterator, error) + + WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *OptimismValidatorCheckAccessEnabled) (event.Subscription, error) + + ParseCheckAccessEnabled(log types.Log) (*OptimismValidatorCheckAccessEnabled, error) + + FilterConfigUpdated(opts *bind.FilterOpts) (*OptimismValidatorConfigUpdatedIterator, error) + + WatchConfigUpdated(opts *bind.WatchOpts, sink chan<- *OptimismValidatorConfigUpdated) (event.Subscription, error) + + ParseConfigUpdated(log types.Log) (*OptimismValidatorConfigUpdated, error) + + FilterGasLimitUpdated(opts *bind.FilterOpts) (*OptimismValidatorGasLimitUpdatedIterator, error) + + WatchGasLimitUpdated(opts *bind.WatchOpts, sink chan<- *OptimismValidatorGasLimitUpdated) (event.Subscription, error) + + ParseGasLimitUpdated(log types.Log) (*OptimismValidatorGasLimitUpdated, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismValidatorOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *OptimismValidatorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*OptimismValidatorOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*OptimismValidatorOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *OptimismValidatorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*OptimismValidatorOwnershipTransferred, error) + + FilterRemovedAccess(opts *bind.FilterOpts) (*OptimismValidatorRemovedAccessIterator, error) + + WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *OptimismValidatorRemovedAccess) (event.Subscription, error) + + ParseRemovedAccess(log types.Log) (*OptimismValidatorRemovedAccess, error) + + FilterValidatedStatus(opts *bind.FilterOpts) (*OptimismValidatorValidatedStatusIterator, error) + + WatchValidatedStatus(opts *bind.WatchOpts, sink chan<- *OptimismValidatorValidatedStatus) (event.Subscription, error) + + ParseValidatedStatus(log types.Log) (*OptimismValidatorValidatedStatus, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/v1_0_0/optimism_validator/optimism_validator_metadata.go b/gethwrappers/l2ep/generated/v1_0_0/optimism_validator/optimism_validator_metadata.go new file mode 100644 index 0000000000..05d9d0130b --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/optimism_validator/optimism_validator_metadata.go @@ -0,0 +1,7 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + + +package optimism_validator + +var SolidityStandardInput = "{\"version\":\"v0.8.24+commit.e11b9ed9\",\"language\":\"Solidity\",\"settings\":{\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":true,\"bytecodeHash\":\"none\",\"useLiteralContent\":false},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"outputSelection\":{\"node_modules/@eth-optimism/contracts/L1/messaging/IL1CrossDomainMessenger.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"node_modules/@eth-optimism/contracts/libraries/bridge/ICrossDomainMessenger.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"node_modules/@eth-optimism/contracts/libraries/codec/Lib_OVMCodec.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPReader.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPWriter.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"node_modules/@eth-optimism/contracts/libraries/utils/Lib_Bytes32Utils.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"node_modules/@eth-optimism/contracts/libraries/utils/Lib_BytesUtils.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/base/BaseValidator.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/ISequencerUptimeFeed.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/optimism/OptimismValidator.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/SimpleWriteAccessController.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AccessControllerInterface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AggregatorValidatorInterface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]}},\"remappings\":[\"forge-std/=src/v0.8/vendor/forge-std/src/\",\"@openzeppelin/contracts@4.7.3/=node_modules/@openzeppelin/contracts-4.7.3/\",\"@openzeppelin/contracts@4.8.3/=node_modules/@openzeppelin/contracts-4.8.3/\",\"@openzeppelin/contracts@4.9.6/=node_modules/@openzeppelin/contracts-4.9.6/\",\"@openzeppelin/contracts@5.0.2/=node_modules/@openzeppelin/contracts-5.0.2/\",\"@openzeppelin/contracts@5.1.0/=node_modules/@openzeppelin/contracts-5.1.0/\",\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@arbitrum/=node_modules/@arbitrum/\",\"hardhat/=node_modules/hardhat/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@zksync/=node_modules/@zksync/\"],\"viaIR\":false},\"sources\":{\"node_modules/@eth-optimism/contracts/L1/messaging/IL1CrossDomainMessenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\n/* Library Imports */\\nimport { Lib_OVMCodec } from \\\"../../libraries/codec/Lib_OVMCodec.sol\\\";\\n\\n/* Interface Imports */\\nimport { ICrossDomainMessenger } from \\\"../../libraries/bridge/ICrossDomainMessenger.sol\\\";\\n\\n/**\\n * @title IL1CrossDomainMessenger\\n */\\ninterface IL1CrossDomainMessenger is ICrossDomainMessenger {\\n /*******************\\n * Data Structures *\\n *******************/\\n\\n struct L2MessageInclusionProof {\\n bytes32 stateRoot;\\n Lib_OVMCodec.ChainBatchHeader stateRootBatchHeader;\\n Lib_OVMCodec.ChainInclusionProof stateRootProof;\\n bytes stateTrieWitness;\\n bytes storageTrieWitness;\\n }\\n\\n /********************\\n * Public Functions *\\n ********************/\\n\\n /**\\n * Relays a cross domain message to a contract.\\n * @param _target Target contract address.\\n * @param _sender Message sender address.\\n * @param _message Message to send to the target.\\n * @param _messageNonce Nonce for the provided message.\\n * @param _proof Inclusion proof for the given message.\\n */\\n function relayMessage(\\n address _target,\\n address _sender,\\n bytes memory _message,\\n uint256 _messageNonce,\\n L2MessageInclusionProof memory _proof\\n ) external;\\n\\n /**\\n * Replays a cross domain message to the target messenger.\\n * @param _target Target contract address.\\n * @param _sender Original sender address.\\n * @param _message Message to send to the target.\\n * @param _queueIndex CTC Queue index for the message to replay.\\n * @param _oldGasLimit Original gas limit used to send the message.\\n * @param _newGasLimit New gas limit to be used for this message.\\n */\\n function replayMessage(\\n address _target,\\n address _sender,\\n bytes memory _message,\\n uint256 _queueIndex,\\n uint32 _oldGasLimit,\\n uint32 _newGasLimit\\n ) external;\\n}\\n\"},\"node_modules/@eth-optimism/contracts/libraries/bridge/ICrossDomainMessenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity \\u003e0.5.0 \\u003c0.9.0;\\n\\n/**\\n * @title ICrossDomainMessenger\\n */\\ninterface ICrossDomainMessenger {\\n /**********\\n * Events *\\n **********/\\n\\n event SentMessage(\\n address indexed target,\\n address sender,\\n bytes message,\\n uint256 messageNonce,\\n uint256 gasLimit\\n );\\n event RelayedMessage(bytes32 indexed msgHash);\\n event FailedRelayedMessage(bytes32 indexed msgHash);\\n\\n /*************\\n * Variables *\\n *************/\\n\\n function xDomainMessageSender() external view returns (address);\\n\\n /********************\\n * Public Functions *\\n ********************/\\n\\n /**\\n * Sends a cross domain message to the target messenger.\\n * @param _target Target contract address.\\n * @param _message Message to send to the target.\\n * @param _gasLimit Gas limit for the provided message.\\n */\\n function sendMessage(\\n address _target,\\n bytes calldata _message,\\n uint32 _gasLimit\\n ) external;\\n}\\n\"},\"node_modules/@eth-optimism/contracts/libraries/codec/Lib_OVMCodec.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\n/* Library Imports */\\nimport { Lib_RLPReader } from \\\"../rlp/Lib_RLPReader.sol\\\";\\nimport { Lib_RLPWriter } from \\\"../rlp/Lib_RLPWriter.sol\\\";\\nimport { Lib_BytesUtils } from \\\"../utils/Lib_BytesUtils.sol\\\";\\nimport { Lib_Bytes32Utils } from \\\"../utils/Lib_Bytes32Utils.sol\\\";\\n\\n/**\\n * @title Lib_OVMCodec\\n */\\nlibrary Lib_OVMCodec {\\n /*********\\n * Enums *\\n *********/\\n\\n enum QueueOrigin {\\n SEQUENCER_QUEUE,\\n L1TOL2_QUEUE\\n }\\n\\n /***********\\n * Structs *\\n ***********/\\n\\n struct EVMAccount {\\n uint256 nonce;\\n uint256 balance;\\n bytes32 storageRoot;\\n bytes32 codeHash;\\n }\\n\\n struct ChainBatchHeader {\\n uint256 batchIndex;\\n bytes32 batchRoot;\\n uint256 batchSize;\\n uint256 prevTotalElements;\\n bytes extraData;\\n }\\n\\n struct ChainInclusionProof {\\n uint256 index;\\n bytes32[] siblings;\\n }\\n\\n struct Transaction {\\n uint256 timestamp;\\n uint256 blockNumber;\\n QueueOrigin l1QueueOrigin;\\n address l1TxOrigin;\\n address entrypoint;\\n uint256 gasLimit;\\n bytes data;\\n }\\n\\n struct TransactionChainElement {\\n bool isSequenced;\\n uint256 queueIndex; // QUEUED TX ONLY\\n uint256 timestamp; // SEQUENCER TX ONLY\\n uint256 blockNumber; // SEQUENCER TX ONLY\\n bytes txData; // SEQUENCER TX ONLY\\n }\\n\\n struct QueueElement {\\n bytes32 transactionHash;\\n uint40 timestamp;\\n uint40 blockNumber;\\n }\\n\\n /**********************\\n * Internal Functions *\\n **********************/\\n\\n /**\\n * Encodes a standard OVM transaction.\\n * @param _transaction OVM transaction to encode.\\n * @return Encoded transaction bytes.\\n */\\n function encodeTransaction(Transaction memory _transaction)\\n internal\\n pure\\n returns (bytes memory)\\n {\\n return\\n abi.encodePacked(\\n _transaction.timestamp,\\n _transaction.blockNumber,\\n _transaction.l1QueueOrigin,\\n _transaction.l1TxOrigin,\\n _transaction.entrypoint,\\n _transaction.gasLimit,\\n _transaction.data\\n );\\n }\\n\\n /**\\n * Hashes a standard OVM transaction.\\n * @param _transaction OVM transaction to encode.\\n * @return Hashed transaction\\n */\\n function hashTransaction(Transaction memory _transaction) internal pure returns (bytes32) {\\n return keccak256(encodeTransaction(_transaction));\\n }\\n\\n /**\\n * @notice Decodes an RLP-encoded account state into a useful struct.\\n * @param _encoded RLP-encoded account state.\\n * @return Account state struct.\\n */\\n function decodeEVMAccount(bytes memory _encoded) internal pure returns (EVMAccount memory) {\\n Lib_RLPReader.RLPItem[] memory accountState = Lib_RLPReader.readList(_encoded);\\n\\n return\\n EVMAccount({\\n nonce: Lib_RLPReader.readUint256(accountState[0]),\\n balance: Lib_RLPReader.readUint256(accountState[1]),\\n storageRoot: Lib_RLPReader.readBytes32(accountState[2]),\\n codeHash: Lib_RLPReader.readBytes32(accountState[3])\\n });\\n }\\n\\n /**\\n * Calculates a hash for a given batch header.\\n * @param _batchHeader Header to hash.\\n * @return Hash of the header.\\n */\\n function hashBatchHeader(Lib_OVMCodec.ChainBatchHeader memory _batchHeader)\\n internal\\n pure\\n returns (bytes32)\\n {\\n return\\n keccak256(\\n abi.encode(\\n _batchHeader.batchRoot,\\n _batchHeader.batchSize,\\n _batchHeader.prevTotalElements,\\n _batchHeader.extraData\\n )\\n );\\n }\\n}\\n\"},\"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPReader.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\n/**\\n * @title Lib_RLPReader\\n * @dev Adapted from \\\"RLPReader\\\" by Hamdi Allam (hamdi.allam97@gmail.com).\\n */\\nlibrary Lib_RLPReader {\\n /*************\\n * Constants *\\n *************/\\n\\n uint256 internal constant MAX_LIST_LENGTH = 32;\\n\\n /*********\\n * Enums *\\n *********/\\n\\n enum RLPItemType {\\n DATA_ITEM,\\n LIST_ITEM\\n }\\n\\n /***********\\n * Structs *\\n ***********/\\n\\n struct RLPItem {\\n uint256 length;\\n uint256 ptr;\\n }\\n\\n /**********************\\n * Internal Functions *\\n **********************/\\n\\n /**\\n * Converts bytes to a reference to memory position and length.\\n * @param _in Input bytes to convert.\\n * @return Output memory reference.\\n */\\n function toRLPItem(bytes memory _in) internal pure returns (RLPItem memory) {\\n uint256 ptr;\\n assembly {\\n ptr := add(_in, 32)\\n }\\n\\n return RLPItem({ length: _in.length, ptr: ptr });\\n }\\n\\n /**\\n * Reads an RLP list value into a list of RLP items.\\n * @param _in RLP list value.\\n * @return Decoded RLP list items.\\n */\\n function readList(RLPItem memory _in) internal pure returns (RLPItem[] memory) {\\n (uint256 listOffset, , RLPItemType itemType) = _decodeLength(_in);\\n\\n require(itemType == RLPItemType.LIST_ITEM, \\\"Invalid RLP list value.\\\");\\n\\n // Solidity in-memory arrays can't be increased in size, but *can* be decreased in size by\\n // writing to the length. Since we can't know the number of RLP items without looping over\\n // the entire input, we'd have to loop twice to accurately size this array. It's easier to\\n // simply set a reasonable maximum list length and decrease the size before we finish.\\n RLPItem[] memory out = new RLPItem[](MAX_LIST_LENGTH);\\n\\n uint256 itemCount = 0;\\n uint256 offset = listOffset;\\n while (offset \\u003c _in.length) {\\n require(itemCount \\u003c MAX_LIST_LENGTH, \\\"Provided RLP list exceeds max list length.\\\");\\n\\n (uint256 itemOffset, uint256 itemLength, ) = _decodeLength(\\n RLPItem({ length: _in.length - offset, ptr: _in.ptr + offset })\\n );\\n\\n out[itemCount] = RLPItem({ length: itemLength + itemOffset, ptr: _in.ptr + offset });\\n\\n itemCount += 1;\\n offset += itemOffset + itemLength;\\n }\\n\\n // Decrease the array size to match the actual item count.\\n assembly {\\n mstore(out, itemCount)\\n }\\n\\n return out;\\n }\\n\\n /**\\n * Reads an RLP list value into a list of RLP items.\\n * @param _in RLP list value.\\n * @return Decoded RLP list items.\\n */\\n function readList(bytes memory _in) internal pure returns (RLPItem[] memory) {\\n return readList(toRLPItem(_in));\\n }\\n\\n /**\\n * Reads an RLP bytes value into bytes.\\n * @param _in RLP bytes value.\\n * @return Decoded bytes.\\n */\\n function readBytes(RLPItem memory _in) internal pure returns (bytes memory) {\\n (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\\n\\n require(itemType == RLPItemType.DATA_ITEM, \\\"Invalid RLP bytes value.\\\");\\n\\n return _copy(_in.ptr, itemOffset, itemLength);\\n }\\n\\n /**\\n * Reads an RLP bytes value into bytes.\\n * @param _in RLP bytes value.\\n * @return Decoded bytes.\\n */\\n function readBytes(bytes memory _in) internal pure returns (bytes memory) {\\n return readBytes(toRLPItem(_in));\\n }\\n\\n /**\\n * Reads an RLP string value into a string.\\n * @param _in RLP string value.\\n * @return Decoded string.\\n */\\n function readString(RLPItem memory _in) internal pure returns (string memory) {\\n return string(readBytes(_in));\\n }\\n\\n /**\\n * Reads an RLP string value into a string.\\n * @param _in RLP string value.\\n * @return Decoded string.\\n */\\n function readString(bytes memory _in) internal pure returns (string memory) {\\n return readString(toRLPItem(_in));\\n }\\n\\n /**\\n * Reads an RLP bytes32 value into a bytes32.\\n * @param _in RLP bytes32 value.\\n * @return Decoded bytes32.\\n */\\n function readBytes32(RLPItem memory _in) internal pure returns (bytes32) {\\n require(_in.length \\u003c= 33, \\\"Invalid RLP bytes32 value.\\\");\\n\\n (uint256 itemOffset, uint256 itemLength, RLPItemType itemType) = _decodeLength(_in);\\n\\n require(itemType == RLPItemType.DATA_ITEM, \\\"Invalid RLP bytes32 value.\\\");\\n\\n uint256 ptr = _in.ptr + itemOffset;\\n bytes32 out;\\n assembly {\\n out := mload(ptr)\\n\\n // Shift the bytes over to match the item size.\\n if lt(itemLength, 32) {\\n out := div(out, exp(256, sub(32, itemLength)))\\n }\\n }\\n\\n return out;\\n }\\n\\n /**\\n * Reads an RLP bytes32 value into a bytes32.\\n * @param _in RLP bytes32 value.\\n * @return Decoded bytes32.\\n */\\n function readBytes32(bytes memory _in) internal pure returns (bytes32) {\\n return readBytes32(toRLPItem(_in));\\n }\\n\\n /**\\n * Reads an RLP uint256 value into a uint256.\\n * @param _in RLP uint256 value.\\n * @return Decoded uint256.\\n */\\n function readUint256(RLPItem memory _in) internal pure returns (uint256) {\\n return uint256(readBytes32(_in));\\n }\\n\\n /**\\n * Reads an RLP uint256 value into a uint256.\\n * @param _in RLP uint256 value.\\n * @return Decoded uint256.\\n */\\n function readUint256(bytes memory _in) internal pure returns (uint256) {\\n return readUint256(toRLPItem(_in));\\n }\\n\\n /**\\n * Reads an RLP bool value into a bool.\\n * @param _in RLP bool value.\\n * @return Decoded bool.\\n */\\n function readBool(RLPItem memory _in) internal pure returns (bool) {\\n require(_in.length == 1, \\\"Invalid RLP boolean value.\\\");\\n\\n uint256 ptr = _in.ptr;\\n uint256 out;\\n assembly {\\n out := byte(0, mload(ptr))\\n }\\n\\n require(out == 0 || out == 1, \\\"Lib_RLPReader: Invalid RLP boolean value, must be 0 or 1\\\");\\n\\n return out != 0;\\n }\\n\\n /**\\n * Reads an RLP bool value into a bool.\\n * @param _in RLP bool value.\\n * @return Decoded bool.\\n */\\n function readBool(bytes memory _in) internal pure returns (bool) {\\n return readBool(toRLPItem(_in));\\n }\\n\\n /**\\n * Reads an RLP address value into a address.\\n * @param _in RLP address value.\\n * @return Decoded address.\\n */\\n function readAddress(RLPItem memory _in) internal pure returns (address) {\\n if (_in.length == 1) {\\n return address(0);\\n }\\n\\n require(_in.length == 21, \\\"Invalid RLP address value.\\\");\\n\\n return address(uint160(readUint256(_in)));\\n }\\n\\n /**\\n * Reads an RLP address value into a address.\\n * @param _in RLP address value.\\n * @return Decoded address.\\n */\\n function readAddress(bytes memory _in) internal pure returns (address) {\\n return readAddress(toRLPItem(_in));\\n }\\n\\n /**\\n * Reads the raw bytes of an RLP item.\\n * @param _in RLP item to read.\\n * @return Raw RLP bytes.\\n */\\n function readRawBytes(RLPItem memory _in) internal pure returns (bytes memory) {\\n return _copy(_in);\\n }\\n\\n /*********************\\n * Private Functions *\\n *********************/\\n\\n /**\\n * Decodes the length of an RLP item.\\n * @param _in RLP item to decode.\\n * @return Offset of the encoded data.\\n * @return Length of the encoded data.\\n * @return RLP item type (LIST_ITEM or DATA_ITEM).\\n */\\n function _decodeLength(RLPItem memory _in)\\n private\\n pure\\n returns (\\n uint256,\\n uint256,\\n RLPItemType\\n )\\n {\\n require(_in.length \\u003e 0, \\\"RLP item cannot be null.\\\");\\n\\n uint256 ptr = _in.ptr;\\n uint256 prefix;\\n assembly {\\n prefix := byte(0, mload(ptr))\\n }\\n\\n if (prefix \\u003c= 0x7f) {\\n // Single byte.\\n\\n return (0, 1, RLPItemType.DATA_ITEM);\\n } else if (prefix \\u003c= 0xb7) {\\n // Short string.\\n\\n // slither-disable-next-line variable-scope\\n uint256 strLen = prefix - 0x80;\\n\\n require(_in.length \\u003e strLen, \\\"Invalid RLP short string.\\\");\\n\\n return (1, strLen, RLPItemType.DATA_ITEM);\\n } else if (prefix \\u003c= 0xbf) {\\n // Long string.\\n uint256 lenOfStrLen = prefix - 0xb7;\\n\\n require(_in.length \\u003e lenOfStrLen, \\\"Invalid RLP long string length.\\\");\\n\\n uint256 strLen;\\n assembly {\\n // Pick out the string length.\\n strLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfStrLen)))\\n }\\n\\n require(_in.length \\u003e lenOfStrLen + strLen, \\\"Invalid RLP long string.\\\");\\n\\n return (1 + lenOfStrLen, strLen, RLPItemType.DATA_ITEM);\\n } else if (prefix \\u003c= 0xf7) {\\n // Short list.\\n // slither-disable-next-line variable-scope\\n uint256 listLen = prefix - 0xc0;\\n\\n require(_in.length \\u003e listLen, \\\"Invalid RLP short list.\\\");\\n\\n return (1, listLen, RLPItemType.LIST_ITEM);\\n } else {\\n // Long list.\\n uint256 lenOfListLen = prefix - 0xf7;\\n\\n require(_in.length \\u003e lenOfListLen, \\\"Invalid RLP long list length.\\\");\\n\\n uint256 listLen;\\n assembly {\\n // Pick out the list length.\\n listLen := div(mload(add(ptr, 1)), exp(256, sub(32, lenOfListLen)))\\n }\\n\\n require(_in.length \\u003e lenOfListLen + listLen, \\\"Invalid RLP long list.\\\");\\n\\n return (1 + lenOfListLen, listLen, RLPItemType.LIST_ITEM);\\n }\\n }\\n\\n /**\\n * Copies the bytes from a memory location.\\n * @param _src Pointer to the location to read from.\\n * @param _offset Offset to start reading from.\\n * @param _length Number of bytes to read.\\n * @return Copied bytes.\\n */\\n function _copy(\\n uint256 _src,\\n uint256 _offset,\\n uint256 _length\\n ) private pure returns (bytes memory) {\\n bytes memory out = new bytes(_length);\\n if (out.length == 0) {\\n return out;\\n }\\n\\n uint256 src = _src + _offset;\\n uint256 dest;\\n assembly {\\n dest := add(out, 32)\\n }\\n\\n // Copy over as many complete words as we can.\\n for (uint256 i = 0; i \\u003c _length / 32; i++) {\\n assembly {\\n mstore(dest, mload(src))\\n }\\n\\n src += 32;\\n dest += 32;\\n }\\n\\n // Pick out the remaining bytes.\\n uint256 mask;\\n unchecked {\\n mask = 256**(32 - (_length % 32)) - 1;\\n }\\n\\n assembly {\\n mstore(dest, or(and(mload(src), not(mask)), and(mload(dest), mask)))\\n }\\n return out;\\n }\\n\\n /**\\n * Copies an RLP item into bytes.\\n * @param _in RLP item to copy.\\n * @return Copied bytes.\\n */\\n function _copy(RLPItem memory _in) private pure returns (bytes memory) {\\n return _copy(_in.ptr, 0, _in.length);\\n }\\n}\\n\"},\"node_modules/@eth-optimism/contracts/libraries/rlp/Lib_RLPWriter.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\n/**\\n * @title Lib_RLPWriter\\n * @author Bakaoh (with modifications)\\n */\\nlibrary Lib_RLPWriter {\\n /**********************\\n * Internal Functions *\\n **********************/\\n\\n /**\\n * RLP encodes a byte string.\\n * @param _in The byte string to encode.\\n * @return The RLP encoded string in bytes.\\n */\\n function writeBytes(bytes memory _in) internal pure returns (bytes memory) {\\n bytes memory encoded;\\n\\n if (_in.length == 1 \\u0026\\u0026 uint8(_in[0]) \\u003c 128) {\\n encoded = _in;\\n } else {\\n encoded = abi.encodePacked(_writeLength(_in.length, 128), _in);\\n }\\n\\n return encoded;\\n }\\n\\n /**\\n * RLP encodes a list of RLP encoded byte byte strings.\\n * @param _in The list of RLP encoded byte strings.\\n * @return The RLP encoded list of items in bytes.\\n */\\n function writeList(bytes[] memory _in) internal pure returns (bytes memory) {\\n bytes memory list = _flatten(_in);\\n return abi.encodePacked(_writeLength(list.length, 192), list);\\n }\\n\\n /**\\n * RLP encodes a string.\\n * @param _in The string to encode.\\n * @return The RLP encoded string in bytes.\\n */\\n function writeString(string memory _in) internal pure returns (bytes memory) {\\n return writeBytes(bytes(_in));\\n }\\n\\n /**\\n * RLP encodes an address.\\n * @param _in The address to encode.\\n * @return The RLP encoded address in bytes.\\n */\\n function writeAddress(address _in) internal pure returns (bytes memory) {\\n return writeBytes(abi.encodePacked(_in));\\n }\\n\\n /**\\n * RLP encodes a uint.\\n * @param _in The uint256 to encode.\\n * @return The RLP encoded uint256 in bytes.\\n */\\n function writeUint(uint256 _in) internal pure returns (bytes memory) {\\n return writeBytes(_toBinary(_in));\\n }\\n\\n /**\\n * RLP encodes a bool.\\n * @param _in The bool to encode.\\n * @return The RLP encoded bool in bytes.\\n */\\n function writeBool(bool _in) internal pure returns (bytes memory) {\\n bytes memory encoded = new bytes(1);\\n encoded[0] = (_in ? bytes1(0x01) : bytes1(0x80));\\n return encoded;\\n }\\n\\n /*********************\\n * Private Functions *\\n *********************/\\n\\n /**\\n * Encode the first byte, followed by the `len` in binary form if `length` is more than 55.\\n * @param _len The length of the string or the payload.\\n * @param _offset 128 if item is string, 192 if item is list.\\n * @return RLP encoded bytes.\\n */\\n function _writeLength(uint256 _len, uint256 _offset) private pure returns (bytes memory) {\\n bytes memory encoded;\\n\\n if (_len \\u003c 56) {\\n encoded = new bytes(1);\\n encoded[0] = bytes1(uint8(_len) + uint8(_offset));\\n } else {\\n uint256 lenLen;\\n uint256 i = 1;\\n while (_len / i != 0) {\\n lenLen++;\\n i *= 256;\\n }\\n\\n encoded = new bytes(lenLen + 1);\\n encoded[0] = bytes1(uint8(lenLen) + uint8(_offset) + 55);\\n for (i = 1; i \\u003c= lenLen; i++) {\\n encoded[i] = bytes1(uint8((_len / (256**(lenLen - i))) % 256));\\n }\\n }\\n\\n return encoded;\\n }\\n\\n /**\\n * Encode integer in big endian binary form with no leading zeroes.\\n * @notice TODO: This should be optimized with assembly to save gas costs.\\n * @param _x The integer to encode.\\n * @return RLP encoded bytes.\\n */\\n function _toBinary(uint256 _x) private pure returns (bytes memory) {\\n bytes memory b = abi.encodePacked(_x);\\n\\n uint256 i = 0;\\n for (; i \\u003c 32; i++) {\\n if (b[i] != 0) {\\n break;\\n }\\n }\\n\\n bytes memory res = new bytes(32 - i);\\n for (uint256 j = 0; j \\u003c res.length; j++) {\\n res[j] = b[i++];\\n }\\n\\n return res;\\n }\\n\\n /**\\n * Copies a piece of memory to another location.\\n * @notice From: https://github.com/Arachnid/solidity-stringutils/blob/master/src/strings.sol.\\n * @param _dest Destination location.\\n * @param _src Source location.\\n * @param _len Length of memory to copy.\\n */\\n function _memcpy(\\n uint256 _dest,\\n uint256 _src,\\n uint256 _len\\n ) private pure {\\n uint256 dest = _dest;\\n uint256 src = _src;\\n uint256 len = _len;\\n\\n for (; len \\u003e= 32; len -= 32) {\\n assembly {\\n mstore(dest, mload(src))\\n }\\n dest += 32;\\n src += 32;\\n }\\n\\n uint256 mask;\\n unchecked {\\n mask = 256**(32 - len) - 1;\\n }\\n assembly {\\n let srcpart := and(mload(src), not(mask))\\n let destpart := and(mload(dest), mask)\\n mstore(dest, or(destpart, srcpart))\\n }\\n }\\n\\n /**\\n * Flattens a list of byte strings into one byte string.\\n * @notice From: https://github.com/sammayo/solidity-rlp-encoder/blob/master/RLPEncode.sol.\\n * @param _list List of byte strings to flatten.\\n * @return The flattened byte string.\\n */\\n function _flatten(bytes[] memory _list) private pure returns (bytes memory) {\\n if (_list.length == 0) {\\n return new bytes(0);\\n }\\n\\n uint256 len;\\n uint256 i = 0;\\n for (; i \\u003c _list.length; i++) {\\n len += _list[i].length;\\n }\\n\\n bytes memory flattened = new bytes(len);\\n uint256 flattenedPtr;\\n assembly {\\n flattenedPtr := add(flattened, 0x20)\\n }\\n\\n for (i = 0; i \\u003c _list.length; i++) {\\n bytes memory item = _list[i];\\n\\n uint256 listPtr;\\n assembly {\\n listPtr := add(item, 0x20)\\n }\\n\\n _memcpy(flattenedPtr, listPtr, item.length);\\n flattenedPtr += _list[i].length;\\n }\\n\\n return flattened;\\n }\\n}\\n\"},\"node_modules/@eth-optimism/contracts/libraries/utils/Lib_Bytes32Utils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\n/**\\n * @title Lib_Byte32Utils\\n */\\nlibrary Lib_Bytes32Utils {\\n /**********************\\n * Internal Functions *\\n **********************/\\n\\n /**\\n * Converts a bytes32 value to a boolean. Anything non-zero will be converted to \\\"true.\\\"\\n * @param _in Input bytes32 value.\\n * @return Bytes32 as a boolean.\\n */\\n function toBool(bytes32 _in) internal pure returns (bool) {\\n return _in != 0;\\n }\\n\\n /**\\n * Converts a boolean to a bytes32 value.\\n * @param _in Input boolean value.\\n * @return Boolean as a bytes32.\\n */\\n function fromBool(bool _in) internal pure returns (bytes32) {\\n return bytes32(uint256(_in ? 1 : 0));\\n }\\n\\n /**\\n * Converts a bytes32 value to an address. Takes the *last* 20 bytes.\\n * @param _in Input bytes32 value.\\n * @return Bytes32 as an address.\\n */\\n function toAddress(bytes32 _in) internal pure returns (address) {\\n return address(uint160(uint256(_in)));\\n }\\n\\n /**\\n * Converts an address to a bytes32.\\n * @param _in Input address value.\\n * @return Address as a bytes32.\\n */\\n function fromAddress(address _in) internal pure returns (bytes32) {\\n return bytes32(uint256(uint160(_in)));\\n }\\n}\\n\"},\"node_modules/@eth-optimism/contracts/libraries/utils/Lib_BytesUtils.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.9;\\n\\n/**\\n * @title Lib_BytesUtils\\n */\\nlibrary Lib_BytesUtils {\\n /**********************\\n * Internal Functions *\\n **********************/\\n\\n function slice(\\n bytes memory _bytes,\\n uint256 _start,\\n uint256 _length\\n ) internal pure returns (bytes memory) {\\n require(_length + 31 \\u003e= _length, \\\"slice_overflow\\\");\\n require(_start + _length \\u003e= _start, \\\"slice_overflow\\\");\\n require(_bytes.length \\u003e= _start + _length, \\\"slice_outOfBounds\\\");\\n\\n bytes memory tempBytes;\\n\\n assembly {\\n switch iszero(_length)\\n case 0 {\\n // Get a location of some free memory and store it in tempBytes as\\n // Solidity does for memory variables.\\n tempBytes := mload(0x40)\\n\\n // The first word of the slice result is potentially a partial\\n // word read from the original array. To read it, we calculate\\n // the length of that partial word and start copying that many\\n // bytes into the array. The first word we copy will start with\\n // data we don't care about, but the last `lengthmod` bytes will\\n // land at the beginning of the contents of the new array. When\\n // we're done copying, we overwrite the full first word with\\n // the actual length of the slice.\\n let lengthmod := and(_length, 31)\\n\\n // The multiplication in the next line is necessary\\n // because when slicing multiples of 32 bytes (lengthmod == 0)\\n // the following copy loop was copying the origin's length\\n // and then ending prematurely not copying everything it should.\\n let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod)))\\n let end := add(mc, _length)\\n\\n for {\\n // The multiplication in the next line has the same exact purpose\\n // as the one above.\\n let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start)\\n } lt(mc, end) {\\n mc := add(mc, 0x20)\\n cc := add(cc, 0x20)\\n } {\\n mstore(mc, mload(cc))\\n }\\n\\n mstore(tempBytes, _length)\\n\\n //update free-memory pointer\\n //allocating the array padded to 32 bytes like the compiler does now\\n mstore(0x40, and(add(mc, 31), not(31)))\\n }\\n //if we want a zero-length slice let's just return a zero-length array\\n default {\\n tempBytes := mload(0x40)\\n\\n //zero out the 32 bytes slice we are about to return\\n //we need to do it because Solidity does not garbage collect\\n mstore(tempBytes, 0)\\n\\n mstore(0x40, add(tempBytes, 0x20))\\n }\\n }\\n\\n return tempBytes;\\n }\\n\\n function slice(bytes memory _bytes, uint256 _start) internal pure returns (bytes memory) {\\n if (_start \\u003e= _bytes.length) {\\n return bytes(\\\"\\\");\\n }\\n\\n return slice(_bytes, _start, _bytes.length - _start);\\n }\\n\\n function toBytes32(bytes memory _bytes) internal pure returns (bytes32) {\\n if (_bytes.length \\u003c 32) {\\n bytes32 ret;\\n assembly {\\n ret := mload(add(_bytes, 32))\\n }\\n return ret;\\n }\\n\\n return abi.decode(_bytes, (bytes32)); // will truncate if input length \\u003e 32 bytes\\n }\\n\\n function toUint256(bytes memory _bytes) internal pure returns (uint256) {\\n return uint256(toBytes32(_bytes));\\n }\\n\\n function toNibbles(bytes memory _bytes) internal pure returns (bytes memory) {\\n bytes memory nibbles = new bytes(_bytes.length * 2);\\n\\n for (uint256 i = 0; i \\u003c _bytes.length; i++) {\\n nibbles[i * 2] = _bytes[i] \\u003e\\u003e 4;\\n nibbles[i * 2 + 1] = bytes1(uint8(_bytes[i]) % 16);\\n }\\n\\n return nibbles;\\n }\\n\\n function fromNibbles(bytes memory _bytes) internal pure returns (bytes memory) {\\n bytes memory ret = new bytes(_bytes.length / 2);\\n\\n for (uint256 i = 0; i \\u003c ret.length; i++) {\\n ret[i] = (_bytes[i * 2] \\u003c\\u003c 4) | (_bytes[i * 2 + 1]);\\n }\\n\\n return ret;\\n }\\n\\n function equal(bytes memory _bytes, bytes memory _other) internal pure returns (bool) {\\n return keccak256(_bytes) == keccak256(_other);\\n }\\n}\\n\"},\"src/v0.8/l2ep/base/BaseValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport {AggregatorValidatorInterface} from \\\"../../shared/interfaces/AggregatorValidatorInterface.sol\\\";\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\n\\nimport {SimpleWriteAccessController} from \\\"../../shared/access/SimpleWriteAccessController.sol\\\";\\n\\nabstract contract BaseValidator is SimpleWriteAccessController, AggregatorValidatorInterface, ITypeAndVersion {\\n /// @notice emitted when gas cost to spend on L2 is updated\\n /// @param gasLimit updated gas cost\\n event GasLimitUpdated(uint32 gasLimit);\\n\\n /// @notice emitted when the contract config is updated\\n /// @param l1CrossDomainMessengerAddress address the L1CrossDomainMessenger contract address\\n /// @param l2UptimeFeedAddr the address of the L2 SequencerUptimeFeed contract address\\n /// @param gasLimit the gasLimit to use for sending a message from L1 to L2\\n event ConfigUpdated(address l1CrossDomainMessengerAddress, address l2UptimeFeedAddr, uint32 gasLimit);\\n\\n /// @notice emitted when a validation is executed successfully\\n /// @param previousRoundId previous aggregator OCR round id\\n /// @param previousAnswer previous aggregator answer\\n /// @param currentRoundId current aggregator OCR round id\\n /// @param currentAnswer new aggregator answer - value of 1 considers the service offline.\\n event ValidatedStatus(uint256 previousRoundId, int256 previousAnswer, uint256 currentRoundId, int256 currentAnswer);\\n\\n error L1CrossDomainMessengerAddressZero();\\n error L2UptimeFeedAddrZero();\\n\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n address public immutable L1_CROSS_DOMAIN_MESSENGER_ADDRESS;\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n address public immutable L2_UPTIME_FEED_ADDR;\\n\\n int256 internal constant ANSWER_SEQ_OFFLINE = 1;\\n\\n uint32 internal s_gasLimit;\\n\\n /// @param l1CrossDomainMessengerAddress address the L1CrossDomainMessenger contract address\\n /// @param l2UptimeFeedAddr the address of the L2 SequencerUptimeFeed contract address\\n /// @param gasLimit the gasLimit to use for sending a message from L1 to L2\\n constructor(address l1CrossDomainMessengerAddress, address l2UptimeFeedAddr, uint32 gasLimit) {\\n if (l1CrossDomainMessengerAddress == address(0)) {\\n revert L1CrossDomainMessengerAddressZero();\\n }\\n if (l2UptimeFeedAddr == address(0)) {\\n revert L2UptimeFeedAddrZero();\\n }\\n\\n L1_CROSS_DOMAIN_MESSENGER_ADDRESS = l1CrossDomainMessengerAddress;\\n L2_UPTIME_FEED_ADDR = l2UptimeFeedAddr;\\n s_gasLimit = gasLimit;\\n emit ConfigUpdated(l1CrossDomainMessengerAddress, l2UptimeFeedAddr, gasLimit);\\n }\\n\\n /// @notice fetches the gas cost of sending a cross chain message\\n function getGasLimit() external view returns (uint32) {\\n return s_gasLimit;\\n }\\n\\n /// @notice sets the new gas cost to spend when sending cross chain message\\n /// @param gasLimit the updated gas cost\\n function setGasLimit(\\n uint32 gasLimit\\n ) external onlyOwner {\\n s_gasLimit = gasLimit;\\n emit GasLimitUpdated(gasLimit);\\n }\\n\\n /// @notice makes this contract payable\\n /// @dev receives funds:\\n /// - to use them (if configured) to pay for L2 execution on L1\\n /// - when withdrawing funds from L2 xDomain alias address (pay for L2 execution on L2)\\n receive() external payable {}\\n}\\n\"},\"src/v0.8/l2ep/interfaces/ISequencerUptimeFeed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ISequencerUptimeFeed {\\n function updateStatus(bool status, uint64 timestamp) external;\\n}\\n\"},\"src/v0.8/l2ep/optimism/OptimismValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport {ISequencerUptimeFeed} from \\\"./../interfaces/ISequencerUptimeFeed.sol\\\";\\n\\nimport {BaseValidator} from \\\"../base/BaseValidator.sol\\\";\\n\\nimport {IL1CrossDomainMessenger} from \\\"@eth-optimism/contracts/L1/messaging/IL1CrossDomainMessenger.sol\\\";\\n\\n/// @title OptimismValidator - makes cross chain call to update the Sequencer Uptime Feed on L2\\ncontract OptimismValidator is BaseValidator {\\n string public constant override typeAndVersion = \\\"OptimismValidator 1.1.0-dev\\\";\\n\\n /// @param l1CrossDomainMessengerAddress address the L1CrossDomainMessenger contract address\\n /// @param l2UptimeFeedAddr the address of the OptimismSequencerUptimeFeed contract address\\n /// @param gasLimit the gasLimit to use for sending a message from L1 to L2\\n constructor(\\n address l1CrossDomainMessengerAddress,\\n address l2UptimeFeedAddr,\\n uint32 gasLimit\\n ) BaseValidator(l1CrossDomainMessengerAddress, l2UptimeFeedAddr, gasLimit) {}\\n\\n /// @notice validate method sends an xDomain L2 tx to update Uptime Feed contract on L2.\\n /// @dev A message is sent using the L1CrossDomainMessenger. This method is accessed controlled.\\n /// @param currentAnswer new aggregator answer - value of 1 considers the sequencer offline.\\n function validate(\\n uint256 previousRoundId,\\n int256 previousAnswer,\\n uint256 currentRoundId,\\n int256 currentAnswer\\n ) external override checkAccess returns (bool) {\\n // Encode the OptimismSequencerUptimeFeed call\\n bytes4 selector = ISequencerUptimeFeed.updateStatus.selector;\\n bool status = currentAnswer == ANSWER_SEQ_OFFLINE;\\n uint64 timestamp = uint64(block.timestamp);\\n // Encode `status` and `timestamp`\\n bytes memory message = abi.encodeWithSelector(selector, status, timestamp);\\n // Make the xDomain call\\n IL1CrossDomainMessenger(L1_CROSS_DOMAIN_MESSENGER_ADDRESS).sendMessage(\\n L2_UPTIME_FEED_ADDR, // target\\n message,\\n s_gasLimit\\n );\\n emit BaseValidator.ValidatedStatus(previousRoundId, previousAnswer, currentRoundId, currentAnswer);\\n // return success\\n return true;\\n }\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(\\n address newOwner\\n ) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(\\n address to\\n ) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(\\n address to\\n ) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/access/SimpleWriteAccessController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {AccessControllerInterface} from \\\"../interfaces/AccessControllerInterface.sol\\\";\\nimport {ConfirmedOwner} from \\\"./ConfirmedOwner.sol\\\";\\n\\n/// @title SimpleWriteAccessController\\n/// @notice Gives access to accounts explicitly added to an access list by the controller's owner.\\n/// @dev does not make any special permissions for externally, see SimpleReadAccessController for that.\\ncontract SimpleWriteAccessController is AccessControllerInterface, ConfirmedOwner {\\n bool public checkEnabled;\\n mapping(address =\\u003e bool) internal s_accessList;\\n\\n event AddedAccess(address user);\\n event RemovedAccess(address user);\\n event CheckAccessEnabled();\\n event CheckAccessDisabled();\\n\\n constructor() ConfirmedOwner(msg.sender) {\\n checkEnabled = true;\\n }\\n\\n /// @notice Returns the access of an address\\n /// @param _user The address to query\\n function hasAccess(address _user, bytes memory) public view virtual override returns (bool) {\\n return s_accessList[_user] || !checkEnabled;\\n }\\n\\n /// @notice Adds an address to the access list\\n /// @param _user The address to add\\n function addAccess(\\n address _user\\n ) external onlyOwner {\\n if (!s_accessList[_user]) {\\n s_accessList[_user] = true;\\n\\n emit AddedAccess(_user);\\n }\\n }\\n\\n /// @notice Removes an address from the access list\\n /// @param _user The address to remove\\n function removeAccess(\\n address _user\\n ) external onlyOwner {\\n if (s_accessList[_user]) {\\n s_accessList[_user] = false;\\n\\n emit RemovedAccess(_user);\\n }\\n }\\n\\n /// @notice makes the access check enforced\\n function enableAccessCheck() external onlyOwner {\\n if (!checkEnabled) {\\n checkEnabled = true;\\n\\n emit CheckAccessEnabled();\\n }\\n }\\n\\n /// @notice makes the access check unenforced\\n function disableAccessCheck() external onlyOwner {\\n if (checkEnabled) {\\n checkEnabled = false;\\n\\n emit CheckAccessDisabled();\\n }\\n }\\n\\n /// @dev reverts if the caller does not have access\\n modifier checkAccess() {\\n // solhint-disable-next-line gas-custom-errors\\n require(hasAccess(msg.sender, msg.data), \\\"No access\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/interfaces/AccessControllerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AccessControllerInterface {\\n function hasAccess(address user, bytes calldata data) external view returns (bool);\\n}\\n\"},\"src/v0.8/shared/interfaces/AggregatorValidatorInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AggregatorValidatorInterface {\\n function validate(\\n uint256 previousRoundId,\\n int256 previousAnswer,\\n uint256 currentRoundId,\\n int256 currentAnswer\\n ) external returns (bool);\\n}\\n\"},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(\\n address recipient\\n ) external;\\n\\n function acceptOwnership() external;\\n}\\n\"},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ITypeAndVersion {\\n function typeAndVersion() external pure returns (string memory);\\n}\\n\"}}}" diff --git a/gethwrappers/l2ep/generated/v1_0_0/scroll_cross_domain_forwarder/scroll_cross_domain_forwarder.go b/gethwrappers/l2ep/generated/v1_0_0/scroll_cross_domain_forwarder/scroll_cross_domain_forwarder.go new file mode 100644 index 0000000000..7ec7fa7a00 --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/scroll_cross_domain_forwarder/scroll_cross_domain_forwarder.go @@ -0,0 +1,928 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package scroll_cross_domain_forwarder + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ScrollCrossDomainForwarderMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"crossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"contract IScrollMessenger\"},{\"name\":\"l1OwnerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptL1Ownership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"crossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forward\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferL1Ownership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"L1OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", + Bin: "0x60a060405234801562000010575f80fd5b50604051620012da380380620012da833981016040819052620000339162000264565b8033805f816200008a5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000bc57620000bc8162000146565b505050620000d081620001f060201b60201c565b506001600160a01b038216620001335760405162461bcd60e51b815260206004820152602160248201527f496e76616c69642078446f6d61696e204d657373656e676572206164647265736044820152607360f81b606482015260840162000081565b506001600160a01b0316608052620002a1565b336001600160a01b03821603620001a05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000081565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600280546001600160a01b038381166001600160a01b03198084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b6001600160a01b038116811462000261575f80fd5b50565b5f806040838503121562000276575f80fd5b825162000283816200024c565b602084015190925062000296816200024c565b809150509250929050565b608051610ff6620002e45f395f818161019e015281816101da015281816102970152818161051e015281816105d60152818161072801526107f60152610ff65ff3fe608060405234801561000f575f80fd5b506004361061009f575f3560e01c806396b8d7c011610072578063d2db637211610058578063d2db63721461016b578063f2fde38b14610189578063f43b36131461019c575f80fd5b806396b8d7c014610150578063b2ec078714610163575f80fd5b8063181f5a77146100a35780636fadcf72146100f557806379ba50971461010a5780638da5cb5b14610112575b5f80fd5b6100df6040518060400160405280602081526020017f5363726f6c6c43726f7373446f6d61696e466f7277617264657220312e302e3081525081565b6040516100ec9190610e1e565b60405180910390f35b610108610103366004610ebc565b6101c2565b005b61010861040a565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ec565b61010861015e366004610f98565b610506565b610108610710565b60025473ffffffffffffffffffffffffffffffffffffffff1661012b565b610108610197366004610f98565b610904565b7f000000000000000000000000000000000000000000000000000000000000000061012b565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610266576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064015b60405180910390fd5b60025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103229190610fb3565b73ffffffffffffffffffffffffffffffffffffffff16146103c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840161025d565b61040582826040518060400160405280601781526020017f466f727761726465722063616c6c207265766572746564000000000000000000815250610915565b505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461048b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161025d565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146105a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e6765720000604482015260640161025d565b60025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa15801561063d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106619190610fb3565b73ffffffffffffffffffffffffffffffffffffffff1614610704576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f6572000000000000000000000000000000000000000000000000000000000000606482015260840161025d565b61070d8161092d565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146107af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e6765720000604482015260640161025d565b600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff928316927f00000000000000000000000000000000000000000000000000000000000000001691636e296e459160048083019260209291908290030181865afa15801561083f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108639190610fb3565b73ffffffffffffffffffffffffffffffffffffffff16146108e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d7573742062652070726f706f736564204c31206f776e657200000000000000604482015260640161025d565b6003546109029073ffffffffffffffffffffffffffffffffffffffff16610a22565b565b61090c610aa3565b61070d81610b23565b606061092384845f85610c17565b90505b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff8216036109ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161025d565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907f55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f905f90a350565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610902576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161025d565b3373ffffffffffffffffffffffffffffffffffffffff821603610ba2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161025d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b606082471015610ca9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161025d565b73ffffffffffffffffffffffffffffffffffffffff85163b610d27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161025d565b5f808673ffffffffffffffffffffffffffffffffffffffff168587604051610d4f9190610fce565b5f6040518083038185875af1925050503d805f8114610d89576040519150601f19603f3d011682016040523d82523d5f602084013e610d8e565b606091505b5091509150610d9e828286610da9565b979650505050505050565b60608315610db8575081610926565b825115610dc85782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161025d9190610e1e565b5f5b83811015610e16578181015183820152602001610dfe565b50505f910152565b602081525f8251806020840152610e3c816040850160208701610dfc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff8116811461070d575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610ecd575f80fd5b8235610ed881610e6e565b9150602083013567ffffffffffffffff80821115610ef4575f80fd5b818501915085601f830112610f07575f80fd5b813581811115610f1957610f19610e8f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610f5f57610f5f610e8f565b81604052828152886020848701011115610f77575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215610fa8575f80fd5b813561092681610e6e565b5f60208284031215610fc3575f80fd5b815161092681610e6e565b5f8251610fdf818460208701610dfc565b919091019291505056fea164736f6c6343000818000a", +} + +var ScrollCrossDomainForwarderABI = ScrollCrossDomainForwarderMetaData.ABI + +var ScrollCrossDomainForwarderBin = ScrollCrossDomainForwarderMetaData.Bin + +func DeployScrollCrossDomainForwarder(auth *bind.TransactOpts, backend bind.ContractBackend, crossDomainMessengerAddr common.Address, l1OwnerAddr common.Address) (common.Address, *types.Transaction, *ScrollCrossDomainForwarder, error) { + parsed, err := ScrollCrossDomainForwarderMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ScrollCrossDomainForwarderBin), backend, crossDomainMessengerAddr, l1OwnerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ScrollCrossDomainForwarder{address: address, abi: *parsed, ScrollCrossDomainForwarderCaller: ScrollCrossDomainForwarderCaller{contract: contract}, ScrollCrossDomainForwarderTransactor: ScrollCrossDomainForwarderTransactor{contract: contract}, ScrollCrossDomainForwarderFilterer: ScrollCrossDomainForwarderFilterer{contract: contract}}, nil +} + +type ScrollCrossDomainForwarder struct { + address common.Address + abi abi.ABI + ScrollCrossDomainForwarderCaller + ScrollCrossDomainForwarderTransactor + ScrollCrossDomainForwarderFilterer +} + +type ScrollCrossDomainForwarderCaller struct { + contract *bind.BoundContract +} + +type ScrollCrossDomainForwarderTransactor struct { + contract *bind.BoundContract +} + +type ScrollCrossDomainForwarderFilterer struct { + contract *bind.BoundContract +} + +type ScrollCrossDomainForwarderSession struct { + Contract *ScrollCrossDomainForwarder + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ScrollCrossDomainForwarderCallerSession struct { + Contract *ScrollCrossDomainForwarderCaller + CallOpts bind.CallOpts +} + +type ScrollCrossDomainForwarderTransactorSession struct { + Contract *ScrollCrossDomainForwarderTransactor + TransactOpts bind.TransactOpts +} + +type ScrollCrossDomainForwarderRaw struct { + Contract *ScrollCrossDomainForwarder +} + +type ScrollCrossDomainForwarderCallerRaw struct { + Contract *ScrollCrossDomainForwarderCaller +} + +type ScrollCrossDomainForwarderTransactorRaw struct { + Contract *ScrollCrossDomainForwarderTransactor +} + +func NewScrollCrossDomainForwarder(address common.Address, backend bind.ContractBackend) (*ScrollCrossDomainForwarder, error) { + abi, err := abi.JSON(strings.NewReader(ScrollCrossDomainForwarderABI)) + if err != nil { + return nil, err + } + contract, err := bindScrollCrossDomainForwarder(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarder{address: address, abi: abi, ScrollCrossDomainForwarderCaller: ScrollCrossDomainForwarderCaller{contract: contract}, ScrollCrossDomainForwarderTransactor: ScrollCrossDomainForwarderTransactor{contract: contract}, ScrollCrossDomainForwarderFilterer: ScrollCrossDomainForwarderFilterer{contract: contract}}, nil +} + +func NewScrollCrossDomainForwarderCaller(address common.Address, caller bind.ContractCaller) (*ScrollCrossDomainForwarderCaller, error) { + contract, err := bindScrollCrossDomainForwarder(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderCaller{contract: contract}, nil +} + +func NewScrollCrossDomainForwarderTransactor(address common.Address, transactor bind.ContractTransactor) (*ScrollCrossDomainForwarderTransactor, error) { + contract, err := bindScrollCrossDomainForwarder(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderTransactor{contract: contract}, nil +} + +func NewScrollCrossDomainForwarderFilterer(address common.Address, filterer bind.ContractFilterer) (*ScrollCrossDomainForwarderFilterer, error) { + contract, err := bindScrollCrossDomainForwarder(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderFilterer{contract: contract}, nil +} + +func bindScrollCrossDomainForwarder(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ScrollCrossDomainForwarderMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollCrossDomainForwarder.Contract.ScrollCrossDomainForwarderCaller.contract.Call(opts, result, method, params...) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.ScrollCrossDomainForwarderTransactor.contract.Transfer(opts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.ScrollCrossDomainForwarderTransactor.contract.Transact(opts, method, params...) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollCrossDomainForwarder.Contract.contract.Call(opts, result, method, params...) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.contract.Transfer(opts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.contract.Transact(opts, method, params...) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCaller) CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollCrossDomainForwarder.contract.Call(opts, &out, "crossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) CrossDomainMessenger() (common.Address, error) { + return _ScrollCrossDomainForwarder.Contract.CrossDomainMessenger(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCallerSession) CrossDomainMessenger() (common.Address, error) { + return _ScrollCrossDomainForwarder.Contract.CrossDomainMessenger(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCaller) L1Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollCrossDomainForwarder.contract.Call(opts, &out, "l1Owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) L1Owner() (common.Address, error) { + return _ScrollCrossDomainForwarder.Contract.L1Owner(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCallerSession) L1Owner() (common.Address, error) { + return _ScrollCrossDomainForwarder.Contract.L1Owner(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollCrossDomainForwarder.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) Owner() (common.Address, error) { + return _ScrollCrossDomainForwarder.Contract.Owner(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCallerSession) Owner() (common.Address, error) { + return _ScrollCrossDomainForwarder.Contract.Owner(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ScrollCrossDomainForwarder.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) TypeAndVersion() (string, error) { + return _ScrollCrossDomainForwarder.Contract.TypeAndVersion(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderCallerSession) TypeAndVersion() (string, error) { + return _ScrollCrossDomainForwarder.Contract.TypeAndVersion(&_ScrollCrossDomainForwarder.CallOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactor) AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.contract.Transact(opts, "acceptL1Ownership") +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.AcceptL1Ownership(&_ScrollCrossDomainForwarder.TransactOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.AcceptL1Ownership(&_ScrollCrossDomainForwarder.TransactOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.contract.Transact(opts, "acceptOwnership") +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.AcceptOwnership(&_ScrollCrossDomainForwarder.TransactOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.AcceptOwnership(&_ScrollCrossDomainForwarder.TransactOpts) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactor) Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.contract.Transact(opts, "forward", target, data) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.Forward(&_ScrollCrossDomainForwarder.TransactOpts, target, data) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.Forward(&_ScrollCrossDomainForwarder.TransactOpts, target, data) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactor) TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.contract.Transact(opts, "transferL1Ownership", to) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.TransferL1Ownership(&_ScrollCrossDomainForwarder.TransactOpts, to) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.TransferL1Ownership(&_ScrollCrossDomainForwarder.TransactOpts, to) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.contract.Transact(opts, "transferOwnership", to) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.TransferOwnership(&_ScrollCrossDomainForwarder.TransactOpts, to) +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainForwarder.Contract.TransferOwnership(&_ScrollCrossDomainForwarder.TransactOpts, to) +} + +type ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator struct { + Event *ScrollCrossDomainForwarderL1OwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainForwarderL1OwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.FilterLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator{contract: _ScrollCrossDomainForwarder.contract, event: "L1OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.WatchLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainForwarderL1OwnershipTransferRequested) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) ParseL1OwnershipTransferRequested(log types.Log) (*ScrollCrossDomainForwarderL1OwnershipTransferRequested, error) { + event := new(ScrollCrossDomainForwarderL1OwnershipTransferRequested) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollCrossDomainForwarderL1OwnershipTransferredIterator struct { + Event *ScrollCrossDomainForwarderL1OwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainForwarderL1OwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainForwarderL1OwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainForwarderL1OwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainForwarderL1OwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderL1OwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.FilterLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderL1OwnershipTransferredIterator{contract: _ScrollCrossDomainForwarder.contract, event: "L1OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.WatchLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainForwarderL1OwnershipTransferred) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) ParseL1OwnershipTransferred(log types.Log) (*ScrollCrossDomainForwarderL1OwnershipTransferred, error) { + event := new(ScrollCrossDomainForwarderL1OwnershipTransferred) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollCrossDomainForwarderOwnershipTransferRequestedIterator struct { + Event *ScrollCrossDomainForwarderOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainForwarderOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainForwarderOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainForwarderOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainForwarderOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderOwnershipTransferRequestedIterator{contract: _ScrollCrossDomainForwarder.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainForwarderOwnershipTransferRequested) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) ParseOwnershipTransferRequested(log types.Log) (*ScrollCrossDomainForwarderOwnershipTransferRequested, error) { + event := new(ScrollCrossDomainForwarderOwnershipTransferRequested) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollCrossDomainForwarderOwnershipTransferredIterator struct { + Event *ScrollCrossDomainForwarderOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainForwarderOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainForwarderOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainForwarderOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainForwarderOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainForwarderOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainForwarderOwnershipTransferredIterator{contract: _ScrollCrossDomainForwarder.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainForwarder.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainForwarderOwnershipTransferred) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarderFilterer) ParseOwnershipTransferred(log types.Log) (*ScrollCrossDomainForwarderOwnershipTransferred, error) { + event := new(ScrollCrossDomainForwarderOwnershipTransferred) + if err := _ScrollCrossDomainForwarder.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (ScrollCrossDomainForwarderL1OwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0x55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f") +} + +func (ScrollCrossDomainForwarderL1OwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0xb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272") +} + +func (ScrollCrossDomainForwarderOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ScrollCrossDomainForwarderOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_ScrollCrossDomainForwarder *ScrollCrossDomainForwarder) Address() common.Address { + return _ScrollCrossDomainForwarder.address +} + +type ScrollCrossDomainForwarderInterface interface { + CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) + + L1Owner(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderL1OwnershipTransferRequestedIterator, error) + + WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferRequested(log types.Log) (*ScrollCrossDomainForwarderL1OwnershipTransferRequested, error) + + FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderL1OwnershipTransferredIterator, error) + + WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferred(log types.Log) (*ScrollCrossDomainForwarderL1OwnershipTransferred, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ScrollCrossDomainForwarderOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainForwarderOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainForwarderOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ScrollCrossDomainForwarderOwnershipTransferred, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/v1_0_0/scroll_cross_domain_forwarder/scroll_cross_domain_forwarder_metadata.go b/gethwrappers/l2ep/generated/v1_0_0/scroll_cross_domain_forwarder/scroll_cross_domain_forwarder_metadata.go new file mode 100644 index 0000000000..eb0dad746e --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/scroll_cross_domain_forwarder/scroll_cross_domain_forwarder_metadata.go @@ -0,0 +1,7 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + + +package scroll_cross_domain_forwarder + +var SolidityStandardInput = "{\"version\":\"v0.8.24+commit.e11b9ed9\",\"language\":\"Solidity\",\"settings\":{\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":true,\"bytecodeHash\":\"none\",\"useLiteralContent\":false},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"outputSelection\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"node_modules/@scroll-tech/contracts/libraries/IScrollMessenger.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/CrossDomainForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/CrossDomainOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/ICrossDomainOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/IForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/scroll/ScrollCrossDomainForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]}},\"remappings\":[\"forge-std/=src/v0.8/vendor/forge-std/src/\",\"@openzeppelin/contracts@4.7.3/=node_modules/@openzeppelin/contracts-4.7.3/\",\"@openzeppelin/contracts@4.8.3/=node_modules/@openzeppelin/contracts-4.8.3/\",\"@openzeppelin/contracts@4.9.6/=node_modules/@openzeppelin/contracts-4.9.6/\",\"@openzeppelin/contracts@5.0.2/=node_modules/@openzeppelin/contracts-5.0.2/\",\"@openzeppelin/contracts@5.1.0/=node_modules/@openzeppelin/contracts-5.1.0/\",\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@arbitrum/=node_modules/@arbitrum/\",\"hardhat/=node_modules/hardhat/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@zksync/=node_modules/@zksync/\"],\"viaIR\":false},\"sources\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length \\u003e 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance \\u003e= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance \\u003e= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length \\u003e 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"},\"node_modules/@scroll-tech/contracts/libraries/IScrollMessenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\ninterface IScrollMessenger {\\n /**********\\n * Events *\\n **********/\\n\\n /// @notice Emitted when a cross domain message is sent.\\n /// @param sender The address of the sender who initiates the message.\\n /// @param target The address of target contract to call.\\n /// @param value The amount of value passed to the target contract.\\n /// @param messageNonce The nonce of the message.\\n /// @param gasLimit The optional gas limit passed to L1 or L2.\\n /// @param message The calldata passed to the target contract.\\n event SentMessage(\\n address indexed sender,\\n address indexed target,\\n uint256 value,\\n uint256 messageNonce,\\n uint256 gasLimit,\\n bytes message\\n );\\n\\n /// @notice Emitted when a cross domain message is relayed successfully.\\n /// @param messageHash The hash of the message.\\n event RelayedMessage(bytes32 indexed messageHash);\\n\\n /// @notice Emitted when a cross domain message is failed to relay.\\n /// @param messageHash The hash of the message.\\n event FailedRelayedMessage(bytes32 indexed messageHash);\\n\\n /**********\\n * Errors *\\n **********/\\n\\n /// @dev Thrown when the given address is `address(0)`.\\n error ErrorZeroAddress();\\n\\n /*************************\\n * Public View Functions *\\n *************************/\\n\\n /// @notice Return the sender of a cross domain message.\\n function xDomainMessageSender() external view returns (address);\\n\\n /*****************************\\n * Public Mutating Functions *\\n *****************************/\\n\\n /// @notice Send cross chain message from L1 to L2 or L2 to L1.\\n /// @param target The address of account who receive the message.\\n /// @param value The amount of ether passed when call target contract.\\n /// @param message The content of the message.\\n /// @param gasLimit Gas limit required to complete the message relay on corresponding chain.\\n function sendMessage(\\n address target,\\n uint256 value,\\n bytes calldata message,\\n uint256 gasLimit\\n ) external payable;\\n\\n /// @notice Send cross chain message from L1 to L2 or L2 to L1.\\n /// @param target The address of account who receive the message.\\n /// @param value The amount of ether passed when call target contract.\\n /// @param message The content of the message.\\n /// @param gasLimit Gas limit required to complete the message relay on corresponding chain.\\n /// @param refundAddress The address of account who will receive the refunded fee.\\n function sendMessage(\\n address target,\\n uint256 value,\\n bytes calldata message,\\n uint256 gasLimit,\\n address refundAddress\\n ) external payable;\\n}\\n\"},\"src/v0.8/l2ep/CrossDomainForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {CrossDomainOwnable} from \\\"./CrossDomainOwnable.sol\\\";\\nimport {IForwarder} from \\\"./interfaces/IForwarder.sol\\\";\\n\\n/**\\n * @title CrossDomainForwarder - L1 xDomain account representation\\n * @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n * destination.\\n * @dev Any other L2 contract which uses this contract's address as a privileged position,\\n * can consider that position to be held by the `l1Owner`\\n */\\nabstract contract CrossDomainForwarder is IForwarder, CrossDomainOwnable {}\\n\"},\"src/v0.8/l2ep/CrossDomainOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwner} from \\\"../shared/access/ConfirmedOwner.sol\\\";\\nimport {ICrossDomainOwnable} from \\\"./interfaces/ICrossDomainOwnable.sol\\\";\\n\\n/**\\n * @title The CrossDomainOwnable contract\\n * @notice A contract with helpers for cross-domain contract ownership.\\n */\\ncontract CrossDomainOwnable is ICrossDomainOwnable, ConfirmedOwner {\\n address internal s_l1Owner;\\n address internal s_l1PendingOwner;\\n\\n constructor(\\n address newl1Owner\\n ) ConfirmedOwner(msg.sender) {\\n _setL1Owner(newl1Owner);\\n }\\n\\n /**\\n * @notice transfer ownership of this account to a new L1 owner\\n * @param to new L1 owner that will be allowed to call the forward fn\\n */\\n function transferL1Ownership(\\n address to\\n ) public virtual override onlyL1Owner {\\n _transferL1Ownership(to);\\n }\\n\\n /**\\n * @notice accept ownership of this account to a new L1 owner\\n */\\n function acceptL1Ownership() public virtual override onlyProposedL1Owner {\\n _setL1Owner(s_l1PendingOwner);\\n }\\n\\n /**\\n * @notice Get the current owner\\n */\\n function l1Owner() public view override returns (address) {\\n return s_l1Owner;\\n }\\n\\n /**\\n * @notice validate, transfer ownership, and emit relevant events\\n */\\n function _transferL1Ownership(\\n address to\\n ) internal {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_l1PendingOwner = to;\\n\\n emit L1OwnershipTransferRequested(s_l1Owner, to);\\n }\\n\\n /**\\n * @notice set ownership, emit relevant events. Used in acceptOwnership()\\n */\\n function _setL1Owner(\\n address to\\n ) internal {\\n address oldOwner = s_l1Owner;\\n s_l1Owner = to;\\n s_l1PendingOwner = address(0);\\n\\n emit L1OwnershipTransferred(oldOwner, to);\\n }\\n\\n /**\\n * @notice Reverts if called by anyone other than the L1 owner.\\n */\\n modifier onlyL1Owner() virtual {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_l1Owner, \\\"Only callable by L1 owner\\\");\\n _;\\n }\\n\\n /**\\n * @notice Reverts if called by anyone other than the L1 owner.\\n */\\n modifier onlyProposedL1Owner() virtual {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_l1PendingOwner, \\\"Only callable by proposed L1 owner\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/l2ep/interfaces/ICrossDomainOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title A contract with helpers for cross-domain contract ownership\\ninterface ICrossDomainOwnable {\\n event L1OwnershipTransferRequested(address indexed from, address indexed to);\\n\\n event L1OwnershipTransferred(address indexed from, address indexed to);\\n\\n function l1Owner() external returns (address);\\n\\n function transferL1Ownership(\\n address recipient\\n ) external;\\n\\n function acceptL1Ownership() external;\\n}\\n\"},\"src/v0.8/l2ep/interfaces/IForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title Forwards a call to a target, under some conditions\\ninterface IForwarder {\\n /// @notice forward calls the `target` with `data`\\n /// @param target contract address to be called\\n /// @param data to send to target contract\\n function forward(address target, bytes memory data) external;\\n}\\n\"},\"src/v0.8/l2ep/scroll/ScrollCrossDomainForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\nimport {IForwarder} from \\\"../interfaces/IForwarder.sol\\\";\\n\\nimport {CrossDomainForwarder} from \\\"../CrossDomainForwarder.sol\\\";\\nimport {CrossDomainOwnable} from \\\"../CrossDomainOwnable.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts@4.7.3/utils/Address.sol\\\";\\nimport {IScrollMessenger} from \\\"@scroll-tech/contracts/libraries/IScrollMessenger.sol\\\";\\n\\n/// @title ScrollCrossDomainForwarder - L1 xDomain account representation\\n/// @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n/// destination.\\n/// @dev Any other L2 contract which uses this contract's address as a privileged position,\\n/// can be considered to be owned by the `l1Owner`\\ncontract ScrollCrossDomainForwarder is ITypeAndVersion, CrossDomainForwarder {\\n string public constant override typeAndVersion = \\\"ScrollCrossDomainForwarder 1.0.0\\\";\\n\\n address internal immutable i_scrollCrossDomainMessenger;\\n\\n /// @param crossDomainMessengerAddr the xDomain bridge messenger (Scroll bridge L2) contract address\\n /// @param l1OwnerAddr the L1 owner address that will be allowed to call the forward fn\\n constructor(IScrollMessenger crossDomainMessengerAddr, address l1OwnerAddr) CrossDomainOwnable(l1OwnerAddr) {\\n // solhint-disable-next-line gas-custom-errors\\n require(address(crossDomainMessengerAddr) != address(0), \\\"Invalid xDomain Messenger address\\\");\\n i_scrollCrossDomainMessenger = address(crossDomainMessengerAddr);\\n }\\n\\n /// @dev forwarded only if L2 Messenger calls with `xDomainMessageSender` being the L1 owner address\\n /// @inheritdoc IForwarder\\n function forward(address target, bytes memory data) external override onlyL1Owner {\\n Address.functionCall(target, data, \\\"Forwarder call reverted\\\");\\n }\\n\\n /// @notice This is always the address of the Scroll Cross Domain Messenger contract\\n function crossDomainMessenger() external view returns (address) {\\n return address(i_scrollCrossDomainMessenger);\\n }\\n\\n /// @notice The call MUST come from the L1 owner (via cross-chain message.) Reverts otherwise.\\n modifier onlyL1Owner() override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == i_scrollCrossDomainMessenger, \\\"Sender is not the L2 messenger\\\");\\n // solhint-disable-next-line gas-custom-errors\\n require(\\n IScrollMessenger(i_scrollCrossDomainMessenger).xDomainMessageSender() == l1Owner(),\\n \\\"xDomain sender is not the L1 owner\\\"\\n );\\n _;\\n }\\n\\n /// @notice The call MUST come from the proposed L1 owner (via cross-chain message.) Reverts otherwise.\\n modifier onlyProposedL1Owner() override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == i_scrollCrossDomainMessenger, \\\"Sender is not the L2 messenger\\\");\\n // solhint-disable-next-line gas-custom-errors\\n require(\\n IScrollMessenger(i_scrollCrossDomainMessenger).xDomainMessageSender() == s_l1PendingOwner,\\n \\\"Must be proposed L1 owner\\\"\\n );\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(\\n address newOwner\\n ) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(\\n address to\\n ) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(\\n address to\\n ) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(\\n address recipient\\n ) external;\\n\\n function acceptOwnership() external;\\n}\\n\"},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ITypeAndVersion {\\n function typeAndVersion() external pure returns (string memory);\\n}\\n\"}}}" diff --git a/gethwrappers/l2ep/generated/v1_0_0/scroll_cross_domain_governor/scroll_cross_domain_governor.go b/gethwrappers/l2ep/generated/v1_0_0/scroll_cross_domain_governor/scroll_cross_domain_governor.go new file mode 100644 index 0000000000..f5ae662ca6 --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/scroll_cross_domain_governor/scroll_cross_domain_governor.go @@ -0,0 +1,942 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package scroll_cross_domain_governor + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ScrollCrossDomainGovernorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"crossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"contract IScrollMessenger\"},{\"name\":\"l1OwnerAddr\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptL1Ownership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"crossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"forward\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forwardDelegate\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1Owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferL1Ownership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"L1OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false}]", + Bin: "0x60a060405234801562000010575f80fd5b506040516200178d3803806200178d833981016040819052620000339162000264565b8033805f816200008a5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000bc57620000bc8162000146565b505050620000d081620001f060201b60201c565b506001600160a01b038216620001335760405162461bcd60e51b815260206004820152602160248201527f496e76616c69642078446f6d61696e204d657373656e676572206164647265736044820152607360f81b606482015260840162000081565b506001600160a01b0316608052620002a1565b336001600160a01b03821603620001a05760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000081565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600280546001600160a01b038381166001600160a01b03198084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b6001600160a01b038116811462000261575f80fd5b50565b5f806040838503121562000276575f80fd5b825162000283816200024c565b602084015190925062000296816200024c565b809150509250929050565b60805161148d620003005f395f81816101cb01528181610207015281816102f101528181610348015281816104d3015281816105b80152818161060f015281816108910152818161094901528181610a9b0152610b69015261148d5ff3fe608060405234801561000f575f80fd5b50600436106100b9575f3560e01c806396b8d7c011610072578063d2db637211610058578063d2db637214610198578063f2fde38b146101b6578063f43b3613146101c9575f80fd5b806396b8d7c01461017d578063b2ec078714610190575f80fd5b80636fadcf72116100a25780636fadcf721461012457806379ba5097146101375780638da5cb5b1461013f575f80fd5b8063181f5a77146100bd57806326929eb61461010f575b5f80fd5b6100f96040518060400160405280601f81526020017f5363726f6c6c43726f7373446f6d61696e476f7665726e6f7220312e302e300081525081565b60405161010691906112b5565b60405180910390f35b61012261011d366004611353565b6101ef565b005b610122610132366004611353565b6104bb565b61012261077d565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610106565b61012261018b36600461142f565b610879565b610122610a83565b60025473ffffffffffffffffffffffffffffffffffffffff16610158565b6101226101c436600461142f565b610c77565b7f0000000000000000000000000000000000000000000000000000000000000000610158565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148061024957505f5473ffffffffffffffffffffffffffffffffffffffff1633145b6102da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572206f60448201527f72206f776e65720000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036104765760025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d3919061144a565b73ffffffffffffffffffffffffffffffffffffffff1614610476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084016102d1565b6104b682826040518060400160405280601e81526020017f476f7665726e6f722064656c656761746563616c6c2072657665727465640000815250610c88565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148061051557505f5473ffffffffffffffffffffffffffffffffffffffff1633145b6105a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572206f60448201527f72206f776e65720000000000000000000000000000000000000000000000000060648201526084016102d1565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016330361073d5760025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa158015610676573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069a919061144a565b73ffffffffffffffffffffffffffffffffffffffff161461073d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084016102d1565b6104b682826040518060400160405280601681526020017f476f7665726e6f722063616c6c20726576657274656400000000000000000000815250610dae565b60015473ffffffffffffffffffffffffffffffffffffffff1633146107fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016102d1565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064016102d1565b60025473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d4919061144a565b73ffffffffffffffffffffffffffffffffffffffff1614610a77576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f78446f6d61696e2073656e646572206973206e6f7420746865204c31206f776e60448201527f657200000000000000000000000000000000000000000000000000000000000060648201526084016102d1565b610a8081610dc4565b50565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610b22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f53656e646572206973206e6f7420746865204c32206d657373656e676572000060448201526064016102d1565b600354604080517f6e296e45000000000000000000000000000000000000000000000000000000008152905173ffffffffffffffffffffffffffffffffffffffff928316927f00000000000000000000000000000000000000000000000000000000000000001691636e296e459160048083019260209291908290030181865afa158015610bb2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bd6919061144a565b73ffffffffffffffffffffffffffffffffffffffff1614610c53576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4d7573742062652070726f706f736564204c31206f776e65720000000000000060448201526064016102d1565b600354610c759073ffffffffffffffffffffffffffffffffffffffff16610eb9565b565b610c7f610f3a565b610a8081610fba565b606073ffffffffffffffffffffffffffffffffffffffff84163b610d2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e7472616374000000000000000000000000000000000000000000000000000060648201526084016102d1565b5f808573ffffffffffffffffffffffffffffffffffffffff1685604051610d559190611465565b5f60405180830381855af49150503d805f8114610d8d576040519150601f19603f3d011682016040523d82523d5f602084013e610d92565b606091505b5091509150610da28282866110ae565b925050505b9392505050565b6060610dbc84845f85611101565b949350505050565b3373ffffffffffffffffffffffffffffffffffffffff821603610e43576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016102d1565b600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217909255600254604051919216907f55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f905f90a350565b6002805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff00000000000000000000000000000000000000008084168217909455600380549094169093556040519116919082907fb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272905f90a35050565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610c75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016102d1565b3373ffffffffffffffffffffffffffffffffffffffff821603611039576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016102d1565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b606083156110bd575081610da7565b8251156110cd5782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d191906112b5565b606082471015611193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c000000000000000000000000000000000000000000000000000060648201526084016102d1565b73ffffffffffffffffffffffffffffffffffffffff85163b611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016102d1565b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516112399190611465565b5f6040518083038185875af1925050503d805f8114611273576040519150601f19603f3d011682016040523d82523d5f602084013e611278565b606091505b50915091506112888282866110ae565b979650505050505050565b5f5b838110156112ad578181015183820152602001611295565b50505f910152565b602081525f82518060208401526112d3816040850160208701611293565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610a80575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215611364575f80fd5b823561136f81611305565b9150602083013567ffffffffffffffff8082111561138b575f80fd5b818501915085601f83011261139e575f80fd5b8135818111156113b0576113b0611326565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156113f6576113f6611326565b8160405282815288602084870101111561140e575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f6020828403121561143f575f80fd5b8135610da781611305565b5f6020828403121561145a575f80fd5b8151610da781611305565b5f8251611476818460208701611293565b919091019291505056fea164736f6c6343000818000a", +} + +var ScrollCrossDomainGovernorABI = ScrollCrossDomainGovernorMetaData.ABI + +var ScrollCrossDomainGovernorBin = ScrollCrossDomainGovernorMetaData.Bin + +func DeployScrollCrossDomainGovernor(auth *bind.TransactOpts, backend bind.ContractBackend, crossDomainMessengerAddr common.Address, l1OwnerAddr common.Address) (common.Address, *types.Transaction, *ScrollCrossDomainGovernor, error) { + parsed, err := ScrollCrossDomainGovernorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ScrollCrossDomainGovernorBin), backend, crossDomainMessengerAddr, l1OwnerAddr) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ScrollCrossDomainGovernor{address: address, abi: *parsed, ScrollCrossDomainGovernorCaller: ScrollCrossDomainGovernorCaller{contract: contract}, ScrollCrossDomainGovernorTransactor: ScrollCrossDomainGovernorTransactor{contract: contract}, ScrollCrossDomainGovernorFilterer: ScrollCrossDomainGovernorFilterer{contract: contract}}, nil +} + +type ScrollCrossDomainGovernor struct { + address common.Address + abi abi.ABI + ScrollCrossDomainGovernorCaller + ScrollCrossDomainGovernorTransactor + ScrollCrossDomainGovernorFilterer +} + +type ScrollCrossDomainGovernorCaller struct { + contract *bind.BoundContract +} + +type ScrollCrossDomainGovernorTransactor struct { + contract *bind.BoundContract +} + +type ScrollCrossDomainGovernorFilterer struct { + contract *bind.BoundContract +} + +type ScrollCrossDomainGovernorSession struct { + Contract *ScrollCrossDomainGovernor + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ScrollCrossDomainGovernorCallerSession struct { + Contract *ScrollCrossDomainGovernorCaller + CallOpts bind.CallOpts +} + +type ScrollCrossDomainGovernorTransactorSession struct { + Contract *ScrollCrossDomainGovernorTransactor + TransactOpts bind.TransactOpts +} + +type ScrollCrossDomainGovernorRaw struct { + Contract *ScrollCrossDomainGovernor +} + +type ScrollCrossDomainGovernorCallerRaw struct { + Contract *ScrollCrossDomainGovernorCaller +} + +type ScrollCrossDomainGovernorTransactorRaw struct { + Contract *ScrollCrossDomainGovernorTransactor +} + +func NewScrollCrossDomainGovernor(address common.Address, backend bind.ContractBackend) (*ScrollCrossDomainGovernor, error) { + abi, err := abi.JSON(strings.NewReader(ScrollCrossDomainGovernorABI)) + if err != nil { + return nil, err + } + contract, err := bindScrollCrossDomainGovernor(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernor{address: address, abi: abi, ScrollCrossDomainGovernorCaller: ScrollCrossDomainGovernorCaller{contract: contract}, ScrollCrossDomainGovernorTransactor: ScrollCrossDomainGovernorTransactor{contract: contract}, ScrollCrossDomainGovernorFilterer: ScrollCrossDomainGovernorFilterer{contract: contract}}, nil +} + +func NewScrollCrossDomainGovernorCaller(address common.Address, caller bind.ContractCaller) (*ScrollCrossDomainGovernorCaller, error) { + contract, err := bindScrollCrossDomainGovernor(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorCaller{contract: contract}, nil +} + +func NewScrollCrossDomainGovernorTransactor(address common.Address, transactor bind.ContractTransactor) (*ScrollCrossDomainGovernorTransactor, error) { + contract, err := bindScrollCrossDomainGovernor(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorTransactor{contract: contract}, nil +} + +func NewScrollCrossDomainGovernorFilterer(address common.Address, filterer bind.ContractFilterer) (*ScrollCrossDomainGovernorFilterer, error) { + contract, err := bindScrollCrossDomainGovernor(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorFilterer{contract: contract}, nil +} + +func bindScrollCrossDomainGovernor(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ScrollCrossDomainGovernorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollCrossDomainGovernor.Contract.ScrollCrossDomainGovernorCaller.contract.Call(opts, result, method, params...) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.ScrollCrossDomainGovernorTransactor.contract.Transfer(opts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.ScrollCrossDomainGovernorTransactor.contract.Transact(opts, method, params...) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollCrossDomainGovernor.Contract.contract.Call(opts, result, method, params...) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.contract.Transfer(opts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.contract.Transact(opts, method, params...) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCaller) CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollCrossDomainGovernor.contract.Call(opts, &out, "crossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) CrossDomainMessenger() (common.Address, error) { + return _ScrollCrossDomainGovernor.Contract.CrossDomainMessenger(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCallerSession) CrossDomainMessenger() (common.Address, error) { + return _ScrollCrossDomainGovernor.Contract.CrossDomainMessenger(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCaller) L1Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollCrossDomainGovernor.contract.Call(opts, &out, "l1Owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) L1Owner() (common.Address, error) { + return _ScrollCrossDomainGovernor.Contract.L1Owner(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCallerSession) L1Owner() (common.Address, error) { + return _ScrollCrossDomainGovernor.Contract.L1Owner(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollCrossDomainGovernor.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) Owner() (common.Address, error) { + return _ScrollCrossDomainGovernor.Contract.Owner(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCallerSession) Owner() (common.Address, error) { + return _ScrollCrossDomainGovernor.Contract.Owner(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ScrollCrossDomainGovernor.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) TypeAndVersion() (string, error) { + return _ScrollCrossDomainGovernor.Contract.TypeAndVersion(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorCallerSession) TypeAndVersion() (string, error) { + return _ScrollCrossDomainGovernor.Contract.TypeAndVersion(&_ScrollCrossDomainGovernor.CallOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactor) AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.contract.Transact(opts, "acceptL1Ownership") +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.AcceptL1Ownership(&_ScrollCrossDomainGovernor.TransactOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorSession) AcceptL1Ownership() (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.AcceptL1Ownership(&_ScrollCrossDomainGovernor.TransactOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.contract.Transact(opts, "acceptOwnership") +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.AcceptOwnership(&_ScrollCrossDomainGovernor.TransactOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.AcceptOwnership(&_ScrollCrossDomainGovernor.TransactOpts) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactor) Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.contract.Transact(opts, "forward", target, data) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.Forward(&_ScrollCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorSession) Forward(target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.Forward(&_ScrollCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactor) ForwardDelegate(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.contract.Transact(opts, "forwardDelegate", target, data) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) ForwardDelegate(target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.ForwardDelegate(&_ScrollCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorSession) ForwardDelegate(target common.Address, data []byte) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.ForwardDelegate(&_ScrollCrossDomainGovernor.TransactOpts, target, data) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactor) TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.contract.Transact(opts, "transferL1Ownership", to) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.TransferL1Ownership(&_ScrollCrossDomainGovernor.TransactOpts, to) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorSession) TransferL1Ownership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.TransferL1Ownership(&_ScrollCrossDomainGovernor.TransactOpts, to) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.contract.Transact(opts, "transferOwnership", to) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.TransferOwnership(&_ScrollCrossDomainGovernor.TransactOpts, to) +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollCrossDomainGovernor.Contract.TransferOwnership(&_ScrollCrossDomainGovernor.TransactOpts, to) +} + +type ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator struct { + Event *ScrollCrossDomainGovernorL1OwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorL1OwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainGovernorL1OwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.FilterLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator{contract: _ScrollCrossDomainGovernor.contract, event: "L1OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.WatchLogs(opts, "L1OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainGovernorL1OwnershipTransferRequested) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) ParseL1OwnershipTransferRequested(log types.Log) (*ScrollCrossDomainGovernorL1OwnershipTransferRequested, error) { + event := new(ScrollCrossDomainGovernorL1OwnershipTransferRequested) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollCrossDomainGovernorL1OwnershipTransferredIterator struct { + Event *ScrollCrossDomainGovernorL1OwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainGovernorL1OwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorL1OwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainGovernorL1OwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainGovernorL1OwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainGovernorL1OwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorL1OwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.FilterLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorL1OwnershipTransferredIterator{contract: _ScrollCrossDomainGovernor.contract, event: "L1OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.WatchLogs(opts, "L1OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainGovernorL1OwnershipTransferred) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) ParseL1OwnershipTransferred(log types.Log) (*ScrollCrossDomainGovernorL1OwnershipTransferred, error) { + event := new(ScrollCrossDomainGovernorL1OwnershipTransferred) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "L1OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollCrossDomainGovernorOwnershipTransferRequestedIterator struct { + Event *ScrollCrossDomainGovernorOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainGovernorOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainGovernorOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainGovernorOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainGovernorOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorOwnershipTransferRequestedIterator{contract: _ScrollCrossDomainGovernor.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainGovernorOwnershipTransferRequested) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) ParseOwnershipTransferRequested(log types.Log) (*ScrollCrossDomainGovernorOwnershipTransferRequested, error) { + event := new(ScrollCrossDomainGovernorOwnershipTransferRequested) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollCrossDomainGovernorOwnershipTransferredIterator struct { + Event *ScrollCrossDomainGovernorOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollCrossDomainGovernorOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollCrossDomainGovernorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollCrossDomainGovernorOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollCrossDomainGovernorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollCrossDomainGovernorOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollCrossDomainGovernorOwnershipTransferredIterator{contract: _ScrollCrossDomainGovernor.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollCrossDomainGovernor.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollCrossDomainGovernorOwnershipTransferred) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernorFilterer) ParseOwnershipTransferred(log types.Log) (*ScrollCrossDomainGovernorOwnershipTransferred, error) { + event := new(ScrollCrossDomainGovernorOwnershipTransferred) + if err := _ScrollCrossDomainGovernor.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (ScrollCrossDomainGovernorL1OwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0x55eb94b097b1cd6441a2403b6e04742bd36cfd6e6905ea13cbc5879d26e5b20f") +} + +func (ScrollCrossDomainGovernorL1OwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0xb0121dbcab67289d5cb13a1f35ca086715f35ef418e0eda134c4145a086b6272") +} + +func (ScrollCrossDomainGovernorOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ScrollCrossDomainGovernorOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (_ScrollCrossDomainGovernor *ScrollCrossDomainGovernor) Address() common.Address { + return _ScrollCrossDomainGovernor.address +} + +type ScrollCrossDomainGovernorInterface interface { + CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) + + L1Owner(opts *bind.CallOpts) (common.Address, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptL1Ownership(opts *bind.TransactOpts) (*types.Transaction, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + Forward(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + ForwardDelegate(opts *bind.TransactOpts, target common.Address, data []byte) (*types.Transaction, error) + + TransferL1Ownership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + FilterL1OwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorL1OwnershipTransferRequestedIterator, error) + + WatchL1OwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorL1OwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferRequested(log types.Log) (*ScrollCrossDomainGovernorL1OwnershipTransferRequested, error) + + FilterL1OwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorL1OwnershipTransferredIterator, error) + + WatchL1OwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorL1OwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1OwnershipTransferred(log types.Log) (*ScrollCrossDomainGovernorL1OwnershipTransferred, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ScrollCrossDomainGovernorOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollCrossDomainGovernorOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollCrossDomainGovernorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ScrollCrossDomainGovernorOwnershipTransferred, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/v1_0_0/scroll_cross_domain_governor/scroll_cross_domain_governor_metadata.go b/gethwrappers/l2ep/generated/v1_0_0/scroll_cross_domain_governor/scroll_cross_domain_governor_metadata.go new file mode 100644 index 0000000000..acb3765d31 --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/scroll_cross_domain_governor/scroll_cross_domain_governor_metadata.go @@ -0,0 +1,7 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + + +package scroll_cross_domain_governor + +var SolidityStandardInput = "{\"version\":\"v0.8.24+commit.e11b9ed9\",\"language\":\"Solidity\",\"settings\":{\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":true,\"bytecodeHash\":\"none\",\"useLiteralContent\":false},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"outputSelection\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"node_modules/@scroll-tech/contracts/libraries/IScrollMessenger.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/CrossDomainForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/CrossDomainOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/ICrossDomainOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/IDelegateForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/IForwarder.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/scroll/ScrollCrossDomainGovernor.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]}},\"remappings\":[\"forge-std/=src/v0.8/vendor/forge-std/src/\",\"@openzeppelin/contracts@4.7.3/=node_modules/@openzeppelin/contracts-4.7.3/\",\"@openzeppelin/contracts@4.8.3/=node_modules/@openzeppelin/contracts-4.8.3/\",\"@openzeppelin/contracts@4.9.6/=node_modules/@openzeppelin/contracts-4.9.6/\",\"@openzeppelin/contracts@5.0.2/=node_modules/@openzeppelin/contracts-5.0.2/\",\"@openzeppelin/contracts@5.1.0/=node_modules/@openzeppelin/contracts-5.1.0/\",\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@arbitrum/=node_modules/@arbitrum/\",\"hardhat/=node_modules/hardhat/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@zksync/=node_modules/@zksync/\"],\"viaIR\":false},\"sources\":{\"node_modules/@openzeppelin/contracts-4.7.3/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length \\u003e 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance \\u003e= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance \\u003e= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length \\u003e 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\"},\"node_modules/@scroll-tech/contracts/libraries/IScrollMessenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\ninterface IScrollMessenger {\\n /**********\\n * Events *\\n **********/\\n\\n /// @notice Emitted when a cross domain message is sent.\\n /// @param sender The address of the sender who initiates the message.\\n /// @param target The address of target contract to call.\\n /// @param value The amount of value passed to the target contract.\\n /// @param messageNonce The nonce of the message.\\n /// @param gasLimit The optional gas limit passed to L1 or L2.\\n /// @param message The calldata passed to the target contract.\\n event SentMessage(\\n address indexed sender,\\n address indexed target,\\n uint256 value,\\n uint256 messageNonce,\\n uint256 gasLimit,\\n bytes message\\n );\\n\\n /// @notice Emitted when a cross domain message is relayed successfully.\\n /// @param messageHash The hash of the message.\\n event RelayedMessage(bytes32 indexed messageHash);\\n\\n /// @notice Emitted when a cross domain message is failed to relay.\\n /// @param messageHash The hash of the message.\\n event FailedRelayedMessage(bytes32 indexed messageHash);\\n\\n /**********\\n * Errors *\\n **********/\\n\\n /// @dev Thrown when the given address is `address(0)`.\\n error ErrorZeroAddress();\\n\\n /*************************\\n * Public View Functions *\\n *************************/\\n\\n /// @notice Return the sender of a cross domain message.\\n function xDomainMessageSender() external view returns (address);\\n\\n /*****************************\\n * Public Mutating Functions *\\n *****************************/\\n\\n /// @notice Send cross chain message from L1 to L2 or L2 to L1.\\n /// @param target The address of account who receive the message.\\n /// @param value The amount of ether passed when call target contract.\\n /// @param message The content of the message.\\n /// @param gasLimit Gas limit required to complete the message relay on corresponding chain.\\n function sendMessage(\\n address target,\\n uint256 value,\\n bytes calldata message,\\n uint256 gasLimit\\n ) external payable;\\n\\n /// @notice Send cross chain message from L1 to L2 or L2 to L1.\\n /// @param target The address of account who receive the message.\\n /// @param value The amount of ether passed when call target contract.\\n /// @param message The content of the message.\\n /// @param gasLimit Gas limit required to complete the message relay on corresponding chain.\\n /// @param refundAddress The address of account who will receive the refunded fee.\\n function sendMessage(\\n address target,\\n uint256 value,\\n bytes calldata message,\\n uint256 gasLimit,\\n address refundAddress\\n ) external payable;\\n}\\n\"},\"src/v0.8/l2ep/CrossDomainForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {CrossDomainOwnable} from \\\"./CrossDomainOwnable.sol\\\";\\nimport {IForwarder} from \\\"./interfaces/IForwarder.sol\\\";\\n\\n/**\\n * @title CrossDomainForwarder - L1 xDomain account representation\\n * @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n * destination.\\n * @dev Any other L2 contract which uses this contract's address as a privileged position,\\n * can consider that position to be held by the `l1Owner`\\n */\\nabstract contract CrossDomainForwarder is IForwarder, CrossDomainOwnable {}\\n\"},\"src/v0.8/l2ep/CrossDomainOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwner} from \\\"../shared/access/ConfirmedOwner.sol\\\";\\nimport {ICrossDomainOwnable} from \\\"./interfaces/ICrossDomainOwnable.sol\\\";\\n\\n/**\\n * @title The CrossDomainOwnable contract\\n * @notice A contract with helpers for cross-domain contract ownership.\\n */\\ncontract CrossDomainOwnable is ICrossDomainOwnable, ConfirmedOwner {\\n address internal s_l1Owner;\\n address internal s_l1PendingOwner;\\n\\n constructor(\\n address newl1Owner\\n ) ConfirmedOwner(msg.sender) {\\n _setL1Owner(newl1Owner);\\n }\\n\\n /**\\n * @notice transfer ownership of this account to a new L1 owner\\n * @param to new L1 owner that will be allowed to call the forward fn\\n */\\n function transferL1Ownership(\\n address to\\n ) public virtual override onlyL1Owner {\\n _transferL1Ownership(to);\\n }\\n\\n /**\\n * @notice accept ownership of this account to a new L1 owner\\n */\\n function acceptL1Ownership() public virtual override onlyProposedL1Owner {\\n _setL1Owner(s_l1PendingOwner);\\n }\\n\\n /**\\n * @notice Get the current owner\\n */\\n function l1Owner() public view override returns (address) {\\n return s_l1Owner;\\n }\\n\\n /**\\n * @notice validate, transfer ownership, and emit relevant events\\n */\\n function _transferL1Ownership(\\n address to\\n ) internal {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_l1PendingOwner = to;\\n\\n emit L1OwnershipTransferRequested(s_l1Owner, to);\\n }\\n\\n /**\\n * @notice set ownership, emit relevant events. Used in acceptOwnership()\\n */\\n function _setL1Owner(\\n address to\\n ) internal {\\n address oldOwner = s_l1Owner;\\n s_l1Owner = to;\\n s_l1PendingOwner = address(0);\\n\\n emit L1OwnershipTransferred(oldOwner, to);\\n }\\n\\n /**\\n * @notice Reverts if called by anyone other than the L1 owner.\\n */\\n modifier onlyL1Owner() virtual {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_l1Owner, \\\"Only callable by L1 owner\\\");\\n _;\\n }\\n\\n /**\\n * @notice Reverts if called by anyone other than the L1 owner.\\n */\\n modifier onlyProposedL1Owner() virtual {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_l1PendingOwner, \\\"Only callable by proposed L1 owner\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/l2ep/interfaces/ICrossDomainOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title A contract with helpers for cross-domain contract ownership\\ninterface ICrossDomainOwnable {\\n event L1OwnershipTransferRequested(address indexed from, address indexed to);\\n\\n event L1OwnershipTransferred(address indexed from, address indexed to);\\n\\n function l1Owner() external returns (address);\\n\\n function transferL1Ownership(\\n address recipient\\n ) external;\\n\\n function acceptL1Ownership() external;\\n}\\n\"},\"src/v0.8/l2ep/interfaces/IDelegateForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title Forwards a delegatecall to a target, under some conditions\\ninterface IDelegateForwarder {\\n /// @notice forward delegatecalls the `target` with `data`\\n /// @param target contract address to be delegatecalled\\n /// @param data to send to target contract\\n function forwardDelegate(address target, bytes memory data) external;\\n}\\n\"},\"src/v0.8/l2ep/interfaces/IForwarder.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/// @title Forwards a call to a target, under some conditions\\ninterface IForwarder {\\n /// @notice forward calls the `target` with `data`\\n /// @param target contract address to be called\\n /// @param data to send to target contract\\n function forward(address target, bytes memory data) external;\\n}\\n\"},\"src/v0.8/l2ep/scroll/ScrollCrossDomainGovernor.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\nimport {IDelegateForwarder} from \\\"../interfaces/IDelegateForwarder.sol\\\";\\n// solhint-disable-next-line no-unused-import\\nimport {IForwarder} from \\\"../interfaces/IForwarder.sol\\\";\\n\\nimport {CrossDomainForwarder} from \\\"../CrossDomainForwarder.sol\\\";\\nimport {CrossDomainOwnable} from \\\"../CrossDomainOwnable.sol\\\";\\n\\nimport {Address} from \\\"@openzeppelin/contracts@4.7.3/utils/Address.sol\\\";\\nimport {IScrollMessenger} from \\\"@scroll-tech/contracts/libraries/IScrollMessenger.sol\\\";\\n\\n/// @title ScrollCrossDomainGovernor - L1 xDomain account representation (with delegatecall support) for Scroll\\n/// @notice L2 Contract which receives messages from a specific L1 address and transparently forwards them to the\\n/// destination.\\n/// @dev Any other L2 contract which uses this contract's address as a privileged position,\\n/// can be considered to be simultaneously owned by the `l1Owner` and L2 `owner`\\ncontract ScrollCrossDomainGovernor is IDelegateForwarder, ITypeAndVersion, CrossDomainForwarder {\\n string public constant override typeAndVersion = \\\"ScrollCrossDomainGovernor 1.0.0\\\";\\n\\n address internal immutable i_scrollCrossDomainMessenger;\\n\\n /// @param crossDomainMessengerAddr the xDomain bridge messenger (Scroll bridge L2) contract address\\n /// @param l1OwnerAddr the L1 owner address that will be allowed to call the forward fn\\n constructor(IScrollMessenger crossDomainMessengerAddr, address l1OwnerAddr) CrossDomainOwnable(l1OwnerAddr) {\\n // solhint-disable-next-line gas-custom-errors\\n require(address(crossDomainMessengerAddr) != address(0), \\\"Invalid xDomain Messenger address\\\");\\n i_scrollCrossDomainMessenger = address(crossDomainMessengerAddr);\\n }\\n\\n /// @inheritdoc IForwarder\\n /// @dev forwarded only if L2 Messenger calls with `msg.sender` being the L1 owner address, or called by the L2 owner\\n function forward(address target, bytes memory data) external override onlyLocalOrCrossDomainOwner {\\n Address.functionCall(target, data, \\\"Governor call reverted\\\");\\n }\\n\\n /// @inheritdoc IDelegateForwarder\\n /// @dev forwarded only if L2 Messenger calls with `msg.sender` being the L1 owner address, or called by the L2 owner\\n function forwardDelegate(address target, bytes memory data) external override onlyLocalOrCrossDomainOwner {\\n Address.functionDelegateCall(target, data, \\\"Governor delegatecall reverted\\\");\\n }\\n\\n /// @notice The address of the Scroll Cross Domain Messenger contract\\n function crossDomainMessenger() external view returns (address) {\\n return address(i_scrollCrossDomainMessenger);\\n }\\n\\n /// @notice The call MUST come from the L1 owner (via cross-chain message.) Reverts otherwise.\\n modifier onlyL1Owner() override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == i_scrollCrossDomainMessenger, \\\"Sender is not the L2 messenger\\\");\\n // solhint-disable-next-line gas-custom-errors\\n require(\\n IScrollMessenger(i_scrollCrossDomainMessenger).xDomainMessageSender() == l1Owner(),\\n \\\"xDomain sender is not the L1 owner\\\"\\n );\\n _;\\n }\\n\\n /// @notice The call MUST come from either the L1 owner (via cross-chain message) or the L2 owner. Reverts otherwise.\\n modifier onlyLocalOrCrossDomainOwner() {\\n // 1. The delegatecall MUST come from either the L1 owner (via cross-chain message) or the L2 owner\\n // solhint-disable-next-line gas-custom-errors\\n require(\\n msg.sender == i_scrollCrossDomainMessenger || msg.sender == owner(), \\\"Sender is not the L2 messenger or owner\\\"\\n );\\n // 2. The L2 Messenger's caller MUST be the L1 Owner\\n if (msg.sender == i_scrollCrossDomainMessenger) {\\n // solhint-disable-next-line gas-custom-errors\\n require(\\n IScrollMessenger(i_scrollCrossDomainMessenger).xDomainMessageSender() == l1Owner(),\\n \\\"xDomain sender is not the L1 owner\\\"\\n );\\n }\\n _;\\n }\\n\\n /// @notice The call MUST come from the proposed L1 owner (via cross-chain message.) Reverts otherwise.\\n modifier onlyProposedL1Owner() override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == i_scrollCrossDomainMessenger, \\\"Sender is not the L2 messenger\\\");\\n // solhint-disable-next-line gas-custom-errors\\n require(\\n IScrollMessenger(i_scrollCrossDomainMessenger).xDomainMessageSender() == s_l1PendingOwner,\\n \\\"Must be proposed L1 owner\\\"\\n );\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(\\n address newOwner\\n ) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(\\n address to\\n ) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(\\n address to\\n ) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(\\n address recipient\\n ) external;\\n\\n function acceptOwnership() external;\\n}\\n\"},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ITypeAndVersion {\\n function typeAndVersion() external pure returns (string memory);\\n}\\n\"}}}" diff --git a/gethwrappers/l2ep/generated/v1_0_0/scroll_sequencer_uptime_feed/scroll_sequencer_uptime_feed.go b/gethwrappers/l2ep/generated/v1_0_0/scroll_sequencer_uptime_feed/scroll_sequencer_uptime_feed.go new file mode 100644 index 0000000000..2a957ec0d3 --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/scroll_sequencer_uptime_feed/scroll_sequencer_uptime_feed.go @@ -0,0 +1,2187 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package scroll_sequencer_uptime_feed + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ScrollSequencerUptimeFeedMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"l1SenderAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2CrossDomainMessengerAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStatus\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"description\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAnswer\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRoundData\",\"inputs\":[{\"name\":\"_roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"outputs\":[{\"name\":\"roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"},{\"name\":\"answer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"answeredInRound\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTimestamp\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_calldata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1Sender\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestAnswer\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestRound\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestRoundData\",\"inputs\":[],\"outputs\":[{\"name\":\"roundId\",\"type\":\"uint80\",\"internalType\":\"uint80\"},{\"name\":\"answer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"answeredInRound\",\"type\":\"uint80\",\"internalType\":\"uint80\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferL1Sender\",\"inputs\":[{\"name\":\"newSender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AddedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AnswerUpdated\",\"inputs\":[{\"name\":\"current\",\"type\":\"int256\",\"indexed\":true,\"internalType\":\"int256\"},{\"name\":\"roundId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"L1SenderTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewRound\",\"inputs\":[{\"name\":\"roundId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"startedBy\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"startedAt\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemovedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RoundUpdated\",\"inputs\":[{\"name\":\"status\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"updatedAt\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UpdateIgnored\",\"inputs\":[{\"name\":\"latestStatus\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"latestTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"incomingStatus\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"},{\"name\":\"incomingTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidSender\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoDataPresent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]}]", + Bin: "0x6101206040525f60a081905260c081905260e081905261010052600480546001600160d81b031916905534801562000035575f80fd5b5060405162001ec738038062001ec7833981016040819052620000589162000413565b828133805f81620000b05760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000e257620000e2816200014f565b50506001805460ff60a01b1916600160a01b179055506200010382620001f9565b620001116001824262000262565b50506001600160a01b0382166200013b5760405163d92e233d60e01b815260040160405180910390fd5b506001600160a01b03166080525062000461565b336001600160a01b03821603620001a95760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620000a7565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6003546001600160a01b0390811690821681146200025e57600380546001600160a01b0319166001600160a01b0384811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18905f90a35b5050565b60408051606080820183526001600160401b0384811680845242821660208086018281528915158789018181526001600160501b038d165f818152600586528b902099518a54945192511515600160801b0260ff60801b19938a1668010000000000000000026001600160801b03199096169190991617939093171695909517909655865160808101885286815280820184905280880183905290940183905260048054600160d01b90940260ff60d01b19600160901b90930292909216600160901b600160d81b03196a010000000000000000000085026001600160901b0319909616881795909517949094169390931717909155925192835233927f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271910160405180910390a36001600160501b0383166200039f83620003e0565b6040516001600160401b03841681527f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f9060200160405180910390a3505050565b5f81620003ee575f620003f1565b60015b92915050565b80516001600160a01b03811681146200040e575f80fd5b919050565b5f805f6060848603121562000426575f80fd5b6200043184620003f7565b92506200044160208501620003f7565b91506040840151801515811462000456575f80fd5b809150509250925092565b608051611a46620004815f395f818161124601526112870152611a465ff3fe608060405234801561000f575f80fd5b5060043610610184575f3560e01c80638205bf6a116100dd578063b633620c11610088578063ed8378f511610063578063ed8378f514610390578063f2fde38b146103a3578063feaf968c146103b6575f80fd5b8063b633620c1461033a578063b7558b7a1461034d578063dc7f01241461036b575f80fd5b80639a6fc8f5116100b85780639a6fc8f5146102ca578063a118f24914610314578063b5ab58dc14610327575f80fd5b80638205bf6a146102715780638823da6c146102795780638da5cb5b1461028c575f80fd5b806354fd4d501161013d5780637284e416116101185780637284e4161461022557806379ba5097146102615780638038e4a114610269575f80fd5b806354fd4d50146101f2578063668a0f02146101fa5780636b14daf814610202575f80fd5b8063284afc081161016d578063284afc08146101b0578063313ce567146101c357806350d25bcd146101dc575f80fd5b80630a75698314610188578063181f5a7714610192575b5f80fd5b6101906103be565b005b61019a61043c565b6040516101a79190611776565b60405180910390f35b6101906101be366004611801565b610458565b6101ca5f81565b60405160ff90911681526020016101a7565b6101e461046c565b6040519081526020016101a7565b6101e4600181565b6101e4610549565b610215610210366004611849565b610602565b60405190151581526020016101a7565b61019a6040518060400160405280601f81526020017f4c322053657175656e63657220557074696d652053746174757320466565640081525081565b610190610634565b610190610730565b6101e46107c3565b610190610287366004611801565b610888565b5f5473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a7565b6102dd6102d8366004611925565b61093f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016101a7565b610190610322366004611801565b610a9f565b6101e461033536600461194e565b610b51565b6101e461034836600461194e565b610c77565b60035473ffffffffffffffffffffffffffffffffffffffff166102a5565b6001546102159074010000000000000000000000000000000000000000900460ff1681565b61019061039e366004611965565b610d84565b6101906103b1366004611801565b610f32565b6102dd610f43565b6103c6611076565b60015474010000000000000000000000000000000000000000900460ff161561043a57600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638905f90a15b565b604051806060016040528060238152602001611a176023913981565b610460611076565b610469816110f6565b50565b5f6104ac335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610517576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20616363657373000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600454610544907a010000000000000000000000000000000000000000000000000000900460ff16611190565b905090565b5f610589335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b6105ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b5060045469ffffffffffffffffffff1690565b5f61060d83836111a4565b8061062d575073ffffffffffffffffffffffffffffffffffffffff831632145b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146106b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161050e565b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610738611076565b60015474010000000000000000000000000000000000000000900460ff1661043a57600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480905f90a1565b5f610803335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b506004546a0100000000000000000000900467ffffffffffffffff1690565b610890611076565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff16156104695773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d191015b60405180910390a150565b5f805f805f610983335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b6109e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b6109fe8669ffffffffffffffffffff166111f8565b610a34576040517fbb25870000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b69ffffffffffffffffffff86165f90815260056020526040902080548790610a7290700100000000000000000000000000000000900460ff16611190565b91549098919767ffffffffffffffff80831698506801000000000000000090920490911695509350915050565b610aa7611076565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff166104695773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49101610934565b5f610b91335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b610c00826111f8565b610c36576040517fbb25870000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b69ffffffffffffffffffff82165f90815260056020526040902054610c7190700100000000000000000000000000000000900460ff16611190565b92915050565b5f610cb7335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610d1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b610d26826111f8565b610d5c576040517fbb25870000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5069ffffffffffffffffffff165f9081526005602052604090205467ffffffffffffffff1690565b600354610da69073ffffffffffffffffffffffffffffffffffffffff1661122e565b5f610e53604080516080810182525f808252602082018190529181018290526060810191909152506040805160808101825260045469ffffffffffffffffffff811682526a0100000000000000000000810467ffffffffffffffff90811660208401527201000000000000000000000000000000000000820416928201929092527a01000000000000000000000000000000000000000000000000000090910460ff161515606082015290565b90508167ffffffffffffffff16816020015167ffffffffffffffff161115610ee4577fe4a6e16301740042c17431042adb8f60454c18fb5934dd4c456269c0dc388fdf816060015182602001518585604051610ed79493929190931515845267ffffffffffffffff9283166020850152901515604084015216606082015260800190565b60405180910390a1505050565b8215158160600151151503610f04578051610eff9084611362565b505050565b6001815f01818151610f1691906119ac565b69ffffffffffffffffffff169052508051610eff908484611450565b610f3a611076565b61046981611682565b5f805f805f610f87335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061060292505050565b610fed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161050e565b6004805469ffffffffffffffffffff811690611029907a010000000000000000000000000000000000000000000000000000900460ff16611190565b9154909791965067ffffffffffffffff6a01000000000000000000008204811696507201000000000000000000000000000000000000820416945069ffffffffffffffffffff1692509050565b5f5473ffffffffffffffffffffffffffffffffffffffff16331461043a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161050e565b60035473ffffffffffffffffffffffffffffffffffffffff908116908216811461118c57600380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84811691821790925560405190918316907f8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18905f90a35b5050565b5f8161119c575f610c71565b600192915050565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081205460ff168061062d57505060015474010000000000000000000000000000000000000000900460ff161592915050565b5f8082118015611212575069ffffffffffffffffffff8211155b8015610c7157505060045469ffffffffffffffffffff16101590565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614158061132b57508073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636e296e456040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131291906119fb565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610469576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b69ffffffffffffffffffff82165f90815260056020526040902080547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff16680100000000000000004267ffffffffffffffff1690810291909117909155600480547fffffffffffff0000000000000000ffffffffffffffffffffffffffffffffffff1672010000000000000000000000000000000000009092029190911790557f297642343ed2faefb1a411b39fc449eae700e54223d5d0499a9421eb6f68f66a61142c82611190565b6040805191825267ffffffffffffffff421660208301520160405180910390a15050565b604080516060808201835267ffffffffffffffff848116808452428216602080860182815289151587890181815269ffffffffffffffffffff8d165f818152600586528b902099518a54945192511515700100000000000000000000000000000000027fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff938a1668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090961691909916179390931716959095179096558651608081018852868152808201849052808801839052909401839052600480547a0100000000000000000000000000000000000000000000000000009094027fffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffff7201000000000000000000000000000000000000909302929092167fffffffffff000000000000000000ffffffffffffffffffffffffffffffffffff6a010000000000000000000085027fffffffffffffffffffffffffffff000000000000000000000000000000000000909616881795909517949094169390931717909155925192835233927f0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271910160405180910390a38269ffffffffffffffffffff1661164083611190565b60405167ffffffffffffffff841681527f0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f9060200160405180910390a3505050565b3373ffffffffffffffffffffffffffffffffffffffff821603611701576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161050e565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f602080835283518060208501525f5b818110156117a257858101830151858201604001528201611786565b505f6040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b73ffffffffffffffffffffffffffffffffffffffff81168114610469575f80fd5b5f60208284031215611811575f80fd5b813561062d816117e0565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f806040838503121561185a575f80fd5b8235611865816117e0565b9150602083013567ffffffffffffffff80821115611881575f80fd5b818501915085601f830112611894575f80fd5b8135818111156118a6576118a661181c565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156118ec576118ec61181c565b81604052828152886020848701011115611904575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215611935575f80fd5b813569ffffffffffffffffffff8116811461062d575f80fd5b5f6020828403121561195e575f80fd5b5035919050565b5f8060408385031215611976575f80fd5b82358015158114611985575f80fd5b9150602083013567ffffffffffffffff811681146119a1575f80fd5b809150509250929050565b69ffffffffffffffffffff8181168382160190808211156119f4577f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5092915050565b5f60208284031215611a0b575f80fd5b815161062d816117e056fe5363726f6c6c53657175656e636572557074696d654665656420312e312e302d646576a164736f6c6343000818000a", +} + +var ScrollSequencerUptimeFeedABI = ScrollSequencerUptimeFeedMetaData.ABI + +var ScrollSequencerUptimeFeedBin = ScrollSequencerUptimeFeedMetaData.Bin + +func DeployScrollSequencerUptimeFeed(auth *bind.TransactOpts, backend bind.ContractBackend, l1SenderAddress common.Address, l2CrossDomainMessengerAddr common.Address, initialStatus bool) (common.Address, *types.Transaction, *ScrollSequencerUptimeFeed, error) { + parsed, err := ScrollSequencerUptimeFeedMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ScrollSequencerUptimeFeedBin), backend, l1SenderAddress, l2CrossDomainMessengerAddr, initialStatus) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ScrollSequencerUptimeFeed{address: address, abi: *parsed, ScrollSequencerUptimeFeedCaller: ScrollSequencerUptimeFeedCaller{contract: contract}, ScrollSequencerUptimeFeedTransactor: ScrollSequencerUptimeFeedTransactor{contract: contract}, ScrollSequencerUptimeFeedFilterer: ScrollSequencerUptimeFeedFilterer{contract: contract}}, nil +} + +type ScrollSequencerUptimeFeed struct { + address common.Address + abi abi.ABI + ScrollSequencerUptimeFeedCaller + ScrollSequencerUptimeFeedTransactor + ScrollSequencerUptimeFeedFilterer +} + +type ScrollSequencerUptimeFeedCaller struct { + contract *bind.BoundContract +} + +type ScrollSequencerUptimeFeedTransactor struct { + contract *bind.BoundContract +} + +type ScrollSequencerUptimeFeedFilterer struct { + contract *bind.BoundContract +} + +type ScrollSequencerUptimeFeedSession struct { + Contract *ScrollSequencerUptimeFeed + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ScrollSequencerUptimeFeedCallerSession struct { + Contract *ScrollSequencerUptimeFeedCaller + CallOpts bind.CallOpts +} + +type ScrollSequencerUptimeFeedTransactorSession struct { + Contract *ScrollSequencerUptimeFeedTransactor + TransactOpts bind.TransactOpts +} + +type ScrollSequencerUptimeFeedRaw struct { + Contract *ScrollSequencerUptimeFeed +} + +type ScrollSequencerUptimeFeedCallerRaw struct { + Contract *ScrollSequencerUptimeFeedCaller +} + +type ScrollSequencerUptimeFeedTransactorRaw struct { + Contract *ScrollSequencerUptimeFeedTransactor +} + +func NewScrollSequencerUptimeFeed(address common.Address, backend bind.ContractBackend) (*ScrollSequencerUptimeFeed, error) { + abi, err := abi.JSON(strings.NewReader(ScrollSequencerUptimeFeedABI)) + if err != nil { + return nil, err + } + contract, err := bindScrollSequencerUptimeFeed(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeed{address: address, abi: abi, ScrollSequencerUptimeFeedCaller: ScrollSequencerUptimeFeedCaller{contract: contract}, ScrollSequencerUptimeFeedTransactor: ScrollSequencerUptimeFeedTransactor{contract: contract}, ScrollSequencerUptimeFeedFilterer: ScrollSequencerUptimeFeedFilterer{contract: contract}}, nil +} + +func NewScrollSequencerUptimeFeedCaller(address common.Address, caller bind.ContractCaller) (*ScrollSequencerUptimeFeedCaller, error) { + contract, err := bindScrollSequencerUptimeFeed(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedCaller{contract: contract}, nil +} + +func NewScrollSequencerUptimeFeedTransactor(address common.Address, transactor bind.ContractTransactor) (*ScrollSequencerUptimeFeedTransactor, error) { + contract, err := bindScrollSequencerUptimeFeed(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedTransactor{contract: contract}, nil +} + +func NewScrollSequencerUptimeFeedFilterer(address common.Address, filterer bind.ContractFilterer) (*ScrollSequencerUptimeFeedFilterer, error) { + contract, err := bindScrollSequencerUptimeFeed(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedFilterer{contract: contract}, nil +} + +func bindScrollSequencerUptimeFeed(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ScrollSequencerUptimeFeedMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollSequencerUptimeFeed.Contract.ScrollSequencerUptimeFeedCaller.contract.Call(opts, result, method, params...) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.ScrollSequencerUptimeFeedTransactor.contract.Transfer(opts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.ScrollSequencerUptimeFeedTransactor.contract.Transact(opts, method, params...) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollSequencerUptimeFeed.Contract.contract.Call(opts, result, method, params...) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.contract.Transfer(opts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.contract.Transact(opts, method, params...) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) CheckEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "checkEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) CheckEnabled() (bool, error) { + return _ScrollSequencerUptimeFeed.Contract.CheckEnabled(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) CheckEnabled() (bool, error) { + return _ScrollSequencerUptimeFeed.Contract.CheckEnabled(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) Decimals(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "decimals") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) Decimals() (uint8, error) { + return _ScrollSequencerUptimeFeed.Contract.Decimals(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) Decimals() (uint8, error) { + return _ScrollSequencerUptimeFeed.Contract.Decimals(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) Description(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "description") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) Description() (string, error) { + return _ScrollSequencerUptimeFeed.Contract.Description(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) Description() (string, error) { + return _ScrollSequencerUptimeFeed.Contract.Description(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) GetAnswer(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "getAnswer", roundId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) GetAnswer(roundId *big.Int) (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.GetAnswer(&_ScrollSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) GetAnswer(roundId *big.Int) (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.GetAnswer(&_ScrollSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "getRoundData", _roundId) + + outstruct := new(GetRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _ScrollSequencerUptimeFeed.Contract.GetRoundData(&_ScrollSequencerUptimeFeed.CallOpts, _roundId) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) GetRoundData(_roundId *big.Int) (GetRoundData, + + error) { + return _ScrollSequencerUptimeFeed.Contract.GetRoundData(&_ScrollSequencerUptimeFeed.CallOpts, _roundId) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) GetTimestamp(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "getTimestamp", roundId) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) GetTimestamp(roundId *big.Int) (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.GetTimestamp(&_ScrollSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) GetTimestamp(roundId *big.Int) (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.GetTimestamp(&_ScrollSequencerUptimeFeed.CallOpts, roundId) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) HasAccess(opts *bind.CallOpts, _user common.Address, _calldata []byte) (bool, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "hasAccess", _user, _calldata) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) HasAccess(_user common.Address, _calldata []byte) (bool, error) { + return _ScrollSequencerUptimeFeed.Contract.HasAccess(&_ScrollSequencerUptimeFeed.CallOpts, _user, _calldata) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) HasAccess(_user common.Address, _calldata []byte) (bool, error) { + return _ScrollSequencerUptimeFeed.Contract.HasAccess(&_ScrollSequencerUptimeFeed.CallOpts, _user, _calldata) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) L1Sender(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "l1Sender") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) L1Sender() (common.Address, error) { + return _ScrollSequencerUptimeFeed.Contract.L1Sender(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) L1Sender() (common.Address, error) { + return _ScrollSequencerUptimeFeed.Contract.L1Sender(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) LatestAnswer(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "latestAnswer") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) LatestAnswer() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.LatestAnswer(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) LatestAnswer() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.LatestAnswer(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) LatestRound(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "latestRound") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) LatestRound() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.LatestRound(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) LatestRound() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.LatestRound(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "latestRoundData") + + outstruct := new(LatestRoundData) + if err != nil { + return *outstruct, err + } + + outstruct.RoundId = *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + outstruct.Answer = *abi.ConvertType(out[1], new(*big.Int)).(**big.Int) + outstruct.StartedAt = *abi.ConvertType(out[2], new(*big.Int)).(**big.Int) + outstruct.UpdatedAt = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int) + outstruct.AnsweredInRound = *abi.ConvertType(out[4], new(*big.Int)).(**big.Int) + + return *outstruct, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) LatestRoundData() (LatestRoundData, + + error) { + return _ScrollSequencerUptimeFeed.Contract.LatestRoundData(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) LatestRoundData() (LatestRoundData, + + error) { + return _ScrollSequencerUptimeFeed.Contract.LatestRoundData(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "latestTimestamp") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) LatestTimestamp() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.LatestTimestamp(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) LatestTimestamp() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.LatestTimestamp(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) Owner() (common.Address, error) { + return _ScrollSequencerUptimeFeed.Contract.Owner(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) Owner() (common.Address, error) { + return _ScrollSequencerUptimeFeed.Contract.Owner(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) TypeAndVersion() (string, error) { + return _ScrollSequencerUptimeFeed.Contract.TypeAndVersion(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) TypeAndVersion() (string, error) { + return _ScrollSequencerUptimeFeed.Contract.TypeAndVersion(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCaller) Version(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ScrollSequencerUptimeFeed.contract.Call(opts, &out, "version") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) Version() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.Version(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedCallerSession) Version() (*big.Int, error) { + return _ScrollSequencerUptimeFeed.Contract.Version(&_ScrollSequencerUptimeFeed.CallOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "acceptOwnership") +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.AcceptOwnership(&_ScrollSequencerUptimeFeed.TransactOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.AcceptOwnership(&_ScrollSequencerUptimeFeed.TransactOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "addAccess", _user) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.AddAccess(&_ScrollSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.AddAccess(&_ScrollSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "disableAccessCheck") +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) DisableAccessCheck() (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.DisableAccessCheck(&_ScrollSequencerUptimeFeed.TransactOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) DisableAccessCheck() (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.DisableAccessCheck(&_ScrollSequencerUptimeFeed.TransactOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "enableAccessCheck") +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) EnableAccessCheck() (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.EnableAccessCheck(&_ScrollSequencerUptimeFeed.TransactOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) EnableAccessCheck() (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.EnableAccessCheck(&_ScrollSequencerUptimeFeed.TransactOpts) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "removeAccess", _user) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.RemoveAccess(&_ScrollSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.RemoveAccess(&_ScrollSequencerUptimeFeed.TransactOpts, _user) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) TransferL1Sender(opts *bind.TransactOpts, newSender common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "transferL1Sender", newSender) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) TransferL1Sender(newSender common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.TransferL1Sender(&_ScrollSequencerUptimeFeed.TransactOpts, newSender) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) TransferL1Sender(newSender common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.TransferL1Sender(&_ScrollSequencerUptimeFeed.TransactOpts, newSender) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "transferOwnership", to) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.TransferOwnership(&_ScrollSequencerUptimeFeed.TransactOpts, to) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.TransferOwnership(&_ScrollSequencerUptimeFeed.TransactOpts, to) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactor) UpdateStatus(opts *bind.TransactOpts, status bool, timestamp uint64) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.contract.Transact(opts, "updateStatus", status, timestamp) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedSession) UpdateStatus(status bool, timestamp uint64) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.UpdateStatus(&_ScrollSequencerUptimeFeed.TransactOpts, status, timestamp) +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedTransactorSession) UpdateStatus(status bool, timestamp uint64) (*types.Transaction, error) { + return _ScrollSequencerUptimeFeed.Contract.UpdateStatus(&_ScrollSequencerUptimeFeed.TransactOpts, status, timestamp) +} + +type ScrollSequencerUptimeFeedAddedAccessIterator struct { + Event *ScrollSequencerUptimeFeedAddedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedAddedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedAddedAccessIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedAddedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedAddedAccess struct { + User common.Address + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterAddedAccess(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedAddedAccessIterator, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedAddedAccessIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "AddedAccess", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedAddedAccess) (event.Subscription, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedAddedAccess) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseAddedAccess(log types.Log) (*ScrollSequencerUptimeFeedAddedAccess, error) { + event := new(ScrollSequencerUptimeFeedAddedAccess) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedAnswerUpdatedIterator struct { + Event *ScrollSequencerUptimeFeedAnswerUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedAnswerUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedAnswerUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedAnswerUpdatedIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedAnswerUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedAnswerUpdated struct { + Current *big.Int + RoundId *big.Int + UpdatedAt *big.Int + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*ScrollSequencerUptimeFeedAnswerUpdatedIterator, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedAnswerUpdatedIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "AnswerUpdated", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) { + + var currentRule []interface{} + for _, currentItem := range current { + currentRule = append(currentRule, currentItem) + } + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "AnswerUpdated", currentRule, roundIdRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedAnswerUpdated) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "AnswerUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseAnswerUpdated(log types.Log) (*ScrollSequencerUptimeFeedAnswerUpdated, error) { + event := new(ScrollSequencerUptimeFeedAnswerUpdated) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "AnswerUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedCheckAccessDisabledIterator struct { + Event *ScrollSequencerUptimeFeedCheckAccessDisabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedCheckAccessDisabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedCheckAccessDisabledIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedCheckAccessDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedCheckAccessDisabled struct { + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedCheckAccessDisabledIterator, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedCheckAccessDisabledIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "CheckAccessDisabled", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedCheckAccessDisabled) (event.Subscription, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedCheckAccessDisabled) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseCheckAccessDisabled(log types.Log) (*ScrollSequencerUptimeFeedCheckAccessDisabled, error) { + event := new(ScrollSequencerUptimeFeedCheckAccessDisabled) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedCheckAccessEnabledIterator struct { + Event *ScrollSequencerUptimeFeedCheckAccessEnabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedCheckAccessEnabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedCheckAccessEnabledIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedCheckAccessEnabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedCheckAccessEnabled struct { + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedCheckAccessEnabledIterator, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedCheckAccessEnabledIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "CheckAccessEnabled", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedCheckAccessEnabled) (event.Subscription, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedCheckAccessEnabled) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseCheckAccessEnabled(log types.Log) (*ScrollSequencerUptimeFeedCheckAccessEnabled, error) { + event := new(ScrollSequencerUptimeFeedCheckAccessEnabled) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedL1SenderTransferredIterator struct { + Event *ScrollSequencerUptimeFeedL1SenderTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedL1SenderTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedL1SenderTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedL1SenderTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedL1SenderTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedL1SenderTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedL1SenderTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterL1SenderTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollSequencerUptimeFeedL1SenderTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "L1SenderTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedL1SenderTransferredIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "L1SenderTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchL1SenderTransferred(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedL1SenderTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "L1SenderTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedL1SenderTransferred) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "L1SenderTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseL1SenderTransferred(log types.Log) (*ScrollSequencerUptimeFeedL1SenderTransferred, error) { + event := new(ScrollSequencerUptimeFeedL1SenderTransferred) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "L1SenderTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedNewRoundIterator struct { + Event *ScrollSequencerUptimeFeedNewRound + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedNewRoundIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedNewRound) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedNewRoundIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedNewRoundIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedNewRound struct { + RoundId *big.Int + StartedBy common.Address + StartedAt *big.Int + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*ScrollSequencerUptimeFeedNewRoundIterator, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedNewRoundIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "NewRound", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchNewRound(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) { + + var roundIdRule []interface{} + for _, roundIdItem := range roundId { + roundIdRule = append(roundIdRule, roundIdItem) + } + var startedByRule []interface{} + for _, startedByItem := range startedBy { + startedByRule = append(startedByRule, startedByItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "NewRound", roundIdRule, startedByRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedNewRound) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "NewRound", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseNewRound(log types.Log) (*ScrollSequencerUptimeFeedNewRound, error) { + event := new(ScrollSequencerUptimeFeedNewRound) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "NewRound", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator struct { + Event *ScrollSequencerUptimeFeedOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedOwnershipTransferRequested) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseOwnershipTransferRequested(log types.Log) (*ScrollSequencerUptimeFeedOwnershipTransferRequested, error) { + event := new(ScrollSequencerUptimeFeedOwnershipTransferRequested) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedOwnershipTransferredIterator struct { + Event *ScrollSequencerUptimeFeedOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollSequencerUptimeFeedOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedOwnershipTransferredIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedOwnershipTransferred) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseOwnershipTransferred(log types.Log) (*ScrollSequencerUptimeFeedOwnershipTransferred, error) { + event := new(ScrollSequencerUptimeFeedOwnershipTransferred) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedRemovedAccessIterator struct { + Event *ScrollSequencerUptimeFeedRemovedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedRemovedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedRemovedAccessIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedRemovedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedRemovedAccess struct { + User common.Address + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterRemovedAccess(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedRemovedAccessIterator, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedRemovedAccessIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "RemovedAccess", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedRemovedAccess) (event.Subscription, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedRemovedAccess) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseRemovedAccess(log types.Log) (*ScrollSequencerUptimeFeedRemovedAccess, error) { + event := new(ScrollSequencerUptimeFeedRemovedAccess) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedRoundUpdatedIterator struct { + Event *ScrollSequencerUptimeFeedRoundUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedRoundUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedRoundUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedRoundUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedRoundUpdatedIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedRoundUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedRoundUpdated struct { + Status *big.Int + UpdatedAt uint64 + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterRoundUpdated(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedRoundUpdatedIterator, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "RoundUpdated") + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedRoundUpdatedIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "RoundUpdated", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchRoundUpdated(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedRoundUpdated) (event.Subscription, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "RoundUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedRoundUpdated) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "RoundUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseRoundUpdated(log types.Log) (*ScrollSequencerUptimeFeedRoundUpdated, error) { + event := new(ScrollSequencerUptimeFeedRoundUpdated) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "RoundUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollSequencerUptimeFeedUpdateIgnoredIterator struct { + Event *ScrollSequencerUptimeFeedUpdateIgnored + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollSequencerUptimeFeedUpdateIgnoredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedUpdateIgnored) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollSequencerUptimeFeedUpdateIgnored) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollSequencerUptimeFeedUpdateIgnoredIterator) Error() error { + return it.fail +} + +func (it *ScrollSequencerUptimeFeedUpdateIgnoredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollSequencerUptimeFeedUpdateIgnored struct { + LatestStatus bool + LatestTimestamp uint64 + IncomingStatus bool + IncomingTimestamp uint64 + Raw types.Log +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) FilterUpdateIgnored(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedUpdateIgnoredIterator, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.FilterLogs(opts, "UpdateIgnored") + if err != nil { + return nil, err + } + return &ScrollSequencerUptimeFeedUpdateIgnoredIterator{contract: _ScrollSequencerUptimeFeed.contract, event: "UpdateIgnored", logs: logs, sub: sub}, nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) WatchUpdateIgnored(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedUpdateIgnored) (event.Subscription, error) { + + logs, sub, err := _ScrollSequencerUptimeFeed.contract.WatchLogs(opts, "UpdateIgnored") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollSequencerUptimeFeedUpdateIgnored) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "UpdateIgnored", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeedFilterer) ParseUpdateIgnored(log types.Log) (*ScrollSequencerUptimeFeedUpdateIgnored, error) { + event := new(ScrollSequencerUptimeFeedUpdateIgnored) + if err := _ScrollSequencerUptimeFeed.contract.UnpackLog(event, "UpdateIgnored", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type GetRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} +type LatestRoundData struct { + RoundId *big.Int + Answer *big.Int + StartedAt *big.Int + UpdatedAt *big.Int + AnsweredInRound *big.Int +} + +func (ScrollSequencerUptimeFeedAddedAccess) Topic() common.Hash { + return common.HexToHash("0x87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db4") +} + +func (ScrollSequencerUptimeFeedAnswerUpdated) Topic() common.Hash { + return common.HexToHash("0x0559884fd3a460db3073b7fc896cc77986f16e378210ded43186175bf646fc5f") +} + +func (ScrollSequencerUptimeFeedCheckAccessDisabled) Topic() common.Hash { + return common.HexToHash("0x3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638") +} + +func (ScrollSequencerUptimeFeedCheckAccessEnabled) Topic() common.Hash { + return common.HexToHash("0xaebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480") +} + +func (ScrollSequencerUptimeFeedL1SenderTransferred) Topic() common.Hash { + return common.HexToHash("0x8e6da65f164d652f378f48652c0e1ca58d7c9cc52ceaa40c1dad055cd7681d18") +} + +func (ScrollSequencerUptimeFeedNewRound) Topic() common.Hash { + return common.HexToHash("0x0109fc6f55cf40689f02fbaad7af7fe7bbac8a3d2186600afc7d3e10cac60271") +} + +func (ScrollSequencerUptimeFeedOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ScrollSequencerUptimeFeedOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (ScrollSequencerUptimeFeedRemovedAccess) Topic() common.Hash { + return common.HexToHash("0x3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d1") +} + +func (ScrollSequencerUptimeFeedRoundUpdated) Topic() common.Hash { + return common.HexToHash("0x297642343ed2faefb1a411b39fc449eae700e54223d5d0499a9421eb6f68f66a") +} + +func (ScrollSequencerUptimeFeedUpdateIgnored) Topic() common.Hash { + return common.HexToHash("0xe4a6e16301740042c17431042adb8f60454c18fb5934dd4c456269c0dc388fdf") +} + +func (_ScrollSequencerUptimeFeed *ScrollSequencerUptimeFeed) Address() common.Address { + return _ScrollSequencerUptimeFeed.address +} + +type ScrollSequencerUptimeFeedInterface interface { + CheckEnabled(opts *bind.CallOpts) (bool, error) + + Decimals(opts *bind.CallOpts) (uint8, error) + + Description(opts *bind.CallOpts) (string, error) + + GetAnswer(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) + + GetRoundData(opts *bind.CallOpts, _roundId *big.Int) (GetRoundData, + + error) + + GetTimestamp(opts *bind.CallOpts, roundId *big.Int) (*big.Int, error) + + HasAccess(opts *bind.CallOpts, _user common.Address, _calldata []byte) (bool, error) + + L1Sender(opts *bind.CallOpts) (common.Address, error) + + LatestAnswer(opts *bind.CallOpts) (*big.Int, error) + + LatestRound(opts *bind.CallOpts) (*big.Int, error) + + LatestRoundData(opts *bind.CallOpts) (LatestRoundData, + + error) + + LatestTimestamp(opts *bind.CallOpts) (*big.Int, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + Version(opts *bind.CallOpts) (*big.Int, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + TransferL1Sender(opts *bind.TransactOpts, newSender common.Address) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + UpdateStatus(opts *bind.TransactOpts, status bool, timestamp uint64) (*types.Transaction, error) + + FilterAddedAccess(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedAddedAccessIterator, error) + + WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedAddedAccess) (event.Subscription, error) + + ParseAddedAccess(log types.Log) (*ScrollSequencerUptimeFeedAddedAccess, error) + + FilterAnswerUpdated(opts *bind.FilterOpts, current []*big.Int, roundId []*big.Int) (*ScrollSequencerUptimeFeedAnswerUpdatedIterator, error) + + WatchAnswerUpdated(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedAnswerUpdated, current []*big.Int, roundId []*big.Int) (event.Subscription, error) + + ParseAnswerUpdated(log types.Log) (*ScrollSequencerUptimeFeedAnswerUpdated, error) + + FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedCheckAccessDisabledIterator, error) + + WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedCheckAccessDisabled) (event.Subscription, error) + + ParseCheckAccessDisabled(log types.Log) (*ScrollSequencerUptimeFeedCheckAccessDisabled, error) + + FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedCheckAccessEnabledIterator, error) + + WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedCheckAccessEnabled) (event.Subscription, error) + + ParseCheckAccessEnabled(log types.Log) (*ScrollSequencerUptimeFeedCheckAccessEnabled, error) + + FilterL1SenderTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollSequencerUptimeFeedL1SenderTransferredIterator, error) + + WatchL1SenderTransferred(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedL1SenderTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseL1SenderTransferred(log types.Log) (*ScrollSequencerUptimeFeedL1SenderTransferred, error) + + FilterNewRound(opts *bind.FilterOpts, roundId []*big.Int, startedBy []common.Address) (*ScrollSequencerUptimeFeedNewRoundIterator, error) + + WatchNewRound(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedNewRound, roundId []*big.Int, startedBy []common.Address) (event.Subscription, error) + + ParseNewRound(log types.Log) (*ScrollSequencerUptimeFeedNewRound, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollSequencerUptimeFeedOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ScrollSequencerUptimeFeedOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollSequencerUptimeFeedOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ScrollSequencerUptimeFeedOwnershipTransferred, error) + + FilterRemovedAccess(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedRemovedAccessIterator, error) + + WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedRemovedAccess) (event.Subscription, error) + + ParseRemovedAccess(log types.Log) (*ScrollSequencerUptimeFeedRemovedAccess, error) + + FilterRoundUpdated(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedRoundUpdatedIterator, error) + + WatchRoundUpdated(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedRoundUpdated) (event.Subscription, error) + + ParseRoundUpdated(log types.Log) (*ScrollSequencerUptimeFeedRoundUpdated, error) + + FilterUpdateIgnored(opts *bind.FilterOpts) (*ScrollSequencerUptimeFeedUpdateIgnoredIterator, error) + + WatchUpdateIgnored(opts *bind.WatchOpts, sink chan<- *ScrollSequencerUptimeFeedUpdateIgnored) (event.Subscription, error) + + ParseUpdateIgnored(log types.Log) (*ScrollSequencerUptimeFeedUpdateIgnored, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/v1_0_0/scroll_sequencer_uptime_feed/scroll_sequencer_uptime_feed_metadata.go b/gethwrappers/l2ep/generated/v1_0_0/scroll_sequencer_uptime_feed/scroll_sequencer_uptime_feed_metadata.go new file mode 100644 index 0000000000..bb9f741aec --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/scroll_sequencer_uptime_feed/scroll_sequencer_uptime_feed_metadata.go @@ -0,0 +1,7 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + + +package scroll_sequencer_uptime_feed + +var SolidityStandardInput = "{\"version\":\"v0.8.24+commit.e11b9ed9\",\"language\":\"Solidity\",\"settings\":{\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":true,\"bytecodeHash\":\"none\",\"useLiteralContent\":false},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"outputSelection\":{\"node_modules/@scroll-tech/contracts/L2/IL2ScrollMessenger.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"node_modules/@scroll-tech/contracts/libraries/IScrollMessenger.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/base/BaseSequencerUptimeFeed.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/ISequencerUptimeFeed.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/scroll/ScrollSequencerUptimeFeed.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/SimpleReadAccessController.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/SimpleWriteAccessController.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AccessControllerInterface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AggregatorInterface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]}},\"remappings\":[\"forge-std/=src/v0.8/vendor/forge-std/src/\",\"@openzeppelin/contracts@4.7.3/=node_modules/@openzeppelin/contracts-4.7.3/\",\"@openzeppelin/contracts@4.8.3/=node_modules/@openzeppelin/contracts-4.8.3/\",\"@openzeppelin/contracts@4.9.6/=node_modules/@openzeppelin/contracts-4.9.6/\",\"@openzeppelin/contracts@5.0.2/=node_modules/@openzeppelin/contracts-5.0.2/\",\"@openzeppelin/contracts@5.1.0/=node_modules/@openzeppelin/contracts-5.1.0/\",\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@arbitrum/=node_modules/@arbitrum/\",\"hardhat/=node_modules/hardhat/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@zksync/=node_modules/@zksync/\"],\"viaIR\":false},\"sources\":{\"node_modules/@scroll-tech/contracts/L2/IL2ScrollMessenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IScrollMessenger} from \\\"../libraries/IScrollMessenger.sol\\\";\\n\\ninterface IL2ScrollMessenger is IScrollMessenger {\\n /**********\\n * Events *\\n **********/\\n\\n /// @notice Emitted when the maximum number of times each message can fail in L2 is updated.\\n /// @param oldMaxFailedExecutionTimes The old maximum number of times each message can fail in L2.\\n /// @param newMaxFailedExecutionTimes The new maximum number of times each message can fail in L2.\\n event UpdateMaxFailedExecutionTimes(uint256 oldMaxFailedExecutionTimes, uint256 newMaxFailedExecutionTimes);\\n\\n /*****************************\\n * Public Mutating Functions *\\n *****************************/\\n\\n /// @notice execute L1 =\\u003e L2 message\\n /// @dev Make sure this is only called by privileged accounts.\\n /// @param from The address of the sender of the message.\\n /// @param to The address of the recipient of the message.\\n /// @param value The msg.value passed to the message call.\\n /// @param nonce The nonce of the message to avoid replay attack.\\n /// @param message The content of the message.\\n function relayMessage(\\n address from,\\n address to,\\n uint256 value,\\n uint256 nonce,\\n bytes calldata message\\n ) external;\\n}\\n\"},\"node_modules/@scroll-tech/contracts/libraries/IScrollMessenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\ninterface IScrollMessenger {\\n /**********\\n * Events *\\n **********/\\n\\n /// @notice Emitted when a cross domain message is sent.\\n /// @param sender The address of the sender who initiates the message.\\n /// @param target The address of target contract to call.\\n /// @param value The amount of value passed to the target contract.\\n /// @param messageNonce The nonce of the message.\\n /// @param gasLimit The optional gas limit passed to L1 or L2.\\n /// @param message The calldata passed to the target contract.\\n event SentMessage(\\n address indexed sender,\\n address indexed target,\\n uint256 value,\\n uint256 messageNonce,\\n uint256 gasLimit,\\n bytes message\\n );\\n\\n /// @notice Emitted when a cross domain message is relayed successfully.\\n /// @param messageHash The hash of the message.\\n event RelayedMessage(bytes32 indexed messageHash);\\n\\n /// @notice Emitted when a cross domain message is failed to relay.\\n /// @param messageHash The hash of the message.\\n event FailedRelayedMessage(bytes32 indexed messageHash);\\n\\n /**********\\n * Errors *\\n **********/\\n\\n /// @dev Thrown when the given address is `address(0)`.\\n error ErrorZeroAddress();\\n\\n /*************************\\n * Public View Functions *\\n *************************/\\n\\n /// @notice Return the sender of a cross domain message.\\n function xDomainMessageSender() external view returns (address);\\n\\n /*****************************\\n * Public Mutating Functions *\\n *****************************/\\n\\n /// @notice Send cross chain message from L1 to L2 or L2 to L1.\\n /// @param target The address of account who receive the message.\\n /// @param value The amount of ether passed when call target contract.\\n /// @param message The content of the message.\\n /// @param gasLimit Gas limit required to complete the message relay on corresponding chain.\\n function sendMessage(\\n address target,\\n uint256 value,\\n bytes calldata message,\\n uint256 gasLimit\\n ) external payable;\\n\\n /// @notice Send cross chain message from L1 to L2 or L2 to L1.\\n /// @param target The address of account who receive the message.\\n /// @param value The amount of ether passed when call target contract.\\n /// @param message The content of the message.\\n /// @param gasLimit Gas limit required to complete the message relay on corresponding chain.\\n /// @param refundAddress The address of account who will receive the refunded fee.\\n function sendMessage(\\n address target,\\n uint256 value,\\n bytes calldata message,\\n uint256 gasLimit,\\n address refundAddress\\n ) external payable;\\n}\\n\"},\"src/v0.8/l2ep/base/BaseSequencerUptimeFeed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport {AggregatorInterface} from \\\"../../shared/interfaces/AggregatorInterface.sol\\\";\\n\\nimport {AggregatorV2V3Interface} from \\\"../../shared/interfaces/AggregatorV2V3Interface.sol\\\";\\nimport {AggregatorV3Interface} from \\\"../../shared/interfaces/AggregatorV3Interface.sol\\\";\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\n\\nimport {ISequencerUptimeFeed} from \\\"./../interfaces/ISequencerUptimeFeed.sol\\\";\\n\\nimport {SimpleReadAccessController} from \\\"../../shared/access/SimpleReadAccessController.sol\\\";\\n\\n/// @title L2 sequencer uptime status aggregator\\n/// @notice L2 contract that receives status updates from a specific L1 address,\\n/// records a new answer if the status changed\\nabstract contract BaseSequencerUptimeFeed is\\n ITypeAndVersion,\\n AggregatorV2V3Interface,\\n ISequencerUptimeFeed,\\n SimpleReadAccessController\\n{\\n /// @dev Round info for uptime history\\n struct Round {\\n uint64 startedAt; // ─╮ The timestamp at which the round started\\n uint64 updatedAt; // │ The timestamp at which the round was updated\\n bool status; // ──────╯ The sequencer status for the round\\n }\\n\\n struct FeedState {\\n uint80 latestRoundId; // ─╮ The ID of the latest round\\n uint64 startedAt; // │ The date at which the latest round started\\n uint64 updatedAt; // │ The date at which the latest round was updated\\n bool latestStatus; // ────╯ The status of the latest round\\n }\\n\\n /// @notice Sender is not the L2 messenger\\n error InvalidSender();\\n /// @notice Replacement for AggregatorV3Interface \\\"No data present\\\"\\n error NoDataPresent();\\n\\n event L1SenderTransferred(address indexed from, address indexed to);\\n /// @dev Emitted when an `updateStatus` call is ignored due to unchanged status or stale timestamp\\n event UpdateIgnored(bool latestStatus, uint64 latestTimestamp, bool incomingStatus, uint64 incomingTimestamp);\\n /// @dev Emitted when a updateStatus is called without the status changing\\n event RoundUpdated(int256 status, uint64 updatedAt);\\n\\n // solhint-disable-next-line chainlink-solidity/all-caps-constant-storage-variables\\n uint8 public constant override decimals = 0;\\n // solhint-disable-next-line chainlink-solidity/all-caps-constant-storage-variables\\n string public constant override description = \\\"L2 Sequencer Uptime Status Feed\\\";\\n // solhint-disable-next-line chainlink-solidity/all-caps-constant-storage-variables\\n uint256 public constant override version = 1;\\n\\n /// @dev L1 address\\n address private s_l1Sender;\\n /// @dev s_latestRoundId == 0 means this contract is uninitialized.\\n FeedState private s_feedState = FeedState({latestRoundId: 0, latestStatus: false, startedAt: 0, updatedAt: 0});\\n mapping(uint80 roundId =\\u003e Round round) private s_rounds;\\n\\n /// @param l1SenderAddress Address of the L1 contract that is permissioned to call this contract\\n /// @param initialStatus The initial status of the feed\\n constructor(address l1SenderAddress, bool initialStatus) {\\n // We need to allow l1SenderAddress to be zero because this contract is deployed first\\n // After deploying the validator contract, this contract will be updated with the correct L1 sender address\\n _setL1Sender(l1SenderAddress);\\n\\n // Initialise roundId == 1 as the first round\\n _recordRound(1, initialStatus, uint64(block.timestamp));\\n }\\n\\n /// @notice Check if a roundId is valid in this current contract state\\n /// @dev Mainly used for AggregatorV2V3Interface functions\\n /// @param roundId Round ID to check\\n function _isValidRound(\\n uint256 roundId\\n ) private view returns (bool) {\\n return roundId \\u003e 0 \\u0026\\u0026 roundId \\u003c= type(uint80).max \\u0026\\u0026 s_feedState.latestRoundId \\u003e= roundId;\\n }\\n\\n /// @return L1 sender address\\n function l1Sender() public view virtual returns (address) {\\n return s_l1Sender;\\n }\\n\\n /// @notice Set the allowed L1 sender for this contract to a new L1 sender\\n /// @dev Can be disabled by setting the L1 sender as `address(0)`. Accessible only by owner.\\n /// @param newSender new L1 sender that will be allowed to call `updateStatus` on this contract\\n function transferL1Sender(\\n address newSender\\n ) external virtual onlyOwner {\\n _setL1Sender(newSender);\\n }\\n\\n /// @notice internal method that stores the L1 sender\\n function _setL1Sender(\\n address newSender\\n ) internal {\\n address oldSender = s_l1Sender;\\n if (oldSender != newSender) {\\n s_l1Sender = newSender;\\n emit L1SenderTransferred(oldSender, newSender);\\n }\\n }\\n\\n /// @dev Returns an AggregatorV2V3Interface compatible answer from status flag\\n /// @param status The status flag to convert to an aggregator-compatible answer\\n function _getStatusAnswer(\\n bool status\\n ) internal pure returns (int256) {\\n return status ? int256(1) : int256(0);\\n }\\n\\n /// @notice Helper function to record a round and set the latest feed state.\\n /// @param roundId The round ID to record\\n /// @param status Sequencer status\\n /// @param timestamp The L1 block timestamp of status update\\n function _recordRound(uint80 roundId, bool status, uint64 timestamp) internal {\\n s_rounds[roundId] = Round({status: status, startedAt: timestamp, updatedAt: uint64(block.timestamp)});\\n s_feedState = FeedState({\\n latestRoundId: roundId,\\n latestStatus: status,\\n startedAt: timestamp,\\n updatedAt: uint64(block.timestamp)\\n });\\n\\n emit NewRound(roundId, msg.sender, timestamp);\\n emit AnswerUpdated(_getStatusAnswer(status), roundId, timestamp);\\n }\\n\\n /// @notice Helper function to update when a round was last updated\\n /// @param roundId The round ID to update\\n /// @param status Sequencer status\\n function _updateRound(uint80 roundId, bool status) internal {\\n s_rounds[roundId].updatedAt = uint64(block.timestamp);\\n s_feedState.updatedAt = uint64(block.timestamp);\\n emit RoundUpdated(_getStatusAnswer(status), uint64(block.timestamp));\\n }\\n\\n function _getFeedState() internal view returns (FeedState memory) {\\n return s_feedState;\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function latestAnswer() external view override checkAccess returns (int256) {\\n return _getStatusAnswer(s_feedState.latestStatus);\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function latestTimestamp() external view override checkAccess returns (uint256) {\\n return s_feedState.startedAt;\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function latestRound() external view override checkAccess returns (uint256) {\\n return s_feedState.latestRoundId;\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function getAnswer(\\n uint256 roundId\\n ) external view override checkAccess returns (int256) {\\n if (!_isValidRound(roundId)) {\\n revert NoDataPresent();\\n }\\n\\n return _getStatusAnswer(s_rounds[uint80(roundId)].status);\\n }\\n\\n /// @inheritdoc AggregatorInterface\\n function getTimestamp(\\n uint256 roundId\\n ) external view override checkAccess returns (uint256) {\\n if (!_isValidRound(roundId)) {\\n revert NoDataPresent();\\n }\\n\\n return s_rounds[uint80(roundId)].startedAt;\\n }\\n\\n /// @notice Record a new status and timestamp if it has changed since the last round.\\n /// @dev This function will revert if not called from `l1Sender` via the L1-\\u003eL2 messenger.\\n /// @param status Sequencer status\\n /// @param timestamp Block timestamp of status update\\n function updateStatus(bool status, uint64 timestamp) external override {\\n _validateSender(s_l1Sender);\\n\\n FeedState memory feedState = _getFeedState();\\n // Ignore if latest recorded timestamp is newer\\n if (feedState.startedAt \\u003e timestamp) {\\n emit UpdateIgnored(feedState.latestStatus, feedState.startedAt, status, timestamp);\\n return;\\n }\\n\\n if (feedState.latestStatus == status) {\\n _updateRound(feedState.latestRoundId, status);\\n } else {\\n feedState.latestRoundId += 1;\\n _recordRound(feedState.latestRoundId, status, timestamp);\\n }\\n }\\n\\n function _validateSender(\\n address l1Sender\\n ) internal virtual;\\n\\n /// @inheritdoc AggregatorV3Interface\\n function getRoundData(\\n uint80 _roundId\\n )\\n public\\n view\\n override\\n checkAccess\\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)\\n {\\n if (!_isValidRound(_roundId)) {\\n revert NoDataPresent();\\n }\\n\\n Round storage round = s_rounds[_roundId];\\n\\n return (_roundId, _getStatusAnswer(round.status), uint256(round.startedAt), uint256(round.updatedAt), _roundId);\\n }\\n\\n /// @inheritdoc AggregatorV3Interface\\n function latestRoundData()\\n external\\n view\\n override\\n checkAccess\\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)\\n {\\n FeedState storage feedState = s_feedState;\\n\\n return (\\n feedState.latestRoundId,\\n _getStatusAnswer(feedState.latestStatus),\\n feedState.startedAt,\\n feedState.updatedAt,\\n feedState.latestRoundId\\n );\\n }\\n}\\n\"},\"src/v0.8/l2ep/interfaces/ISequencerUptimeFeed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ISequencerUptimeFeed {\\n function updateStatus(bool status, uint64 timestamp) external;\\n}\\n\"},\"src/v0.8/l2ep/scroll/ScrollSequencerUptimeFeed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport {BaseSequencerUptimeFeed} from \\\"../base/BaseSequencerUptimeFeed.sol\\\";\\n\\nimport {IL2ScrollMessenger} from \\\"@scroll-tech/contracts/L2/IL2ScrollMessenger.sol\\\";\\n\\n/// @title ScrollSequencerUptimeFeed - L2 sequencer uptime status aggregator\\n/// @notice L2 contract that receives status updates, and records a new answer if the status changed\\ncontract ScrollSequencerUptimeFeed is BaseSequencerUptimeFeed {\\n error ZeroAddress();\\n\\n string public constant override typeAndVersion = \\\"ScrollSequencerUptimeFeed 1.1.0-dev\\\";\\n\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n IL2ScrollMessenger private immutable s_l2CrossDomainMessenger;\\n\\n /// @param l1SenderAddress Address of the L1 contract that is permissioned to call this contract\\n /// @param l2CrossDomainMessengerAddr Address of the L2CrossDomainMessenger contract\\n /// @param initialStatus The initial status of the feed\\n constructor(\\n address l1SenderAddress,\\n address l2CrossDomainMessengerAddr,\\n bool initialStatus\\n ) BaseSequencerUptimeFeed(l1SenderAddress, initialStatus) {\\n if (l2CrossDomainMessengerAddr == address(0)) {\\n revert ZeroAddress();\\n }\\n\\n s_l2CrossDomainMessenger = IL2ScrollMessenger(l2CrossDomainMessengerAddr);\\n }\\n\\n function _validateSender(\\n address l1Sender\\n ) internal view override {\\n if (msg.sender != address(s_l2CrossDomainMessenger) || s_l2CrossDomainMessenger.xDomainMessageSender() != l1Sender)\\n {\\n revert InvalidSender();\\n }\\n }\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(\\n address newOwner\\n ) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(\\n address to\\n ) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(\\n address to\\n ) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/access/SimpleReadAccessController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {SimpleWriteAccessController} from \\\"./SimpleWriteAccessController.sol\\\";\\n\\n/// @title SimpleReadAccessController\\n/// @notice Gives access to:\\n/// - any externally owned account (note that off-chain actors can always read\\n/// any contract storage regardless of on-chain access control measures, so this\\n/// does not weaken the access control while improving usability)\\n/// - accounts explicitly added to an access list\\n/// @dev SimpleReadAccessController is not suitable for access controlling writes\\n/// since it grants any externally owned account access! See\\n/// SimpleWriteAccessController for that.\\ncontract SimpleReadAccessController is SimpleWriteAccessController {\\n /// @notice Returns the access of an address\\n /// @param _user The address to query\\n function hasAccess(address _user, bytes memory _calldata) public view virtual override returns (bool) {\\n // solhint-disable-next-line avoid-tx-origin\\n return super.hasAccess(_user, _calldata) || _user == tx.origin;\\n }\\n}\\n\"},\"src/v0.8/shared/access/SimpleWriteAccessController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {AccessControllerInterface} from \\\"../interfaces/AccessControllerInterface.sol\\\";\\nimport {ConfirmedOwner} from \\\"./ConfirmedOwner.sol\\\";\\n\\n/// @title SimpleWriteAccessController\\n/// @notice Gives access to accounts explicitly added to an access list by the controller's owner.\\n/// @dev does not make any special permissions for externally, see SimpleReadAccessController for that.\\ncontract SimpleWriteAccessController is AccessControllerInterface, ConfirmedOwner {\\n bool public checkEnabled;\\n mapping(address =\\u003e bool) internal s_accessList;\\n\\n event AddedAccess(address user);\\n event RemovedAccess(address user);\\n event CheckAccessEnabled();\\n event CheckAccessDisabled();\\n\\n constructor() ConfirmedOwner(msg.sender) {\\n checkEnabled = true;\\n }\\n\\n /// @notice Returns the access of an address\\n /// @param _user The address to query\\n function hasAccess(address _user, bytes memory) public view virtual override returns (bool) {\\n return s_accessList[_user] || !checkEnabled;\\n }\\n\\n /// @notice Adds an address to the access list\\n /// @param _user The address to add\\n function addAccess(\\n address _user\\n ) external onlyOwner {\\n if (!s_accessList[_user]) {\\n s_accessList[_user] = true;\\n\\n emit AddedAccess(_user);\\n }\\n }\\n\\n /// @notice Removes an address from the access list\\n /// @param _user The address to remove\\n function removeAccess(\\n address _user\\n ) external onlyOwner {\\n if (s_accessList[_user]) {\\n s_accessList[_user] = false;\\n\\n emit RemovedAccess(_user);\\n }\\n }\\n\\n /// @notice makes the access check enforced\\n function enableAccessCheck() external onlyOwner {\\n if (!checkEnabled) {\\n checkEnabled = true;\\n\\n emit CheckAccessEnabled();\\n }\\n }\\n\\n /// @notice makes the access check unenforced\\n function disableAccessCheck() external onlyOwner {\\n if (checkEnabled) {\\n checkEnabled = false;\\n\\n emit CheckAccessDisabled();\\n }\\n }\\n\\n /// @dev reverts if the caller does not have access\\n modifier checkAccess() {\\n // solhint-disable-next-line gas-custom-errors\\n require(hasAccess(msg.sender, msg.data), \\\"No access\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/interfaces/AccessControllerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AccessControllerInterface {\\n function hasAccess(address user, bytes calldata data) external view returns (bool);\\n}\\n\"},\"src/v0.8/shared/interfaces/AggregatorInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AggregatorInterface {\\n function latestAnswer() external view returns (int256);\\n\\n function latestTimestamp() external view returns (uint256);\\n\\n function latestRound() external view returns (uint256);\\n\\n function getAnswer(\\n uint256 roundId\\n ) external view returns (int256);\\n\\n function getTimestamp(\\n uint256 roundId\\n ) external view returns (uint256);\\n\\n event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);\\n\\n event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);\\n}\\n\"},\"src/v0.8/shared/interfaces/AggregatorV2V3Interface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {AggregatorInterface} from \\\"./AggregatorInterface.sol\\\";\\nimport {AggregatorV3Interface} from \\\"./AggregatorV3Interface.sol\\\";\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AggregatorV2V3Interface is AggregatorInterface, AggregatorV3Interface {}\\n\"},\"src/v0.8/shared/interfaces/AggregatorV3Interface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AggregatorV3Interface {\\n function decimals() external view returns (uint8);\\n\\n function description() external view returns (string memory);\\n\\n function version() external view returns (uint256);\\n\\n function getRoundData(\\n uint80 _roundId\\n ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);\\n\\n function latestRoundData()\\n external\\n view\\n returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);\\n}\\n\"},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(\\n address recipient\\n ) external;\\n\\n function acceptOwnership() external;\\n}\\n\"},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ITypeAndVersion {\\n function typeAndVersion() external pure returns (string memory);\\n}\\n\"}}}" diff --git a/gethwrappers/l2ep/generated/v1_0_0/scroll_validator/scroll_validator.go b/gethwrappers/l2ep/generated/v1_0_0/scroll_validator/scroll_validator.go new file mode 100644 index 0000000000..cda4957074 --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/scroll_validator/scroll_validator.go @@ -0,0 +1,1680 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package scroll_validator + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +var ScrollValidatorMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"l1CrossDomainMessengerAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l2UptimeFeedAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1MessageQueueAddr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_MSG_QUEUE_ADDR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L2_UPTIME_FEED_ADDR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"acceptOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkEnabled\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"enableAccessCheck\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAccess\",\"inputs\":[{\"name\":\"_user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"gasLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"typeAndVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validate\",\"inputs\":[{\"name\":\"previousRoundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"previousAnswer\",\"type\":\"int256\",\"internalType\":\"int256\"},{\"name\":\"currentRoundId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"currentAnswer\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AddedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckAccessEnabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConfigUpdated\",\"inputs\":[{\"name\":\"l1CrossDomainMessengerAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"l2UptimeFeedAddr\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"gasLimit\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GasLimitUpdated\",\"inputs\":[{\"name\":\"gasLimit\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferRequested\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RemovedAccess\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatedStatus\",\"inputs\":[{\"name\":\"previousRoundId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"previousAnswer\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"},{\"name\":\"currentRoundId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"currentAnswer\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"L1CrossDomainMessengerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"L2UptimeFeedAddrZero\",\"inputs\":[]}]", + Bin: "0x60e060405234801562000010575f80fd5b5060405162001237380380620012378339810160408190526200003391620002cb565b83838233805f816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be8162000205565b50506001805460ff60a01b1916600160a01b179055506001600160a01b038316620000fc57604051639c9087c160e01b815260040160405180910390fd5b6001600160a01b0382166200012457604051632ef8090560e01b815260040160405180910390fd5b6001600160a01b03838116608081905290831660a08190526003805463ffffffff191663ffffffff8516908117909155604080519384526020840192909252908201527f50ac1a0ab48727faf611b51ad202bb80d8cc334ca8e64154c3d430fbb23040cb9060600160405180910390a15050506001600160a01b038216620001ef5760405162461bcd60e51b815260206004820181905260248201527f496e76616c6964204c31206d6573736167652071756575652061646472657373604482015260640162000083565b506001600160a01b031660c052506200032e9050565b336001600160a01b038216036200025f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0381168114620002c6575f80fd5b919050565b5f805f8060808587031215620002df575f80fd5b620002ea85620002af565b9350620002fa60208601620002af565b92506200030a60408601620002af565b9150606085015163ffffffff8116811462000323575f80fd5b939692955090935050565b60805160a05160c051610ec96200036e5f395f81816101fa01526108f601525f81816101240152610a0d01525f818161035a01526108cc0152610ec95ff3fe6080604052600436106100f2575f3560e01c80638038e4a111610087578063beed9b5111610057578063beed9b51146102f9578063dc7f012414610318578063eda066f714610349578063f2fde38b1461037c575f80fd5b80638038e4a11461027e5780638823da6c146102925780638da5cb5b146102b1578063a118f249146102da575f80fd5b80634394a48a116100c25780634394a48a146101e957806352d84c621461021c5780636b14daf81461023b57806379ba50971461026a575f80fd5b80630a756983146100fd578063122555ff14610113578063181f5a77146101705780631a93d1c3146101c5575f80fd5b366100f957005b5f80fd5b348015610108575f80fd5b5061011161039b565b005b34801561011e575f80fd5b506101467f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b34801561017b575f80fd5b506101b86040518060400160405280601581526020017f5363726f6c6c56616c696461746f7220312e312e30000000000000000000000081525081565b6040516101679190610cae565b3480156101d0575f80fd5b5060035460405163ffffffff9091168152602001610167565b3480156101f4575f80fd5b506101467f000000000000000000000000000000000000000000000000000000000000000081565b348015610227575f80fd5b50610111610236366004610cc0565b610419565b348015610246575f80fd5b5061025a610255366004610d38565b61048b565b6040519015158152602001610167565b348015610275575f80fd5b506101116104e0565b348015610289575f80fd5b506101116105e1565b34801561029d575f80fd5b506101116102ac366004610e12565b610674565b3480156102bc575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610146565b3480156102e5575f80fd5b506101116102f4366004610e12565b610727565b348015610304575f80fd5b5061025a610313366004610e2b565b6107d9565b348015610323575f80fd5b5060015461025a9074010000000000000000000000000000000000000000900460ff1681565b348015610354575f80fd5b506101467f000000000000000000000000000000000000000000000000000000000000000081565b348015610387575f80fd5b50610111610396366004610e12565b610ac8565b6103a3610ad9565b60015474010000000000000000000000000000000000000000900460ff161561041757600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517f3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638905f90a15b565b610421610ad9565b600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff83169081179091556040519081527f501c51f34bf3d8589156f7fd37055e69375b40034d9f99365cb3290b5d983c91906020015b60405180910390a150565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526002602052604081205460ff16806104d9575060015474010000000000000000000000000000000000000000900460ff16155b9392505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610566576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b5f8054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6105e9610ad9565b60015474010000000000000000000000000000000000000000900460ff1661041757600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517faebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480905f90a1565b61067c610ad9565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff16156107245773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d19101610480565b50565b61072f610ad9565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526002602052604090205460ff166107245773ffffffffffffffffffffffffffffffffffffffff81165f8181526002602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905590519182527f87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db49101610480565b5f610819335f368080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061048b92505050565b61087f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f206163636573730000000000000000000000000000000000000000000000604482015260640161055d565b6003546040517fd7704bae00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169163b2267a7b917f0000000000000000000000000000000000000000000000000000000000000000169063d7704bae90602401602060405180830381865afa15801561093b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061095f9190610e5a565b604080516001871460248201524267ffffffffffffffff1660448083019190915282518083039091018152606490910182526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fed8378f500000000000000000000000000000000000000000000000000000000179052600354915160e085901b7fffffffff00000000000000000000000000000000000000000000000000000000168152610a40927f0000000000000000000000000000000000000000000000000000000000000000925f92909163ffffffff1690600401610e71565b5f604051808303818588803b158015610a57575f80fd5b505af1158015610a69573d5f803e3d5ffd5b50506040805189815260208101899052908101879052606081018690527fdf570e5bda6b7c0c0415ceeafd5f9321908b69023cae41e030a6df91cad90b0393506080019150610ab59050565b60405180910390a1506001949350505050565b610ad0610ad9565b61072481610b59565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161055d565b3373ffffffffffffffffffffffffffffffffffffffff821603610bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161055d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f81518084525f5b81811015610c7157602081850181015186830182015201610c55565b505f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6104d96020830184610c4d565b5f60208284031215610cd0575f80fd5b813563ffffffff811681146104d9575f80fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610d06575f80fd5b919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8060408385031215610d49575f80fd5b610d5283610ce3565b9150602083013567ffffffffffffffff80821115610d6e575f80fd5b818501915085601f830112610d81575f80fd5b813581811115610d9357610d93610d0b565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715610dd957610dd9610d0b565b81604052828152886020848701011115610df1575f80fd5b826020860160208301375f6020848301015280955050505050509250929050565b5f60208284031215610e22575f80fd5b6104d982610ce3565b5f805f8060808587031215610e3e575f80fd5b5050823594602084013594506040840135936060013592509050565b5f60208284031215610e6a575f80fd5b5051919050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152608060408201525f610ea56080830185610c4d565b905063ffffffff831660608301529594505050505056fea164736f6c6343000818000a", +} + +var ScrollValidatorABI = ScrollValidatorMetaData.ABI + +var ScrollValidatorBin = ScrollValidatorMetaData.Bin + +func DeployScrollValidator(auth *bind.TransactOpts, backend bind.ContractBackend, l1CrossDomainMessengerAddress common.Address, l2UptimeFeedAddr common.Address, l1MessageQueueAddr common.Address, gasLimit uint32) (common.Address, *types.Transaction, *ScrollValidator, error) { + parsed, err := ScrollValidatorMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ScrollValidatorBin), backend, l1CrossDomainMessengerAddress, l2UptimeFeedAddr, l1MessageQueueAddr, gasLimit) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ScrollValidator{address: address, abi: *parsed, ScrollValidatorCaller: ScrollValidatorCaller{contract: contract}, ScrollValidatorTransactor: ScrollValidatorTransactor{contract: contract}, ScrollValidatorFilterer: ScrollValidatorFilterer{contract: contract}}, nil +} + +type ScrollValidator struct { + address common.Address + abi abi.ABI + ScrollValidatorCaller + ScrollValidatorTransactor + ScrollValidatorFilterer +} + +type ScrollValidatorCaller struct { + contract *bind.BoundContract +} + +type ScrollValidatorTransactor struct { + contract *bind.BoundContract +} + +type ScrollValidatorFilterer struct { + contract *bind.BoundContract +} + +type ScrollValidatorSession struct { + Contract *ScrollValidator + CallOpts bind.CallOpts + TransactOpts bind.TransactOpts +} + +type ScrollValidatorCallerSession struct { + Contract *ScrollValidatorCaller + CallOpts bind.CallOpts +} + +type ScrollValidatorTransactorSession struct { + Contract *ScrollValidatorTransactor + TransactOpts bind.TransactOpts +} + +type ScrollValidatorRaw struct { + Contract *ScrollValidator +} + +type ScrollValidatorCallerRaw struct { + Contract *ScrollValidatorCaller +} + +type ScrollValidatorTransactorRaw struct { + Contract *ScrollValidatorTransactor +} + +func NewScrollValidator(address common.Address, backend bind.ContractBackend) (*ScrollValidator, error) { + abi, err := abi.JSON(strings.NewReader(ScrollValidatorABI)) + if err != nil { + return nil, err + } + contract, err := bindScrollValidator(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ScrollValidator{address: address, abi: abi, ScrollValidatorCaller: ScrollValidatorCaller{contract: contract}, ScrollValidatorTransactor: ScrollValidatorTransactor{contract: contract}, ScrollValidatorFilterer: ScrollValidatorFilterer{contract: contract}}, nil +} + +func NewScrollValidatorCaller(address common.Address, caller bind.ContractCaller) (*ScrollValidatorCaller, error) { + contract, err := bindScrollValidator(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ScrollValidatorCaller{contract: contract}, nil +} + +func NewScrollValidatorTransactor(address common.Address, transactor bind.ContractTransactor) (*ScrollValidatorTransactor, error) { + contract, err := bindScrollValidator(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ScrollValidatorTransactor{contract: contract}, nil +} + +func NewScrollValidatorFilterer(address common.Address, filterer bind.ContractFilterer) (*ScrollValidatorFilterer, error) { + contract, err := bindScrollValidator(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ScrollValidatorFilterer{contract: contract}, nil +} + +func bindScrollValidator(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ScrollValidatorMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +func (_ScrollValidator *ScrollValidatorRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollValidator.Contract.ScrollValidatorCaller.contract.Call(opts, result, method, params...) +} + +func (_ScrollValidator *ScrollValidatorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollValidator.Contract.ScrollValidatorTransactor.contract.Transfer(opts) +} + +func (_ScrollValidator *ScrollValidatorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollValidator.Contract.ScrollValidatorTransactor.contract.Transact(opts, method, params...) +} + +func (_ScrollValidator *ScrollValidatorCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ScrollValidator.Contract.contract.Call(opts, result, method, params...) +} + +func (_ScrollValidator *ScrollValidatorTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollValidator.Contract.contract.Transfer(opts) +} + +func (_ScrollValidator *ScrollValidatorTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ScrollValidator.Contract.contract.Transact(opts, method, params...) +} + +func (_ScrollValidator *ScrollValidatorCaller) L1CROSSDOMAINMESSENGERADDRESS(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "L1_CROSS_DOMAIN_MESSENGER_ADDRESS") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) L1CROSSDOMAINMESSENGERADDRESS() (common.Address, error) { + return _ScrollValidator.Contract.L1CROSSDOMAINMESSENGERADDRESS(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) L1CROSSDOMAINMESSENGERADDRESS() (common.Address, error) { + return _ScrollValidator.Contract.L1CROSSDOMAINMESSENGERADDRESS(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCaller) L1MSGQUEUEADDR(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "L1_MSG_QUEUE_ADDR") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) L1MSGQUEUEADDR() (common.Address, error) { + return _ScrollValidator.Contract.L1MSGQUEUEADDR(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) L1MSGQUEUEADDR() (common.Address, error) { + return _ScrollValidator.Contract.L1MSGQUEUEADDR(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCaller) L2UPTIMEFEEDADDR(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "L2_UPTIME_FEED_ADDR") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) L2UPTIMEFEEDADDR() (common.Address, error) { + return _ScrollValidator.Contract.L2UPTIMEFEEDADDR(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) L2UPTIMEFEEDADDR() (common.Address, error) { + return _ScrollValidator.Contract.L2UPTIMEFEEDADDR(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCaller) CheckEnabled(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "checkEnabled") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) CheckEnabled() (bool, error) { + return _ScrollValidator.Contract.CheckEnabled(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) CheckEnabled() (bool, error) { + return _ScrollValidator.Contract.CheckEnabled(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCaller) GetGasLimit(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "getGasLimit") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) GetGasLimit() (uint32, error) { + return _ScrollValidator.Contract.GetGasLimit(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) GetGasLimit() (uint32, error) { + return _ScrollValidator.Contract.GetGasLimit(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCaller) HasAccess(opts *bind.CallOpts, _user common.Address, arg1 []byte) (bool, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "hasAccess", _user, arg1) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) HasAccess(_user common.Address, arg1 []byte) (bool, error) { + return _ScrollValidator.Contract.HasAccess(&_ScrollValidator.CallOpts, _user, arg1) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) HasAccess(_user common.Address, arg1 []byte) (bool, error) { + return _ScrollValidator.Contract.HasAccess(&_ScrollValidator.CallOpts, _user, arg1) +} + +func (_ScrollValidator *ScrollValidatorCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "owner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) Owner() (common.Address, error) { + return _ScrollValidator.Contract.Owner(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) Owner() (common.Address, error) { + return _ScrollValidator.Contract.Owner(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCaller) TypeAndVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ScrollValidator.contract.Call(opts, &out, "typeAndVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +func (_ScrollValidator *ScrollValidatorSession) TypeAndVersion() (string, error) { + return _ScrollValidator.Contract.TypeAndVersion(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorCallerSession) TypeAndVersion() (string, error) { + return _ScrollValidator.Contract.TypeAndVersion(&_ScrollValidator.CallOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactor) AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "acceptOwnership") +} + +func (_ScrollValidator *ScrollValidatorSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollValidator.Contract.AcceptOwnership(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) AcceptOwnership() (*types.Transaction, error) { + return _ScrollValidator.Contract.AcceptOwnership(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactor) AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "addAccess", _user) +} + +func (_ScrollValidator *ScrollValidatorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollValidator.Contract.AddAccess(&_ScrollValidator.TransactOpts, _user) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) AddAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollValidator.Contract.AddAccess(&_ScrollValidator.TransactOpts, _user) +} + +func (_ScrollValidator *ScrollValidatorTransactor) DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "disableAccessCheck") +} + +func (_ScrollValidator *ScrollValidatorSession) DisableAccessCheck() (*types.Transaction, error) { + return _ScrollValidator.Contract.DisableAccessCheck(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) DisableAccessCheck() (*types.Transaction, error) { + return _ScrollValidator.Contract.DisableAccessCheck(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactor) EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "enableAccessCheck") +} + +func (_ScrollValidator *ScrollValidatorSession) EnableAccessCheck() (*types.Transaction, error) { + return _ScrollValidator.Contract.EnableAccessCheck(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) EnableAccessCheck() (*types.Transaction, error) { + return _ScrollValidator.Contract.EnableAccessCheck(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactor) RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "removeAccess", _user) +} + +func (_ScrollValidator *ScrollValidatorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollValidator.Contract.RemoveAccess(&_ScrollValidator.TransactOpts, _user) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) RemoveAccess(_user common.Address) (*types.Transaction, error) { + return _ScrollValidator.Contract.RemoveAccess(&_ScrollValidator.TransactOpts, _user) +} + +func (_ScrollValidator *ScrollValidatorTransactor) SetGasLimit(opts *bind.TransactOpts, gasLimit uint32) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "setGasLimit", gasLimit) +} + +func (_ScrollValidator *ScrollValidatorSession) SetGasLimit(gasLimit uint32) (*types.Transaction, error) { + return _ScrollValidator.Contract.SetGasLimit(&_ScrollValidator.TransactOpts, gasLimit) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) SetGasLimit(gasLimit uint32) (*types.Transaction, error) { + return _ScrollValidator.Contract.SetGasLimit(&_ScrollValidator.TransactOpts, gasLimit) +} + +func (_ScrollValidator *ScrollValidatorTransactor) TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "transferOwnership", to) +} + +func (_ScrollValidator *ScrollValidatorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollValidator.Contract.TransferOwnership(&_ScrollValidator.TransactOpts, to) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) TransferOwnership(to common.Address) (*types.Transaction, error) { + return _ScrollValidator.Contract.TransferOwnership(&_ScrollValidator.TransactOpts, to) +} + +func (_ScrollValidator *ScrollValidatorTransactor) Validate(opts *bind.TransactOpts, previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _ScrollValidator.contract.Transact(opts, "validate", previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_ScrollValidator *ScrollValidatorSession) Validate(previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _ScrollValidator.Contract.Validate(&_ScrollValidator.TransactOpts, previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) Validate(previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) { + return _ScrollValidator.Contract.Validate(&_ScrollValidator.TransactOpts, previousRoundId, previousAnswer, currentRoundId, currentAnswer) +} + +func (_ScrollValidator *ScrollValidatorTransactor) Receive(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ScrollValidator.contract.RawTransact(opts, nil) +} + +func (_ScrollValidator *ScrollValidatorSession) Receive() (*types.Transaction, error) { + return _ScrollValidator.Contract.Receive(&_ScrollValidator.TransactOpts) +} + +func (_ScrollValidator *ScrollValidatorTransactorSession) Receive() (*types.Transaction, error) { + return _ScrollValidator.Contract.Receive(&_ScrollValidator.TransactOpts) +} + +type ScrollValidatorAddedAccessIterator struct { + Event *ScrollValidatorAddedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorAddedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorAddedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorAddedAccessIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorAddedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorAddedAccess struct { + User common.Address + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterAddedAccess(opts *bind.FilterOpts) (*ScrollValidatorAddedAccessIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return &ScrollValidatorAddedAccessIterator{contract: _ScrollValidator.contract, event: "AddedAccess", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ScrollValidatorAddedAccess) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "AddedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorAddedAccess) + if err := _ScrollValidator.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseAddedAccess(log types.Log) (*ScrollValidatorAddedAccess, error) { + event := new(ScrollValidatorAddedAccess) + if err := _ScrollValidator.contract.UnpackLog(event, "AddedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorCheckAccessDisabledIterator struct { + Event *ScrollValidatorCheckAccessDisabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorCheckAccessDisabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorCheckAccessDisabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorCheckAccessDisabledIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorCheckAccessDisabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorCheckAccessDisabled struct { + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ScrollValidatorCheckAccessDisabledIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return &ScrollValidatorCheckAccessDisabledIterator{contract: _ScrollValidator.contract, event: "CheckAccessDisabled", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ScrollValidatorCheckAccessDisabled) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "CheckAccessDisabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorCheckAccessDisabled) + if err := _ScrollValidator.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseCheckAccessDisabled(log types.Log) (*ScrollValidatorCheckAccessDisabled, error) { + event := new(ScrollValidatorCheckAccessDisabled) + if err := _ScrollValidator.contract.UnpackLog(event, "CheckAccessDisabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorCheckAccessEnabledIterator struct { + Event *ScrollValidatorCheckAccessEnabled + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorCheckAccessEnabledIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorCheckAccessEnabled) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorCheckAccessEnabledIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorCheckAccessEnabledIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorCheckAccessEnabled struct { + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ScrollValidatorCheckAccessEnabledIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return &ScrollValidatorCheckAccessEnabledIterator{contract: _ScrollValidator.contract, event: "CheckAccessEnabled", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ScrollValidatorCheckAccessEnabled) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "CheckAccessEnabled") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorCheckAccessEnabled) + if err := _ScrollValidator.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseCheckAccessEnabled(log types.Log) (*ScrollValidatorCheckAccessEnabled, error) { + event := new(ScrollValidatorCheckAccessEnabled) + if err := _ScrollValidator.contract.UnpackLog(event, "CheckAccessEnabled", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorConfigUpdatedIterator struct { + Event *ScrollValidatorConfigUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorConfigUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorConfigUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorConfigUpdatedIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorConfigUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorConfigUpdated struct { + L1CrossDomainMessengerAddress common.Address + L2UptimeFeedAddr common.Address + GasLimit uint32 + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterConfigUpdated(opts *bind.FilterOpts) (*ScrollValidatorConfigUpdatedIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "ConfigUpdated") + if err != nil { + return nil, err + } + return &ScrollValidatorConfigUpdatedIterator{contract: _ScrollValidator.contract, event: "ConfigUpdated", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchConfigUpdated(opts *bind.WatchOpts, sink chan<- *ScrollValidatorConfigUpdated) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "ConfigUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorConfigUpdated) + if err := _ScrollValidator.contract.UnpackLog(event, "ConfigUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseConfigUpdated(log types.Log) (*ScrollValidatorConfigUpdated, error) { + event := new(ScrollValidatorConfigUpdated) + if err := _ScrollValidator.contract.UnpackLog(event, "ConfigUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorGasLimitUpdatedIterator struct { + Event *ScrollValidatorGasLimitUpdated + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorGasLimitUpdatedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorGasLimitUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorGasLimitUpdated) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorGasLimitUpdatedIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorGasLimitUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorGasLimitUpdated struct { + GasLimit uint32 + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterGasLimitUpdated(opts *bind.FilterOpts) (*ScrollValidatorGasLimitUpdatedIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "GasLimitUpdated") + if err != nil { + return nil, err + } + return &ScrollValidatorGasLimitUpdatedIterator{contract: _ScrollValidator.contract, event: "GasLimitUpdated", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchGasLimitUpdated(opts *bind.WatchOpts, sink chan<- *ScrollValidatorGasLimitUpdated) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "GasLimitUpdated") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorGasLimitUpdated) + if err := _ScrollValidator.contract.UnpackLog(event, "GasLimitUpdated", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseGasLimitUpdated(log types.Log) (*ScrollValidatorGasLimitUpdated, error) { + event := new(ScrollValidatorGasLimitUpdated) + if err := _ScrollValidator.contract.UnpackLog(event, "GasLimitUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorOwnershipTransferRequestedIterator struct { + Event *ScrollValidatorOwnershipTransferRequested + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorOwnershipTransferRequestedIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorOwnershipTransferRequested) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorOwnershipTransferRequestedIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorOwnershipTransferRequestedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorOwnershipTransferRequested struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollValidatorOwnershipTransferRequestedIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollValidatorOwnershipTransferRequestedIterator{contract: _ScrollValidator.contract, event: "OwnershipTransferRequested", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollValidatorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "OwnershipTransferRequested", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorOwnershipTransferRequested) + if err := _ScrollValidator.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseOwnershipTransferRequested(log types.Log) (*ScrollValidatorOwnershipTransferRequested, error) { + event := new(ScrollValidatorOwnershipTransferRequested) + if err := _ScrollValidator.contract.UnpackLog(event, "OwnershipTransferRequested", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorOwnershipTransferredIterator struct { + Event *ScrollValidatorOwnershipTransferred + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorOwnershipTransferredIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorOwnershipTransferred) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorOwnershipTransferredIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorOwnershipTransferred struct { + From common.Address + To common.Address + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollValidatorOwnershipTransferredIterator, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return &ScrollValidatorOwnershipTransferredIterator{contract: _ScrollValidator.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollValidatorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) { + + var fromRule []interface{} + for _, fromItem := range from { + fromRule = append(fromRule, fromItem) + } + var toRule []interface{} + for _, toItem := range to { + toRule = append(toRule, toItem) + } + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "OwnershipTransferred", fromRule, toRule) + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorOwnershipTransferred) + if err := _ScrollValidator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseOwnershipTransferred(log types.Log) (*ScrollValidatorOwnershipTransferred, error) { + event := new(ScrollValidatorOwnershipTransferred) + if err := _ScrollValidator.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorRemovedAccessIterator struct { + Event *ScrollValidatorRemovedAccess + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorRemovedAccessIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorRemovedAccess) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorRemovedAccessIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorRemovedAccessIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorRemovedAccess struct { + User common.Address + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterRemovedAccess(opts *bind.FilterOpts) (*ScrollValidatorRemovedAccessIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return &ScrollValidatorRemovedAccessIterator{contract: _ScrollValidator.contract, event: "RemovedAccess", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ScrollValidatorRemovedAccess) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "RemovedAccess") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorRemovedAccess) + if err := _ScrollValidator.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseRemovedAccess(log types.Log) (*ScrollValidatorRemovedAccess, error) { + event := new(ScrollValidatorRemovedAccess) + if err := _ScrollValidator.contract.UnpackLog(event, "RemovedAccess", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +type ScrollValidatorValidatedStatusIterator struct { + Event *ScrollValidatorValidatedStatus + + contract *bind.BoundContract + event string + + logs chan types.Log + sub ethereum.Subscription + done bool + fail error +} + +func (it *ScrollValidatorValidatedStatusIterator) Next() bool { + + if it.fail != nil { + return false + } + + if it.done { + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorValidatedStatus) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + default: + return false + } + } + + select { + case log := <-it.logs: + it.Event = new(ScrollValidatorValidatedStatus) + if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { + it.fail = err + return false + } + it.Event.Raw = log + return true + + case err := <-it.sub.Err(): + it.done = true + it.fail = err + return it.Next() + } +} + +func (it *ScrollValidatorValidatedStatusIterator) Error() error { + return it.fail +} + +func (it *ScrollValidatorValidatedStatusIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +type ScrollValidatorValidatedStatus struct { + PreviousRoundId *big.Int + PreviousAnswer *big.Int + CurrentRoundId *big.Int + CurrentAnswer *big.Int + Raw types.Log +} + +func (_ScrollValidator *ScrollValidatorFilterer) FilterValidatedStatus(opts *bind.FilterOpts) (*ScrollValidatorValidatedStatusIterator, error) { + + logs, sub, err := _ScrollValidator.contract.FilterLogs(opts, "ValidatedStatus") + if err != nil { + return nil, err + } + return &ScrollValidatorValidatedStatusIterator{contract: _ScrollValidator.contract, event: "ValidatedStatus", logs: logs, sub: sub}, nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) WatchValidatedStatus(opts *bind.WatchOpts, sink chan<- *ScrollValidatorValidatedStatus) (event.Subscription, error) { + + logs, sub, err := _ScrollValidator.contract.WatchLogs(opts, "ValidatedStatus") + if err != nil { + return nil, err + } + return event.NewSubscription(func(quit <-chan struct{}) error { + defer sub.Unsubscribe() + for { + select { + case log := <-logs: + + event := new(ScrollValidatorValidatedStatus) + if err := _ScrollValidator.contract.UnpackLog(event, "ValidatedStatus", log); err != nil { + return err + } + event.Raw = log + + select { + case sink <- event: + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + case err := <-sub.Err(): + return err + case <-quit: + return nil + } + } + }), nil +} + +func (_ScrollValidator *ScrollValidatorFilterer) ParseValidatedStatus(log types.Log) (*ScrollValidatorValidatedStatus, error) { + event := new(ScrollValidatorValidatedStatus) + if err := _ScrollValidator.contract.UnpackLog(event, "ValidatedStatus", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +func (ScrollValidatorAddedAccess) Topic() common.Hash { + return common.HexToHash("0x87286ad1f399c8e82bf0c4ef4fcdc570ea2e1e92176e5c848b6413545b885db4") +} + +func (ScrollValidatorCheckAccessDisabled) Topic() common.Hash { + return common.HexToHash("0x3be8a977a014527b50ae38adda80b56911c267328965c98ddc385d248f539638") +} + +func (ScrollValidatorCheckAccessEnabled) Topic() common.Hash { + return common.HexToHash("0xaebf329500988c6488a0074e5a0a9ff304561fc5c6fc877aeb1d59c8282c3480") +} + +func (ScrollValidatorConfigUpdated) Topic() common.Hash { + return common.HexToHash("0x50ac1a0ab48727faf611b51ad202bb80d8cc334ca8e64154c3d430fbb23040cb") +} + +func (ScrollValidatorGasLimitUpdated) Topic() common.Hash { + return common.HexToHash("0x501c51f34bf3d8589156f7fd37055e69375b40034d9f99365cb3290b5d983c91") +} + +func (ScrollValidatorOwnershipTransferRequested) Topic() common.Hash { + return common.HexToHash("0xed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae1278") +} + +func (ScrollValidatorOwnershipTransferred) Topic() common.Hash { + return common.HexToHash("0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0") +} + +func (ScrollValidatorRemovedAccess) Topic() common.Hash { + return common.HexToHash("0x3d68a6fce901d20453d1a7aa06bf3950302a735948037deb182a8db66df2a0d1") +} + +func (ScrollValidatorValidatedStatus) Topic() common.Hash { + return common.HexToHash("0xdf570e5bda6b7c0c0415ceeafd5f9321908b69023cae41e030a6df91cad90b03") +} + +func (_ScrollValidator *ScrollValidator) Address() common.Address { + return _ScrollValidator.address +} + +type ScrollValidatorInterface interface { + L1CROSSDOMAINMESSENGERADDRESS(opts *bind.CallOpts) (common.Address, error) + + L1MSGQUEUEADDR(opts *bind.CallOpts) (common.Address, error) + + L2UPTIMEFEEDADDR(opts *bind.CallOpts) (common.Address, error) + + CheckEnabled(opts *bind.CallOpts) (bool, error) + + GetGasLimit(opts *bind.CallOpts) (uint32, error) + + HasAccess(opts *bind.CallOpts, _user common.Address, arg1 []byte) (bool, error) + + Owner(opts *bind.CallOpts) (common.Address, error) + + TypeAndVersion(opts *bind.CallOpts) (string, error) + + AcceptOwnership(opts *bind.TransactOpts) (*types.Transaction, error) + + AddAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + DisableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + EnableAccessCheck(opts *bind.TransactOpts) (*types.Transaction, error) + + RemoveAccess(opts *bind.TransactOpts, _user common.Address) (*types.Transaction, error) + + SetGasLimit(opts *bind.TransactOpts, gasLimit uint32) (*types.Transaction, error) + + TransferOwnership(opts *bind.TransactOpts, to common.Address) (*types.Transaction, error) + + Validate(opts *bind.TransactOpts, previousRoundId *big.Int, previousAnswer *big.Int, currentRoundId *big.Int, currentAnswer *big.Int) (*types.Transaction, error) + + Receive(opts *bind.TransactOpts) (*types.Transaction, error) + + FilterAddedAccess(opts *bind.FilterOpts) (*ScrollValidatorAddedAccessIterator, error) + + WatchAddedAccess(opts *bind.WatchOpts, sink chan<- *ScrollValidatorAddedAccess) (event.Subscription, error) + + ParseAddedAccess(log types.Log) (*ScrollValidatorAddedAccess, error) + + FilterCheckAccessDisabled(opts *bind.FilterOpts) (*ScrollValidatorCheckAccessDisabledIterator, error) + + WatchCheckAccessDisabled(opts *bind.WatchOpts, sink chan<- *ScrollValidatorCheckAccessDisabled) (event.Subscription, error) + + ParseCheckAccessDisabled(log types.Log) (*ScrollValidatorCheckAccessDisabled, error) + + FilterCheckAccessEnabled(opts *bind.FilterOpts) (*ScrollValidatorCheckAccessEnabledIterator, error) + + WatchCheckAccessEnabled(opts *bind.WatchOpts, sink chan<- *ScrollValidatorCheckAccessEnabled) (event.Subscription, error) + + ParseCheckAccessEnabled(log types.Log) (*ScrollValidatorCheckAccessEnabled, error) + + FilterConfigUpdated(opts *bind.FilterOpts) (*ScrollValidatorConfigUpdatedIterator, error) + + WatchConfigUpdated(opts *bind.WatchOpts, sink chan<- *ScrollValidatorConfigUpdated) (event.Subscription, error) + + ParseConfigUpdated(log types.Log) (*ScrollValidatorConfigUpdated, error) + + FilterGasLimitUpdated(opts *bind.FilterOpts) (*ScrollValidatorGasLimitUpdatedIterator, error) + + WatchGasLimitUpdated(opts *bind.WatchOpts, sink chan<- *ScrollValidatorGasLimitUpdated) (event.Subscription, error) + + ParseGasLimitUpdated(log types.Log) (*ScrollValidatorGasLimitUpdated, error) + + FilterOwnershipTransferRequested(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollValidatorOwnershipTransferRequestedIterator, error) + + WatchOwnershipTransferRequested(opts *bind.WatchOpts, sink chan<- *ScrollValidatorOwnershipTransferRequested, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferRequested(log types.Log) (*ScrollValidatorOwnershipTransferRequested, error) + + FilterOwnershipTransferred(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*ScrollValidatorOwnershipTransferredIterator, error) + + WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *ScrollValidatorOwnershipTransferred, from []common.Address, to []common.Address) (event.Subscription, error) + + ParseOwnershipTransferred(log types.Log) (*ScrollValidatorOwnershipTransferred, error) + + FilterRemovedAccess(opts *bind.FilterOpts) (*ScrollValidatorRemovedAccessIterator, error) + + WatchRemovedAccess(opts *bind.WatchOpts, sink chan<- *ScrollValidatorRemovedAccess) (event.Subscription, error) + + ParseRemovedAccess(log types.Log) (*ScrollValidatorRemovedAccess, error) + + FilterValidatedStatus(opts *bind.FilterOpts) (*ScrollValidatorValidatedStatusIterator, error) + + WatchValidatedStatus(opts *bind.WatchOpts, sink chan<- *ScrollValidatorValidatedStatus) (event.Subscription, error) + + ParseValidatedStatus(log types.Log) (*ScrollValidatorValidatedStatus, error) + + Address() common.Address +} diff --git a/gethwrappers/l2ep/generated/v1_0_0/scroll_validator/scroll_validator_metadata.go b/gethwrappers/l2ep/generated/v1_0_0/scroll_validator/scroll_validator_metadata.go new file mode 100644 index 0000000000..e9ccda5ba6 --- /dev/null +++ b/gethwrappers/l2ep/generated/v1_0_0/scroll_validator/scroll_validator_metadata.go @@ -0,0 +1,7 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + + +package scroll_validator + +var SolidityStandardInput = "{\"version\":\"v0.8.24+commit.e11b9ed9\",\"language\":\"Solidity\",\"settings\":{\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"appendCBOR\":true,\"bytecodeHash\":\"none\",\"useLiteralContent\":false},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"outputSelection\":{\"node_modules/@scroll-tech/contracts/L1/IL1ScrollMessenger.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"node_modules/@scroll-tech/contracts/L1/rollup/IL1MessageQueueV2.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"node_modules/@scroll-tech/contracts/libraries/IScrollMessenger.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/base/BaseValidator.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/interfaces/ISequencerUptimeFeed.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/l2ep/scroll/ScrollValidator.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/access/SimpleWriteAccessController.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AccessControllerInterface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/AggregatorValidatorInterface.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"\":[\"ast\"],\"*\":[\"abi\",\"evm.bytecode.object\",\"evm.bytecode.sourceMap\",\"evm.bytecode.linkReferences\",\"evm.deployedBytecode.object\",\"evm.deployedBytecode.sourceMap\",\"evm.deployedBytecode.linkReferences\",\"evm.deployedBytecode.immutableReferences\",\"evm.methodIdentifiers\",\"metadata\"]}},\"remappings\":[\"forge-std/=src/v0.8/vendor/forge-std/src/\",\"@openzeppelin/contracts@4.7.3/=node_modules/@openzeppelin/contracts-4.7.3/\",\"@openzeppelin/contracts@4.8.3/=node_modules/@openzeppelin/contracts-4.8.3/\",\"@openzeppelin/contracts@4.9.6/=node_modules/@openzeppelin/contracts-4.9.6/\",\"@openzeppelin/contracts@5.0.2/=node_modules/@openzeppelin/contracts-5.0.2/\",\"@openzeppelin/contracts@5.1.0/=node_modules/@openzeppelin/contracts-5.1.0/\",\"@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\"@arbitrum/=node_modules/@arbitrum/\",\"hardhat/=node_modules/hardhat/\",\"@eth-optimism/=node_modules/@eth-optimism/\",\"@scroll-tech/=node_modules/@scroll-tech/\",\"@zksync/=node_modules/@zksync/\"],\"viaIR\":false},\"sources\":{\"node_modules/@scroll-tech/contracts/L1/IL1ScrollMessenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\nimport {IScrollMessenger} from \\\"../libraries/IScrollMessenger.sol\\\";\\n\\ninterface IL1ScrollMessenger is IScrollMessenger {\\n /**********\\n * Events *\\n **********/\\n\\n /// @notice Emitted when the maximum number of times each message can be replayed is updated.\\n /// @param oldMaxReplayTimes The old maximum number of times each message can be replayed.\\n /// @param newMaxReplayTimes The new maximum number of times each message can be replayed.\\n event UpdateMaxReplayTimes(uint256 oldMaxReplayTimes, uint256 newMaxReplayTimes);\\n\\n /***********\\n * Structs *\\n ***********/\\n\\n struct L2MessageProof {\\n // The index of the batch where the message belongs to.\\n uint256 batchIndex;\\n // Concatenation of merkle proof for withdraw merkle trie.\\n bytes merkleProof;\\n }\\n\\n /*****************************\\n * Public Mutating Functions *\\n *****************************/\\n\\n /// @notice Relay a L2 =\\u003e L1 message with message proof.\\n /// @param from The address of the sender of the message.\\n /// @param to The address of the recipient of the message.\\n /// @param value The msg.value passed to the message call.\\n /// @param nonce The nonce of the message to avoid replay attack.\\n /// @param message The content of the message.\\n /// @param proof The proof used to verify the correctness of the transaction.\\n function relayMessageWithProof(\\n address from,\\n address to,\\n uint256 value,\\n uint256 nonce,\\n bytes memory message,\\n L2MessageProof memory proof\\n ) external;\\n\\n /// @notice Replay an existing message.\\n /// @param from The address of the sender of the message.\\n /// @param to The address of the recipient of the message.\\n /// @param value The msg.value passed to the message call.\\n /// @param messageNonce The nonce for the message to replay.\\n /// @param message The content of the message.\\n /// @param newGasLimit New gas limit to be used for this message.\\n /// @param refundAddress The address of account who will receive the refunded fee.\\n function replayMessage(\\n address from,\\n address to,\\n uint256 value,\\n uint256 messageNonce,\\n bytes memory message,\\n uint32 newGasLimit,\\n address refundAddress\\n ) external payable;\\n\\n /// @notice Drop a skipped message.\\n /// @param from The address of the sender of the message.\\n /// @param to The address of the recipient of the message.\\n /// @param value The msg.value passed to the message call.\\n /// @param messageNonce The nonce for the message to drop.\\n /// @param message The content of the message.\\n function dropMessage(\\n address from,\\n address to,\\n uint256 value,\\n uint256 messageNonce,\\n bytes memory message\\n ) external;\\n}\\n\"},\"node_modules/@scroll-tech/contracts/L1/rollup/IL1MessageQueueV2.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\ninterface IL1MessageQueueV2 {\\n /**********\\n * Events *\\n **********/\\n\\n /// @notice Emitted when a new L1 =\\u003e L2 transaction is appended to the queue.\\n /// @param sender The address of the sender account on L2.\\n /// @param target The address of the target account on L2.\\n /// @param value The ETH value transferred to the target account on L2.\\n /// @param queueIndex The index of this transaction in the message queue.\\n /// @param gasLimit The gas limit used on L2.\\n /// @param data The calldata passed to the target account on L2.\\n event QueueTransaction(\\n address indexed sender,\\n address indexed target,\\n uint256 value,\\n uint64 queueIndex,\\n uint256 gasLimit,\\n bytes data\\n );\\n\\n /// @notice Emitted when some L1 =\\u003e L2 transactions are finalized on L1.\\n /// @param finalizedIndex The index of the last message finalized.\\n event FinalizedDequeuedTransaction(uint256 finalizedIndex);\\n\\n /*************************\\n * Public View Functions *\\n *************************/\\n\\n /// @notice Return the start index of all messages in this contract.\\n function firstCrossDomainMessageIndex() external view returns (uint256);\\n\\n /// @notice Return the start index of all unfinalized messages.\\n function nextUnfinalizedQueueIndex() external view returns (uint256);\\n\\n /// @notice Return the index to be used for the next message.\\n /// @dev Also the total number of appended messages, including messages in `L1MessageQueueV1`.\\n function nextCrossDomainMessageIndex() external view returns (uint256);\\n\\n /// @notice Return the message rolling hash of `queueIndex`.\\n /// @param queueIndex The index to query.\\n function getMessageRollingHash(uint256 queueIndex) external view returns (bytes32);\\n\\n /// @notice Return the message enqueue timestamp of `queueIndex`.\\n /// @param queueIndex The index to query.\\n function getMessageEnqueueTimestamp(uint256 queueIndex) external view returns (uint256);\\n\\n /// @notice Return the first unfinalized message enqueue timestamp.\\n function getFirstUnfinalizedMessageEnqueueTime() external view returns (uint256);\\n\\n /// @notice Return the amount of ETH that should be paid for a cross-domain message.\\n /// @param gasLimit The gas limit required to complete the message relay on L2.\\n function estimateCrossDomainMessageFee(uint256 gasLimit) external view returns (uint256);\\n\\n /// @notice Return the estimated base fee on L2.\\n function estimateL2BaseFee() external view returns (uint256);\\n\\n /// @notice Return the intrinsic gas required by the provided cross-domain message.\\n /// @param data The calldata of the cross-domain message.\\n function calculateIntrinsicGasFee(bytes calldata data) external view returns (uint256);\\n\\n /// @notice Compute the transaction hash of an L1 message.\\n /// @param sender The address of the sender account.\\n /// @param queueIndex The index of this transaction in the message queue.\\n /// @param value The ETH value transferred to the target account.\\n /// @param target The address of the target account.\\n /// @param gasLimit The gas limit provided.\\n /// @param data The calldata passed to the target account.\\n function computeTransactionHash(\\n address sender,\\n uint256 queueIndex,\\n uint256 value,\\n address target,\\n uint256 gasLimit,\\n bytes calldata data\\n ) external view returns (bytes32);\\n\\n /*****************************\\n * Public Mutating Functions *\\n *****************************/\\n\\n /// @notice Append a L1 =\\u003e L2 cross-domain message to the message queue.\\n /// @param target The address of the target account on L2.\\n /// @param gasLimit The gas limit used on L2.\\n /// @param data The calldata passed to the target account on L2.\\n /// @dev This function can only be called by `L1ScrollMessenger`.\\n function appendCrossDomainMessage(\\n address target,\\n uint256 gasLimit,\\n bytes calldata data\\n ) external;\\n\\n /// @notice Append an enforced transaction to the message queue.\\n /// @param sender The address of the sender account on L2.\\n /// @param target The address of the target account on L2.\\n /// @param value The ETH value transferred to the target account on L2.\\n /// @param gasLimit The gas limit used on L2.\\n /// @param data The calldata passed to the target account on L2.\\n /// @dev This function can only be called by `EnforcedTxGateway`.\\n function appendEnforcedTransaction(\\n address sender,\\n address target,\\n uint256 value,\\n uint256 gasLimit,\\n bytes calldata data\\n ) external;\\n\\n /// @notice Mark cross-domain messages as finalized.\\n /// @param nextUnfinalizedQueueIndex The index of the first unfinalized message after this call.\\n /// @dev This function can only be called by `ScrollChain`.\\n function finalizePoppedCrossDomainMessage(uint256 nextUnfinalizedQueueIndex) external;\\n}\\n\"},\"node_modules/@scroll-tech/contracts/libraries/IScrollMessenger.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n\\npragma solidity ^0.8.24;\\n\\ninterface IScrollMessenger {\\n /**********\\n * Events *\\n **********/\\n\\n /// @notice Emitted when a cross domain message is sent.\\n /// @param sender The address of the sender who initiates the message.\\n /// @param target The address of target contract to call.\\n /// @param value The amount of value passed to the target contract.\\n /// @param messageNonce The nonce of the message.\\n /// @param gasLimit The optional gas limit passed to L1 or L2.\\n /// @param message The calldata passed to the target contract.\\n event SentMessage(\\n address indexed sender,\\n address indexed target,\\n uint256 value,\\n uint256 messageNonce,\\n uint256 gasLimit,\\n bytes message\\n );\\n\\n /// @notice Emitted when a cross domain message is relayed successfully.\\n /// @param messageHash The hash of the message.\\n event RelayedMessage(bytes32 indexed messageHash);\\n\\n /// @notice Emitted when a cross domain message is failed to relay.\\n /// @param messageHash The hash of the message.\\n event FailedRelayedMessage(bytes32 indexed messageHash);\\n\\n /**********\\n * Errors *\\n **********/\\n\\n /// @dev Thrown when the given address is `address(0)`.\\n error ErrorZeroAddress();\\n\\n /*************************\\n * Public View Functions *\\n *************************/\\n\\n /// @notice Return the sender of a cross domain message.\\n function xDomainMessageSender() external view returns (address);\\n\\n /*****************************\\n * Public Mutating Functions *\\n *****************************/\\n\\n /// @notice Send cross chain message from L1 to L2 or L2 to L1.\\n /// @param target The address of account who receive the message.\\n /// @param value The amount of ether passed when call target contract.\\n /// @param message The content of the message.\\n /// @param gasLimit Gas limit required to complete the message relay on corresponding chain.\\n function sendMessage(\\n address target,\\n uint256 value,\\n bytes calldata message,\\n uint256 gasLimit\\n ) external payable;\\n\\n /// @notice Send cross chain message from L1 to L2 or L2 to L1.\\n /// @param target The address of account who receive the message.\\n /// @param value The amount of ether passed when call target contract.\\n /// @param message The content of the message.\\n /// @param gasLimit Gas limit required to complete the message relay on corresponding chain.\\n /// @param refundAddress The address of account who will receive the refunded fee.\\n function sendMessage(\\n address target,\\n uint256 value,\\n bytes calldata message,\\n uint256 gasLimit,\\n address refundAddress\\n ) external payable;\\n}\\n\"},\"src/v0.8/l2ep/base/BaseValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.19;\\n\\nimport {AggregatorValidatorInterface} from \\\"../../shared/interfaces/AggregatorValidatorInterface.sol\\\";\\nimport {ITypeAndVersion} from \\\"../../shared/interfaces/ITypeAndVersion.sol\\\";\\n\\nimport {SimpleWriteAccessController} from \\\"../../shared/access/SimpleWriteAccessController.sol\\\";\\n\\nabstract contract BaseValidator is SimpleWriteAccessController, AggregatorValidatorInterface, ITypeAndVersion {\\n /// @notice emitted when gas cost to spend on L2 is updated\\n /// @param gasLimit updated gas cost\\n event GasLimitUpdated(uint32 gasLimit);\\n\\n /// @notice emitted when the contract config is updated\\n /// @param l1CrossDomainMessengerAddress address the L1CrossDomainMessenger contract address\\n /// @param l2UptimeFeedAddr the address of the L2 SequencerUptimeFeed contract address\\n /// @param gasLimit the gasLimit to use for sending a message from L1 to L2\\n event ConfigUpdated(address l1CrossDomainMessengerAddress, address l2UptimeFeedAddr, uint32 gasLimit);\\n\\n /// @notice emitted when a validation is executed successfully\\n /// @param previousRoundId previous aggregator OCR round id\\n /// @param previousAnswer previous aggregator answer\\n /// @param currentRoundId current aggregator OCR round id\\n /// @param currentAnswer new aggregator answer - value of 1 considers the service offline.\\n event ValidatedStatus(uint256 previousRoundId, int256 previousAnswer, uint256 currentRoundId, int256 currentAnswer);\\n\\n error L1CrossDomainMessengerAddressZero();\\n error L2UptimeFeedAddrZero();\\n\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n address public immutable L1_CROSS_DOMAIN_MESSENGER_ADDRESS;\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n address public immutable L2_UPTIME_FEED_ADDR;\\n\\n int256 internal constant ANSWER_SEQ_OFFLINE = 1;\\n\\n uint32 internal s_gasLimit;\\n\\n /// @param l1CrossDomainMessengerAddress address the L1CrossDomainMessenger contract address\\n /// @param l2UptimeFeedAddr the address of the L2 SequencerUptimeFeed contract address\\n /// @param gasLimit the gasLimit to use for sending a message from L1 to L2\\n constructor(address l1CrossDomainMessengerAddress, address l2UptimeFeedAddr, uint32 gasLimit) {\\n if (l1CrossDomainMessengerAddress == address(0)) {\\n revert L1CrossDomainMessengerAddressZero();\\n }\\n if (l2UptimeFeedAddr == address(0)) {\\n revert L2UptimeFeedAddrZero();\\n }\\n\\n L1_CROSS_DOMAIN_MESSENGER_ADDRESS = l1CrossDomainMessengerAddress;\\n L2_UPTIME_FEED_ADDR = l2UptimeFeedAddr;\\n s_gasLimit = gasLimit;\\n emit ConfigUpdated(l1CrossDomainMessengerAddress, l2UptimeFeedAddr, gasLimit);\\n }\\n\\n /// @notice fetches the gas cost of sending a cross chain message\\n function getGasLimit() external view returns (uint32) {\\n return s_gasLimit;\\n }\\n\\n /// @notice sets the new gas cost to spend when sending cross chain message\\n /// @param gasLimit the updated gas cost\\n function setGasLimit(\\n uint32 gasLimit\\n ) external onlyOwner {\\n s_gasLimit = gasLimit;\\n emit GasLimitUpdated(gasLimit);\\n }\\n\\n /// @notice makes this contract payable\\n /// @dev receives funds:\\n /// - to use them (if configured) to pay for L2 execution on L1\\n /// - when withdrawing funds from L2 xDomain alias address (pay for L2 execution on L2)\\n receive() external payable {}\\n}\\n\"},\"src/v0.8/l2ep/interfaces/ISequencerUptimeFeed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ISequencerUptimeFeed {\\n function updateStatus(bool status, uint64 timestamp) external;\\n}\\n\"},\"src/v0.8/l2ep/scroll/ScrollValidator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity 0.8.24;\\n\\nimport {ISequencerUptimeFeed} from \\\"../interfaces/ISequencerUptimeFeed.sol\\\";\\n\\nimport {BaseValidator} from \\\"../base/BaseValidator.sol\\\";\\n\\nimport {IL1ScrollMessenger} from \\\"@scroll-tech/contracts/L1/IL1ScrollMessenger.sol\\\";\\nimport {IL1MessageQueueV2} from \\\"@scroll-tech/contracts/L1/rollup/IL1MessageQueueV2.sol\\\";\\n\\n/// @title ScrollValidator - makes cross chain call to update the Sequencer Uptime Feed on L2\\ncontract ScrollValidator is BaseValidator {\\n string public constant override typeAndVersion = \\\"ScrollValidator 1.1.0\\\";\\n\\n // solhint-disable-next-line chainlink-solidity/prefix-immutable-variables-with-i\\n address public immutable L1_MSG_QUEUE_ADDR;\\n\\n constructor(\\n address l1CrossDomainMessengerAddress,\\n address l2UptimeFeedAddr,\\n address l1MessageQueueAddr,\\n uint32 gasLimit\\n ) BaseValidator(l1CrossDomainMessengerAddress, l2UptimeFeedAddr, gasLimit) {\\n // solhint-disable-next-line gas-custom-errors\\n require(l1MessageQueueAddr != address(0), \\\"Invalid L1 message queue address\\\");\\n L1_MSG_QUEUE_ADDR = l1MessageQueueAddr;\\n }\\n\\n /// @notice validate method sends an xDomain L2 tx to update Uptime Feed contract on L2.\\n /// @dev A message is sent using the L1CrossDomainMessenger. This method is accessed controlled.\\n /// @param currentAnswer new aggregator answer - value of 1 considers the sequencer offline.\\n function validate(\\n uint256 previousRoundId,\\n int256 previousAnswer,\\n uint256 currentRoundId,\\n int256 currentAnswer\\n ) external override checkAccess returns (bool) {\\n // Make the xDomain call\\n IL1ScrollMessenger(L1_CROSS_DOMAIN_MESSENGER_ADDRESS).sendMessage{\\n value: IL1MessageQueueV2(L1_MSG_QUEUE_ADDR).estimateCrossDomainMessageFee(s_gasLimit)\\n }(\\n L2_UPTIME_FEED_ADDR,\\n 0,\\n abi.encodeWithSelector(\\n ISequencerUptimeFeed.updateStatus.selector, currentAnswer == ANSWER_SEQ_OFFLINE, uint64(block.timestamp)\\n ),\\n s_gasLimit\\n );\\n\\n emit BaseValidator.ValidatedStatus(previousRoundId, previousAnswer, currentRoundId, currentAnswer);\\n // return success\\n return true;\\n }\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwner.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {ConfirmedOwnerWithProposal} from \\\"./ConfirmedOwnerWithProposal.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwner is ConfirmedOwnerWithProposal {\\n constructor(\\n address newOwner\\n ) ConfirmedOwnerWithProposal(newOwner, address(0)) {}\\n}\\n\"},\"src/v0.8/shared/access/ConfirmedOwnerWithProposal.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {IOwnable} from \\\"../interfaces/IOwnable.sol\\\";\\n\\n/// @title The ConfirmedOwner contract\\n/// @notice A contract with helpers for basic contract ownership.\\ncontract ConfirmedOwnerWithProposal is IOwnable {\\n address private s_owner;\\n address private s_pendingOwner;\\n\\n event OwnershipTransferRequested(address indexed from, address indexed to);\\n event OwnershipTransferred(address indexed from, address indexed to);\\n\\n constructor(address newOwner, address pendingOwner) {\\n // solhint-disable-next-line gas-custom-errors\\n require(newOwner != address(0), \\\"Cannot set owner to zero\\\");\\n\\n s_owner = newOwner;\\n if (pendingOwner != address(0)) {\\n _transferOwnership(pendingOwner);\\n }\\n }\\n\\n /// @notice Allows an owner to begin transferring ownership to a new address.\\n function transferOwnership(\\n address to\\n ) public override onlyOwner {\\n _transferOwnership(to);\\n }\\n\\n /// @notice Allows an ownership transfer to be completed by the recipient.\\n function acceptOwnership() external override {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_pendingOwner, \\\"Must be proposed owner\\\");\\n\\n address oldOwner = s_owner;\\n s_owner = msg.sender;\\n s_pendingOwner = address(0);\\n\\n emit OwnershipTransferred(oldOwner, msg.sender);\\n }\\n\\n /// @notice Get the current owner\\n function owner() public view override returns (address) {\\n return s_owner;\\n }\\n\\n /// @notice validate, transfer ownership, and emit relevant events\\n function _transferOwnership(\\n address to\\n ) private {\\n // solhint-disable-next-line gas-custom-errors\\n require(to != msg.sender, \\\"Cannot transfer to self\\\");\\n\\n s_pendingOwner = to;\\n\\n emit OwnershipTransferRequested(s_owner, to);\\n }\\n\\n /// @notice validate access\\n function _validateOwnership() internal view {\\n // solhint-disable-next-line gas-custom-errors\\n require(msg.sender == s_owner, \\\"Only callable by owner\\\");\\n }\\n\\n /// @notice Reverts if called by anyone other than the contract owner.\\n modifier onlyOwner() {\\n _validateOwnership();\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/access/SimpleWriteAccessController.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport {AccessControllerInterface} from \\\"../interfaces/AccessControllerInterface.sol\\\";\\nimport {ConfirmedOwner} from \\\"./ConfirmedOwner.sol\\\";\\n\\n/// @title SimpleWriteAccessController\\n/// @notice Gives access to accounts explicitly added to an access list by the controller's owner.\\n/// @dev does not make any special permissions for externally, see SimpleReadAccessController for that.\\ncontract SimpleWriteAccessController is AccessControllerInterface, ConfirmedOwner {\\n bool public checkEnabled;\\n mapping(address =\\u003e bool) internal s_accessList;\\n\\n event AddedAccess(address user);\\n event RemovedAccess(address user);\\n event CheckAccessEnabled();\\n event CheckAccessDisabled();\\n\\n constructor() ConfirmedOwner(msg.sender) {\\n checkEnabled = true;\\n }\\n\\n /// @notice Returns the access of an address\\n /// @param _user The address to query\\n function hasAccess(address _user, bytes memory) public view virtual override returns (bool) {\\n return s_accessList[_user] || !checkEnabled;\\n }\\n\\n /// @notice Adds an address to the access list\\n /// @param _user The address to add\\n function addAccess(\\n address _user\\n ) external onlyOwner {\\n if (!s_accessList[_user]) {\\n s_accessList[_user] = true;\\n\\n emit AddedAccess(_user);\\n }\\n }\\n\\n /// @notice Removes an address from the access list\\n /// @param _user The address to remove\\n function removeAccess(\\n address _user\\n ) external onlyOwner {\\n if (s_accessList[_user]) {\\n s_accessList[_user] = false;\\n\\n emit RemovedAccess(_user);\\n }\\n }\\n\\n /// @notice makes the access check enforced\\n function enableAccessCheck() external onlyOwner {\\n if (!checkEnabled) {\\n checkEnabled = true;\\n\\n emit CheckAccessEnabled();\\n }\\n }\\n\\n /// @notice makes the access check unenforced\\n function disableAccessCheck() external onlyOwner {\\n if (checkEnabled) {\\n checkEnabled = false;\\n\\n emit CheckAccessDisabled();\\n }\\n }\\n\\n /// @dev reverts if the caller does not have access\\n modifier checkAccess() {\\n // solhint-disable-next-line gas-custom-errors\\n require(hasAccess(msg.sender, msg.data), \\\"No access\\\");\\n _;\\n }\\n}\\n\"},\"src/v0.8/shared/interfaces/AccessControllerInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AccessControllerInterface {\\n function hasAccess(address user, bytes calldata data) external view returns (bool);\\n}\\n\"},\"src/v0.8/shared/interfaces/AggregatorValidatorInterface.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n// solhint-disable-next-line interface-starts-with-i\\ninterface AggregatorValidatorInterface {\\n function validate(\\n uint256 previousRoundId,\\n int256 previousAnswer,\\n uint256 currentRoundId,\\n int256 currentAnswer\\n ) external returns (bool);\\n}\\n\"},\"src/v0.8/shared/interfaces/IOwnable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IOwnable {\\n function owner() external returns (address);\\n\\n function transferOwnership(\\n address recipient\\n ) external;\\n\\n function acceptOwnership() external;\\n}\\n\"},\"src/v0.8/shared/interfaces/ITypeAndVersion.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface ITypeAndVersion {\\n function typeAndVersion() external pure returns (string memory);\\n}\\n\"}}}" diff --git a/gethwrappers/l2ep/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/gethwrappers/l2ep/generation/generated-wrapper-dependency-versions-do-not-edit.txt new file mode 100644 index 0000000000..5e21154a0b --- /dev/null +++ b/gethwrappers/l2ep/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -0,0 +1,13 @@ +GETH_VERSION: 1.17.0 +arbitrum_cross_domain_forwarder: ../../contracts/solc/l2ep/ArbitrumCrossDomainForwarder/ArbitrumCrossDomainForwarder.sol/ArbitrumCrossDomainForwarder.abi.json ../../contracts/solc/l2ep/ArbitrumCrossDomainForwarder/ArbitrumCrossDomainForwarder.sol/ArbitrumCrossDomainForwarder.bin b9a42ecb8b5bcee81fdc33b565422297b4e2163b16afbc1a400ec2f169b54e5c +arbitrum_cross_domain_governor: ../../contracts/solc/l2ep/ArbitrumCrossDomainGovernor/ArbitrumCrossDomainGovernor.sol/ArbitrumCrossDomainGovernor.abi.json ../../contracts/solc/l2ep/ArbitrumCrossDomainGovernor/ArbitrumCrossDomainGovernor.sol/ArbitrumCrossDomainGovernor.bin 3ff6d00db86e8abd60ca27a3018806e078c701815fb02b48d3a9f8e3f924d307 +arbitrum_sequencer_uptime_feed: ../../contracts/solc/l2ep/ArbitrumSequencerUptimeFeed/ArbitrumSequencerUptimeFeed.sol/ArbitrumSequencerUptimeFeed.abi.json ../../contracts/solc/l2ep/ArbitrumSequencerUptimeFeed/ArbitrumSequencerUptimeFeed.sol/ArbitrumSequencerUptimeFeed.bin 6915fa8112161f20792c33c3e5df4fdd917284f743be05699c54b1f2a0b45910 +arbitrum_validator: ../../contracts/solc/l2ep/ArbitrumValidator/ArbitrumValidator.sol/ArbitrumValidator.abi.json ../../contracts/solc/l2ep/ArbitrumValidator/ArbitrumValidator.sol/ArbitrumValidator.bin 53abdc8f8e58f13f978059211322a2abc44c2a9d8c30242a3778f09dc699388d +optimism_cross_domain_forwarder: ../../contracts/solc/l2ep/OptimismCrossDomainForwarder/OptimismCrossDomainForwarder.sol/OptimismCrossDomainForwarder.abi.json ../../contracts/solc/l2ep/OptimismCrossDomainForwarder/OptimismCrossDomainForwarder.sol/OptimismCrossDomainForwarder.bin bb04997e8db20cb2a3a8e9a1129790c85b64a08e3c1daa29f2b5ec6002b12335 +optimism_cross_domain_governor: ../../contracts/solc/l2ep/OptimismCrossDomainGovernor/OptimismCrossDomainGovernor.sol/OptimismCrossDomainGovernor.abi.json ../../contracts/solc/l2ep/OptimismCrossDomainGovernor/OptimismCrossDomainGovernor.sol/OptimismCrossDomainGovernor.bin 2d88ff37a388d4ba63a6775165970d6474c2f37cf3b81b463f2ce32a71e751d7 +optimism_sequencer_uptime_feed: ../../contracts/solc/l2ep/OptimismSequencerUptimeFeed/OptimismSequencerUptimeFeed.sol/OptimismSequencerUptimeFeed.abi.json ../../contracts/solc/l2ep/OptimismSequencerUptimeFeed/OptimismSequencerUptimeFeed.sol/OptimismSequencerUptimeFeed.bin 8b48603f00bfd62e0449c4bd175e31db7d1b1c5399ee7c253abfc9b18d7dda70 +optimism_validator: ../../contracts/solc/l2ep/OptimismValidator/OptimismValidator.sol/OptimismValidator.abi.json ../../contracts/solc/l2ep/OptimismValidator/OptimismValidator.sol/OptimismValidator.bin 2c0f498c9e9e8b75881564fbb8566dddf800495fc904249c740df247e6b79d1c +scroll_cross_domain_forwarder: ../../contracts/solc/l2ep/ScrollCrossDomainForwarder/ScrollCrossDomainForwarder.sol/ScrollCrossDomainForwarder.abi.json ../../contracts/solc/l2ep/ScrollCrossDomainForwarder/ScrollCrossDomainForwarder.sol/ScrollCrossDomainForwarder.bin 6f3851c38b4f06beecaec416e3537a31fa39f7e8d9629315087929bdad45b515 +scroll_cross_domain_governor: ../../contracts/solc/l2ep/ScrollCrossDomainGovernor/ScrollCrossDomainGovernor.sol/ScrollCrossDomainGovernor.abi.json ../../contracts/solc/l2ep/ScrollCrossDomainGovernor/ScrollCrossDomainGovernor.sol/ScrollCrossDomainGovernor.bin c68de0c47c81504af01fbba1f9ffdbccad5595a80b94a0300021c8645fc00cd2 +scroll_sequencer_uptime_feed: ../../contracts/solc/l2ep/ScrollSequencerUptimeFeed/ScrollSequencerUptimeFeed.sol/ScrollSequencerUptimeFeed.abi.json ../../contracts/solc/l2ep/ScrollSequencerUptimeFeed/ScrollSequencerUptimeFeed.sol/ScrollSequencerUptimeFeed.bin 0091d5cf7af0963ea0492ac7591875d00a141de38db5f23a72b5b91a6cb7dfa4 +scroll_validator: ../../contracts/solc/l2ep/ScrollValidator/ScrollValidator.sol/ScrollValidator.abi.json ../../contracts/solc/l2ep/ScrollValidator/ScrollValidator.sol/ScrollValidator.bin e5be8ea9af97a4965f09f85cf0e82005e40e2e92745c708e328ba762dbce4d35 diff --git a/gethwrappers/l2ep/go_generate.go b/gethwrappers/l2ep/go_generate.go new file mode 100644 index 0000000000..c2b5c44212 --- /dev/null +++ b/gethwrappers/l2ep/go_generate.go @@ -0,0 +1,18 @@ +// Package gethwrappers provides tools for wrapping solidity contracts with +// golang packages, using abigen. +package gethwrappers + +//go:generate go run ../wrap l2ep ArbitrumValidator arbitrum_validator +//go:generate go run ../wrap l2ep ArbitrumSequencerUptimeFeed arbitrum_sequencer_uptime_feed +//go:generate go run ../wrap l2ep ArbitrumCrossDomainForwarder arbitrum_cross_domain_forwarder +//go:generate go run ../wrap l2ep ArbitrumCrossDomainGovernor arbitrum_cross_domain_governor + +//go:generate go run ../wrap l2ep OptimismValidator optimism_validator +//go:generate go run ../wrap l2ep OptimismSequencerUptimeFeed optimism_sequencer_uptime_feed +//go:generate go run ../wrap l2ep OptimismCrossDomainForwarder optimism_cross_domain_forwarder +//go:generate go run ../wrap l2ep OptimismCrossDomainGovernor optimism_cross_domain_governor + +//go:generate go run ../wrap l2ep ScrollValidator scroll_validator +//go:generate go run ../wrap l2ep ScrollSequencerUptimeFeed scroll_sequencer_uptime_feed +//go:generate go run ../wrap l2ep ScrollCrossDomainForwarder scroll_cross_domain_forwarder +//go:generate go run ../wrap l2ep ScrollCrossDomainGovernor scroll_cross_domain_governor